Overview
POL Balance
POL Value
$0.06 (@ $0.32/POL)More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 28 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Process Pair Pri... | 65067157 | 71 days ago | IN | 0 POL | 0.00891511 | ||||
Place Order | 65066685 | 71 days ago | IN | 0.02 POL | 0.02620682 | ||||
Withdraw Order | 65038918 | 71 days ago | IN | 0 POL | 0.02785663 | ||||
Process Pair Pri... | 64986783 | 73 days ago | IN | 0 POL | 0.07024326 | ||||
Place Order | 64986641 | 73 days ago | IN | 0.02 POL | 0.1457223 | ||||
Withdraw Order | 64986545 | 73 days ago | IN | 0 POL | 0.07836384 | ||||
Process Pair Pri... | 64981711 | 73 days ago | IN | 0 POL | 0.00931106 | ||||
Place Order | 64979526 | 73 days ago | IN | 2.02 POL | 0.03526344 | ||||
Cancel Order | 64979485 | 73 days ago | IN | 0 POL | 0.01632324 | ||||
Place Order | 64979424 | 73 days ago | IN | 2.02 POL | 0.05489406 | ||||
Withdraw Order | 64979376 | 73 days ago | IN | 0 POL | 0.01848191 | ||||
Withdraw Order | 64979371 | 73 days ago | IN | 0 POL | 0.01851927 | ||||
Withdraw Order | 64979365 | 73 days ago | IN | 0 POL | 0.01936563 | ||||
Process Pair Pri... | 64971412 | 73 days ago | IN | 0 POL | 0.00810625 | ||||
Cancel Order | 64957694 | 73 days ago | IN | 0 POL | 0.01045959 | ||||
Withdraw Order | 64957635 | 73 days ago | IN | 0 POL | 0.01357312 | ||||
Place Order | 64957502 | 73 days ago | IN | 0.02 POL | 0.03309863 | ||||
Process Pair Pri... | 64955395 | 73 days ago | IN | 0 POL | 0.02179158 | ||||
Place Order | 64955370 | 73 days ago | IN | 0.04 POL | 0.03656538 | ||||
Process Pair Pri... | 64954832 | 73 days ago | IN | 0 POL | 0.01456847 | ||||
Place Order | 64954823 | 73 days ago | IN | 0.02 POL | 0.02362198 | ||||
Withdraw Order | 64947708 | 74 days ago | IN | 0 POL | 0.0048849 | ||||
Process Pair Pri... | 64947623 | 74 days ago | IN | 0 POL | 0.00936229 | ||||
Place Order | 64947595 | 74 days ago | IN | 0.02 POL | 0.01622865 | ||||
Place Order | 64947095 | 74 days ago | IN | 0.02 POL | 0.01415444 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
65067157 | 71 days ago | 0.19468242 POL | ||||
65066685 | 71 days ago | 0.02 POL | ||||
65038918 | 71 days ago | 1.94318765 POL | ||||
64986783 | 73 days ago | 1.94318765 POL | ||||
64986641 | 73 days ago | 0.02 POL | ||||
64979526 | 73 days ago | 0.02 POL | ||||
64979526 | 73 days ago | 2 POL | ||||
64979485 | 73 days ago | 2 POL | ||||
64979485 | 73 days ago | 2 POL | ||||
64979424 | 73 days ago | 0.02 POL | ||||
64979424 | 73 days ago | 2 POL | ||||
64979371 | 73 days ago | 0.01903187 POL | ||||
64979365 | 73 days ago | 0.19434121 POL | ||||
64971412 | 73 days ago | 0.19434121 POL | ||||
64957635 | 73 days ago | 0.01299289 POL | ||||
64957502 | 73 days ago | 0.02 POL | ||||
64955370 | 73 days ago | 0.02 POL | ||||
64955370 | 73 days ago | 0.02 POL | ||||
64954832 | 73 days ago | 0.01903187 POL | ||||
64954823 | 73 days ago | 0.02 POL | ||||
64947708 | 74 days ago | 0.18895153 POL | ||||
64947623 | 74 days ago | 0.18895153 POL | ||||
64947595 | 74 days ago | 0.02 POL | ||||
64947095 | 74 days ago | 0.02 POL | ||||
64946496 | 74 days ago | 0.01299289 POL |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
TokenSwapSpot
Compiler Version
v0.8.28+commit.7893614a
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2024-11-30 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface ITokenSwap { function swapToken( address tokenIn, address tokenOut, uint256 amountIn, uint24 feeTier, address payable reseller ) external payable; function getPrice(address token1,address token2,uint256 feeTier) external view returns (uint256); function WETH() external view returns (address); } interface IERC20 { function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); function allowance(address owner,address spender) external view returns (uint); function approve(address spender, uint256 amount) external returns (bool); } interface IWETH { function deposit() external payable; function withdraw(uint wad) external; } contract TokenSwapSpot { // Owner of the contract address public owner; // Oracle address to call for order processing address public oracle; // Address of the TokenSwap contract (Uniswap swap handler) address public tokenSwapContract; ITokenSwap tokenSwap; address public WETH; uint public oracleFee = 0.02 ether; // Event for order placed event OrderPlaced(address indexed user, address tokenIn, address tokenOut, uint256 price, uint256 amountIn); // Event for swap triggered via oracle event OrderTriggered(address indexed user, address tokenIn, address tokenOut, uint256 price, uint256 amountIn); // Event for order cancellation event OrderCancelled(address indexed user, address tokenIn, address tokenOut, uint256 price, uint256 amountIn); // Struct representing a limit order struct Order { address user; uint256 priceIn; uint256 pairPriceId; uint256 amountIn; // tokenInAmount uint8 status; // 0=>open / 1=>withdrawed / 2=>cancelled uint256 createdAt; uint256 updatedAt; } uint256 public lastOrderId; mapping(uint256 => Order) public orders; mapping (address => uint[]) userOrderIds; mapping (address =>uint) public userOrderCount; struct PairPrice{ address tokenIn; address tokenOut; uint256 price; uint256 totalAmountIn; uint256 amountOut; // if 0 its open, if more it's done uint256 totalWithdrawn; } uint256 public lastPairId; mapping(uint256 => PairPrice) public pairPrices; mapping(address => mapping(address => mapping(uint=>uint))) pairPriceIds; // Modifier to restrict functions to the contract owner modifier onlyOwner() { require(msg.sender == owner, "Not the contract owner"); _; } // Modifier to restrict functions to the oracle modifier onlyOracle() { require(msg.sender == oracle, "Not the oracle"); _; } constructor(address _tokenSwapContract) { owner = msg.sender; oracle = msg.sender; tokenSwapContract = _tokenSwapContract; tokenSwap = ITokenSwap(tokenSwapContract); WETH = tokenSwap.WETH(); } // Function to place a limit order function placeOrder(address tokenIn, address tokenOut, uint256 priceLimit, uint256 priceIn, uint256 amountIn) external payable { require(msg.value >= oracleFee,"Not enough oracle fee"); if(tokenIn==address(0)) tokenIn=WETH; if(tokenOut==address(0)) tokenOut=WETH; if (msg.value > oracleFee && tokenIn==address(WETH)) { tokenIn = WETH; amountIn = msg.value - oracleFee; IWETH wethContract = IWETH(WETH); wethContract.deposit{value: amountIn}(); //transfer oracle fee to oracle address (bool sent, ) = oracle.call{value: oracleFee}(""); require(sent, "Failed to send oracle fee"); }else{ require(amountIn > 0, "Must specify an amount to swap"); //transfer token to contract IERC20 token = IERC20(tokenIn); token.transferFrom(msg.sender, address(this), amountIn); //transfer oracle fee to oracle address if(msg.value>0){ (bool sent, ) = oracle.call{value: msg.value}(""); require(sent, "Failed to send oracle fee"); } } uint256 pairPriceId = getPairPriceId(tokenIn,tokenOut,priceLimit); pairPrices[pairPriceId].totalAmountIn += amountIn; //approve tokenIn IERC20 erc20 = IERC20(tokenIn); if(erc20.allowance(address(this), tokenSwapContract)<amountIn) erc20.approve(tokenSwapContract,type(uint256).max); //place order // uint priceIn = tokenSwap.getPrice(tokenIn, tokenOut,3000); Order memory newOrder = Order({ user: msg.sender, priceIn: priceIn, pairPriceId:pairPriceId, amountIn: amountIn, status:0,//pending createdAt: block.timestamp, updatedAt: 0 }); lastOrderId++; orders[lastOrderId] = newOrder; userOrderIds[msg.sender].push(lastOrderId); userOrderCount[msg.sender]++; emit OrderPlaced(msg.sender, tokenIn, tokenOut, priceLimit, amountIn); } // Function to cancel an order function cancelOrder(uint256 orderIndex) external { //validate inputs require(orderIndex<=userOrderCount[msg.sender],"Order id is not valid"); uint256 orderId = userOrderIds[msg.sender][orderIndex]; require(orders[orderId].status==0 && orders[orderId].amountIn>0,"Order is not open"); //update order status orders[orderId].status=2; orders[orderId].updatedAt=block.timestamp; //rolback the amounts uint256 pairPriceId = orders[orderId].pairPriceId; if(pairPrices[pairPriceId].tokenIn==WETH) { IWETH(WETH).withdraw(orders[orderId].amountIn); (bool success, ) = msg.sender.call{value: orders[orderId].amountIn}(""); require(success, "Failed to send ETH"); }else IERC20(pairPrices[pairPriceId].tokenIn).transfer(msg.sender, orders[orderId].amountIn); pairPrices[pairPriceId].totalAmountIn -= orders[orderId].amountIn; } function withdrawOrder(uint256 orderIndex) public{ //validate inputs require(orderIndex<=userOrderCount[msg.sender],"Order id is not valid"); uint256 orderId = userOrderIds[msg.sender][orderIndex]; require(orders[orderId].status==0 && orders[orderId].amountIn>0,"Order is not open"); //update order status orders[orderId].status=1; //withdrawed orders[orderId].updatedAt=block.timestamp; //pay the swapped amounts uint256 pairPriceId = orders[orderId].pairPriceId; require(pairPrices[pairPriceId].amountOut>0,"Order is not placed yet."); uint256 totalAmountIn = pairPrices[pairPriceId].totalAmountIn; uint256 totalAmountOut = pairPrices[pairPriceId].amountOut; uint256 myAmountIn = orders[orderId].amountIn; uint256 ratio = myAmountIn * 10**18 / totalAmountIn; uint256 myAmountOut = totalAmountOut * ratio / 10**18; if(pairPrices[pairPriceId].tokenOut==WETH) { //IWETH(WETH).withdraw(myAmountOut); //already converted to ETH in swap contract (bool success, ) = msg.sender.call{value: myAmountOut}(""); require(success, "Failed to send ETH"); }else IERC20(pairPrices[pairPriceId].tokenOut).transfer(msg.sender, myAmountOut); pairPrices[pairPriceId].totalWithdrawn += myAmountOut; } // Function to process orders in steps (batch processing) function processPairPrice(uint256 pairPriceId) external onlyOracle { //TODO: //get price and check if it is ok //?????????????????? //place swap order and get received token amount uint256 firstBalance; if(pairPrices[pairPriceId].tokenOut == WETH) firstBalance = address(this).balance; else firstBalance = IERC20(pairPrices[pairPriceId].tokenOut).balanceOf(address(this)); tokenSwap.swapToken( pairPrices[pairPriceId].tokenIn, pairPrices[pairPriceId].tokenOut, pairPrices[pairPriceId].totalAmountIn, 3000, payable(oracle) ); uint256 newBalance; if(pairPrices[pairPriceId].tokenOut == WETH) newBalance = address(this).balance; else newBalance = IERC20(pairPrices[pairPriceId].tokenOut).balanceOf(address(this)); uint256 income = newBalance - firstBalance; require(income>0,"Failed to process swap"); //disable old pairPrice and update income pairPrices[pairPriceId].amountOut = income; pairPriceIds[pairPrices[pairPriceId].tokenIn][pairPrices[pairPriceId].tokenOut][pairPrices[pairPriceId].price]=0; } // Function to get all active orders for a user with pagination struct TmpOrder { uint userOrderIndex; address user; uint256 priceIn; uint256 pairPriceId; uint256 amountIn; // tokenInAmount uint8 status; // 0=>open / 1=>withdrawed / 2=>cancelled uint256 createdAt; uint256 updatedAt; address tokenIn; address tokenOut; uint256 price; uint256 totalAmountIn; uint256 amountOut; // if 0 its open, if more it's done uint256 totalWithdrawn; } function getUserOrdersPaginated(address user,uint256 fromId, uint256 toId) external view returns (TmpOrder[] memory) { if (toId > userOrderIds[user].length) { toId = userOrderIds[user].length; } require(fromId <= toId, "Invalid pagination range"); uint256 size = toId - fromId; TmpOrder[] memory paginatedOrders = new TmpOrder[](size); for (uint256 i = 0; i < size; i++) { uint256 orderIndex = userOrderIds[user][fromId + i]; uint256 pairPriceId = orders[orderIndex].pairPriceId; TmpOrder memory _tmpOrder = TmpOrder({ userOrderIndex: fromId + i, user: orders[orderIndex].user, priceIn: orders[orderIndex].priceIn, pairPriceId: orders[orderIndex].pairPriceId, amountIn: orders[orderIndex].amountIn, // tokenInAmount status: orders[orderIndex].status, // 0=>open / 1=>withdrawed / 2=>cancelled createdAt: orders[orderIndex].createdAt, updatedAt: orders[orderIndex].updatedAt, tokenIn: pairPrices[pairPriceId].tokenIn, tokenOut: pairPrices[pairPriceId].tokenOut, price: pairPrices[pairPriceId].price, totalAmountIn: pairPrices[pairPriceId].totalAmountIn, amountOut: pairPrices[pairPriceId].amountOut, totalWithdrawn: pairPrices[pairPriceId].totalWithdrawn }); // Store the struct in the paginatedOrders array paginatedOrders[i] = _tmpOrder; } return paginatedOrders; } // Function to set a new TokenSwap contract address function setTokenSwapContract(address _tokenSwapContract) external onlyOwner { tokenSwapContract = _tokenSwapContract; tokenSwap = ITokenSwap(tokenSwapContract); WETH = tokenSwap.WETH(); } // Function to set the oracle address function setOracle(address _oracle) external onlyOwner { oracle = _oracle; } // Function to set the oracle address function setOracleFee(uint _oracleFee) external onlyOwner { oracleFee = _oracleFee; } // Helper function to round the price to a smaller step using base 2 function roundPriceBase2(uint256 price) private pure returns (uint256) { uint256 magnitude = 1 << (log2(price) - 8); // Shift to create smaller rounding steps uint256 roundedPrice = (price / magnitude) * magnitude; return roundedPrice; } // Efficient log2 implementation (based on bit-shifting) function log2(uint256 x) private pure returns (uint256) { uint256 result = 0; if (x >= 2**128) { x >>= 128; result += 128; } if (x >= 2**64) { x >>= 64; result += 64; } if (x >= 2**32) { x >>= 32; result += 32; } if (x >= 2**16) { x >>= 16; result += 16; } if (x >= 2**8) { x >>= 8; result += 8; } if (x >= 2**4) { x >>= 4; result += 4; } if (x >= 2**2) { x >>= 2; result += 2; } if (x >= 2**1) { result += 1; } return result; } function getPairPriceId(address tokenIn,address tokenOut,uint256 price) private returns(uint){ // Round the price to the nearest 0.1% price = roundPriceBase2(price); if(pairPriceIds[tokenIn][tokenOut][price]>0) return pairPriceIds[tokenIn][tokenOut][price]; PairPrice memory _pairPrice = PairPrice({ tokenIn:tokenIn, tokenOut:tokenOut, price:price, totalAmountIn:0, amountOut:0, // if 0 its open, if more it's done totalWithdrawn:0 }); lastPairId++; pairPrices[lastPairId] = _pairPrice; pairPriceIds[tokenIn][tokenOut][price] = lastPairId; return lastPairId; } // Emergency withdraw ETH function emergencyWithdrawETH(address payable to) external onlyOwner { uint256 balance = address(this).balance; require(balance > 0, "No ETH to withdraw"); to.transfer(balance); } // Emergency withdraw ERC20 tokens function emergencyWithdrawToken(address token, address to) external onlyOwner { IERC20 erc20 = IERC20(token); uint256 balance = erc20.balanceOf(address(this)); require(balance > 0, "No token balance to withdraw"); erc20.transfer(to, balance); } // Fallback function to receive ETH receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_tokenSwapContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"OrderPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"OrderTriggered","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"}],"name":"emergencyWithdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"emergencyWithdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"fromId","type":"uint256"},{"internalType":"uint256","name":"toId","type":"uint256"}],"name":"getUserOrdersPaginated","outputs":[{"components":[{"internalType":"uint256","name":"userOrderIndex","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"priceIn","type":"uint256"},{"internalType":"uint256","name":"pairPriceId","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"uint256","name":"createdAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"totalAmountIn","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"totalWithdrawn","type":"uint256"}],"internalType":"struct TokenSwapSpot.TmpOrder[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastOrderId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPairId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracleFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"orders","outputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"priceIn","type":"uint256"},{"internalType":"uint256","name":"pairPriceId","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"uint256","name":"createdAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pairPrices","outputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"totalAmountIn","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"totalWithdrawn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"priceLimit","type":"uint256"},{"internalType":"uint256","name":"priceIn","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"placeOrder","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pairPriceId","type":"uint256"}],"name":"processPairPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_oracleFee","type":"uint256"}],"name":"setOracleFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenSwapContract","type":"address"}],"name":"setTokenSwapContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenSwapContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userOrderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"}],"name":"withdrawOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405266470de4df82000060055534801561001a575f5ffd5b50604051613f53380380613f53833981810160405281019061003c919061028d565b335f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101c6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ea919061028d565b60045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506102b8565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61025c82610233565b9050919050565b61026c81610252565b8114610276575f5ffd5b50565b5f8151905061028781610263565b92915050565b5f602082840312156102a2576102a161022f565b5b5f6102af84828501610279565b91505092915050565b613c8e806102c55f395ff3fe608060405260043610610122575f3560e01c8063817422c01161009f578063af01afdf11610063578063af01afdf146103cc578063b6d9ef60146103f4578063ec4eb4f91461041c578063f9cd3ceb14610458578063fb791b0b1461048257610129565b8063817422c0146102cb5780638da5cb5b1461030c578063962fba2714610336578063a85c38ef14610360578063ad5c4648146103a257610129565b806366f48cf5116100e657806366f48cf5146101ed578063682458bd146102295780636e2bd98d146102515780637adbf973146102795780637dc0d1d0146102a157610129565b8063214ff4591461012d5780633bb7dac7146101555780633cedc5a51461017f578063514fcac71461019b5780635662ecc7146101c357610129565b3661012957005b5f5ffd5b348015610138575f5ffd5b50610153600480360381019061014e9190612d5a565b6104aa565b005b348015610160575f5ffd5b506101696105c6565b6040516101769190612da5565b60405180910390f35b61019960048036038101906101949190612e1b565b6105eb565b005b3480156101a6575f5ffd5b506101c160048036038101906101bc9190612e92565b610e25565b005b3480156101ce575f5ffd5b506101d76112cb565b6040516101e49190612ecc565b60405180910390f35b3480156101f8575f5ffd5b50610213600480360381019061020e9190612ee5565b6112d1565b6040516102209190613135565b60405180910390f35b348015610234575f5ffd5b5061024f600480360381019061024a9190613155565b6116eb565b005b34801561025c575f5ffd5b5061027760048036038101906102729190612e92565b6118bc565b005b348015610284575f5ffd5b5061029f600480360381019061029a9190613193565b611e67565b005b3480156102ac575f5ffd5b506102b5611f38565b6040516102c29190612da5565b60405180910390f35b3480156102d6575f5ffd5b506102f160048036038101906102ec9190612e92565b611f5d565b604051610303969594939291906131be565b60405180910390f35b348015610317575f5ffd5b50610320611fd3565b60405161032d9190612da5565b60405180910390f35b348015610341575f5ffd5b5061034a611ff7565b6040516103579190612ecc565b60405180910390f35b34801561036b575f5ffd5b5061038660048036038101906103819190612e92565b611ffd565b604051610399979695949392919061322c565b60405180910390f35b3480156103ad575f5ffd5b506103b6612066565b6040516103c39190612da5565b60405180910390f35b3480156103d7575f5ffd5b506103f260048036038101906103ed9190613193565b61208b565b005b3480156103ff575f5ffd5b5061041a60048036038101906104159190612e92565b61228a565b005b348015610427575f5ffd5b50610442600480360381019061043d9190613193565b612322565b60405161044f9190612ecc565b60405180910390f35b348015610463575f5ffd5b5061046c612337565b6040516104799190612ecc565b60405180910390f35b34801561048d575f5ffd5b506104a860048036038101906104a39190612e92565b61233d565b005b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052f906132f3565b60405180910390fd5b5f4790505f811161057e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105759061335b565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156105c1573d5f5f3e3d5ffd5b505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600554341015610630576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610627906133c3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036106885760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1694505b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036106e05760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1693505b6005543411801561073d575060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156108ca5760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16945060055434610774919061340e565b90505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b1580156107e1575f5ffd5b505af11580156107f3573d5f5f3e3d5ffd5b50505050505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166005546040516108409061346e565b5f6040518083038185875af1925050503d805f811461087a576040519150601f19603f3d011682016040523d82523d5f602084013e61087f565b606091505b50509050806108c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ba906134cc565b60405180910390fd5b5050610a63565b5f811161090c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090390613534565b60405180910390fd5b5f8590508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b815260040161094d93929190613552565b6020604051808303815f875af1158015610969573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098d91906135bc565b505f341115610a61575f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16346040516109dc9061346e565b5f6040518083038185875af1925050503d805f8114610a16576040519150601f19603f3d011682016040523d82523d5f602084013e610a1b565b606091505b5050905080610a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a56906134cc565b60405180910390fd5b505b505b5f610a6f8686866127f5565b905081600b5f8381526020019081526020015f206003015f828254610a9491906135e7565b925050819055505f869050828173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e3060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610afc92919061361a565b602060405180830381865afa158015610b17573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3b9190613655565b1015610bff578073ffffffffffffffffffffffffffffffffffffffff1663095ea7b360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610bbd929190613680565b6020604051808303815f875af1158015610bd9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bfd91906135bc565b505b5f6040518060e001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018481526020018581526020015f60ff1681526020014281526020015f815250905060065f815480929190610c60906136a7565b91905055508060075f60065481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff021916908360ff16021790555060a0820151816005015560c0820151816006015590505060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600654908060018154018082558091505060019003905f5260205f20015f909190919091505560095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190610dc2906136a7565b91905055503373ffffffffffffffffffffffffffffffffffffffff167f25f958e981f7f2a99eb96852a8dffe251ff392838f2c8e280d160399a90b0fe189898988604051610e1394939291906136ee565b60405180910390a25050505050505050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054811115610ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9c9061377b565b60405180910390fd5b5f60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208281548110610ef557610ef4613799565b5b905f5260205f20015490505f60075f8381526020019081526020015f206004015f9054906101000a900460ff1660ff16148015610f4557505f60075f8381526020019081526020015f2060030154115b610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b90613810565b60405180910390fd5b600260075f8381526020019081526020015f206004015f6101000a81548160ff021916908360ff1602179055504260075f8381526020019081526020015f20600601819055505f60075f8381526020019081526020015f2060020154905060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8381526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036111c55760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d60075f8581526020019081526020015f20600301546040518263ffffffff1660e01b81526004016110d69190612ecc565b5f604051808303815f87803b1580156110ed575f5ffd5b505af11580156110ff573d5f5f3e3d5ffd5b505050505f3373ffffffffffffffffffffffffffffffffffffffff1660075f8581526020019081526020015f206003015460405161113c9061346e565b5f6040518083038185875af1925050503d805f8114611176576040519150601f19603f3d011682016040523d82523d5f602084013e61117b565b606091505b50509050806111bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b690613878565b60405180910390fd5b50611288565b600b5f8281526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3360075f8681526020019081526020015f20600301546040518363ffffffff1660e01b8152600401611246929190613680565b6020604051808303815f875af1158015611262573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061128691906135bc565b505b60075f8381526020019081526020015f2060030154600b5f8381526020019081526020015f206003015f8282546112bf919061340e565b92505081905550505050565b60065481565b606060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905082111561135f5760085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905091505b818311156113a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611399906138e0565b60405180910390fd5b5f83836113af919061340e565b90505f8167ffffffffffffffff8111156113cc576113cb6138fe565b5b60405190808252806020026020018201604052801561140557816020015b6113f2612c56565b8152602001906001900390816113ea5790505b5090505f5f90505b828110156116de575f60085f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20828861145f91906135e7565b815481106114705761146f613799565b5b905f5260205f20015490505f60075f8381526020019081526020015f206002015490505f604051806101c00160405280858b6114ac91906135e7565b815260200160075f8681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160075f8681526020019081526020015f2060010154815260200160075f8681526020019081526020015f2060020154815260200160075f8681526020019081526020015f2060030154815260200160075f8681526020019081526020015f206004015f9054906101000a900460ff1660ff16815260200160075f8681526020019081526020015f2060050154815260200160075f8681526020019081526020015f20600601548152602001600b5f8581526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600b5f8581526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600b5f8581526020019081526020015f20600201548152602001600b5f8581526020019081526020015f20600301548152602001600b5f8581526020019081526020015f20600401548152602001600b5f8581526020019081526020015f20600501548152509050808585815181106116c3576116c2613799565b5b6020026020010181905250505050808060010191505061140d565b5080925050509392505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611779576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611770906132f3565b60405180910390fd5b5f8290505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117b79190612da5565b602060405180830381865afa1580156117d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117f69190613655565b90505f811161183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190613975565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611875929190613680565b6020604051808303815f875af1158015611891573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118b591906135bc565b5050505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461194b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611942906139dd565b60405180910390fd5b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8481526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036119db57479050611a89565b600b5f8381526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611a479190612da5565b602060405180830381865afa158015611a62573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a869190613655565b90505b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394ef1501600b5f8581526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b5f8681526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b5f8781526020019081526020015f2060030154610bb860015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b8152600401611b87959493929190613a5a565b5f604051808303815f87803b158015611b9e575f5ffd5b505af1158015611bb0573d5f5f3e3d5ffd5b505050505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8581526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611c4457479050611cf2565b600b5f8481526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611cb09190612da5565b602060405180830381865afa158015611ccb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cef9190613655565b90505b5f8282611cff919061340e565b90505f8111611d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3a90613af5565b60405180910390fd5b80600b5f8681526020019081526020015f20600401819055505f600c5f600b5f8881526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600b5f8881526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600b5f8881526020019081526020015f206002015481526020019081526020015f208190555050505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eec906132f3565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040154908060050154905086565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6007602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002015490806003015490806004015f9054906101000a900460ff16908060050154908060060154905087565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612119576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612110906132f3565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612224573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122489190613b27565b60045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230f906132f3565b60405180910390fd5b8060058190555050565b6009602052805f5260405f205f915090505481565b60055481565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548111156123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b49061377b565b60405180910390fd5b5f60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20828154811061240d5761240c613799565b5b905f5260205f20015490505f60075f8381526020019081526020015f206004015f9054906101000a900460ff1660ff1614801561245d57505f60075f8381526020019081526020015f2060030154115b61249c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249390613810565b60405180910390fd5b600160075f8381526020019081526020015f206004015f6101000a81548160ff021916908360ff1602179055504260075f8381526020019081526020015f20600601819055505f60075f8381526020019081526020015f206002015490505f600b5f8381526020019081526020015f206004015411612550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254790613b9c565b60405180910390fd5b5f600b5f8381526020019081526020015f206003015490505f600b5f8481526020019081526020015f206004015490505f60075f8681526020019081526020015f206003015490505f83670de0b6b3a7640000836125ae9190613bba565b6125b89190613c28565b90505f670de0b6b3a764000082856125d09190613bba565b6125da9190613c28565b905060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8881526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612711575f3373ffffffffffffffffffffffffffffffffffffffff16826040516126889061346e565b5f6040518083038185875af1925050503d805f81146126c2576040519150601f19603f3d011682016040523d82523d5f602084013e6126c7565b606091505b505090508061270b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270290613878565b60405180910390fd5b506127c1565b600b5f8781526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161277f929190613680565b6020604051808303815f875af115801561279b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127bf91906135bc565b505b80600b5f8881526020019081526020015f206005015f8282546127e491906135e7565b925050819055505050505050505050565b5f6127ff82612af7565b91505f600c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f2054111561291f57600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20549050612af0565b5f6040518060c001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020015f81526020015f81526020015f8152509050600a5f81548092919061298d906136a7565b919050555080600b5f600a5481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a08201518160050155905050600a54600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f2081905550600a549150505b9392505050565b5f5f6008612b0484612b38565b612b0e919061340e565b6001901b90505f818285612b229190613c28565b612b2c9190613bba565b90508092505050919050565b5f5f5f90507001000000000000000000000000000000008310612b6c57608083901c9250608081612b6991906135e7565b90505b680100000000000000008310612b9357604083901c9250604081612b9091906135e7565b90505b6401000000008310612bb657602083901c9250602081612bb391906135e7565b90505b620100008310612bd757601083901c9250601081612bd491906135e7565b90505b6101008310612bf757600883901c9250600881612bf491906135e7565b90505b60108310612c1657600483901c9250600481612c1391906135e7565b90505b60048310612c3557600283901c9250600281612c3291906135e7565b90505b60028310612c4d57600181612c4a91906135e7565b90505b80915050919050565b604051806101c001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f60ff1681526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81525090565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612d2982612d00565b9050919050565b612d3981612d1f565b8114612d43575f5ffd5b50565b5f81359050612d5481612d30565b92915050565b5f60208284031215612d6f57612d6e612cfc565b5b5f612d7c84828501612d46565b91505092915050565b5f612d8f82612d00565b9050919050565b612d9f81612d85565b82525050565b5f602082019050612db85f830184612d96565b92915050565b612dc781612d85565b8114612dd1575f5ffd5b50565b5f81359050612de281612dbe565b92915050565b5f819050919050565b612dfa81612de8565b8114612e04575f5ffd5b50565b5f81359050612e1581612df1565b92915050565b5f5f5f5f5f60a08688031215612e3457612e33612cfc565b5b5f612e4188828901612dd4565b9550506020612e5288828901612dd4565b9450506040612e6388828901612e07565b9350506060612e7488828901612e07565b9250506080612e8588828901612e07565b9150509295509295909350565b5f60208284031215612ea757612ea6612cfc565b5b5f612eb484828501612e07565b91505092915050565b612ec681612de8565b82525050565b5f602082019050612edf5f830184612ebd565b92915050565b5f5f5f60608486031215612efc57612efb612cfc565b5b5f612f0986828701612dd4565b9350506020612f1a86828701612e07565b9250506040612f2b86828701612e07565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612f6781612de8565b82525050565b612f7681612d85565b82525050565b5f60ff82169050919050565b612f9181612f7c565b82525050565b6101c082015f820151612fac5f850182612f5e565b506020820151612fbf6020850182612f6d565b506040820151612fd26040850182612f5e565b506060820151612fe56060850182612f5e565b506080820151612ff86080850182612f5e565b5060a082015161300b60a0850182612f88565b5060c082015161301e60c0850182612f5e565b5060e082015161303160e0850182612f5e565b50610100820151613046610100850182612f6d565b5061012082015161305b610120850182612f6d565b50610140820151613070610140850182612f5e565b50610160820151613085610160850182612f5e565b5061018082015161309a610180850182612f5e565b506101a08201516130af6101a0850182612f5e565b50505050565b5f6130c08383612f97565b6101c08301905092915050565b5f602082019050919050565b5f6130e382612f35565b6130ed8185612f3f565b93506130f883612f4f565b805f5b8381101561312857815161310f88826130b5565b975061311a836130cd565b9250506001810190506130fb565b5085935050505092915050565b5f6020820190508181035f83015261314d81846130d9565b905092915050565b5f5f6040838503121561316b5761316a612cfc565b5b5f61317885828601612dd4565b925050602061318985828601612dd4565b9150509250929050565b5f602082840312156131a8576131a7612cfc565b5b5f6131b584828501612dd4565b91505092915050565b5f60c0820190506131d15f830189612d96565b6131de6020830188612d96565b6131eb6040830187612ebd565b6131f86060830186612ebd565b6132056080830185612ebd565b61321260a0830184612ebd565b979650505050505050565b61322681612f7c565b82525050565b5f60e08201905061323f5f83018a612d96565b61324c6020830189612ebd565b6132596040830188612ebd565b6132666060830187612ebd565b613273608083018661321d565b61328060a0830185612ebd565b61328d60c0830184612ebd565b98975050505050505050565b5f82825260208201905092915050565b7f4e6f742074686520636f6e7472616374206f776e6572000000000000000000005f82015250565b5f6132dd601683613299565b91506132e8826132a9565b602082019050919050565b5f6020820190508181035f83015261330a816132d1565b9050919050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f613345601283613299565b915061335082613311565b602082019050919050565b5f6020820190508181035f83015261337281613339565b9050919050565b7f4e6f7420656e6f756768206f7261636c652066656500000000000000000000005f82015250565b5f6133ad601583613299565b91506133b882613379565b602082019050919050565b5f6020820190508181035f8301526133da816133a1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61341882612de8565b915061342383612de8565b925082820390508181111561343b5761343a6133e1565b5b92915050565b5f81905092915050565b50565b5f6134595f83613441565b91506134648261344b565b5f82019050919050565b5f6134788261344e565b9150819050919050565b7f4661696c656420746f2073656e64206f7261636c6520666565000000000000005f82015250565b5f6134b6601983613299565b91506134c182613482565b602082019050919050565b5f6020820190508181035f8301526134e3816134aa565b9050919050565b7f4d757374207370656369667920616e20616d6f756e7420746f207377617000005f82015250565b5f61351e601e83613299565b9150613529826134ea565b602082019050919050565b5f6020820190508181035f83015261354b81613512565b9050919050565b5f6060820190506135655f830186612d96565b6135726020830185612d96565b61357f6040830184612ebd565b949350505050565b5f8115159050919050565b61359b81613587565b81146135a5575f5ffd5b50565b5f815190506135b681613592565b92915050565b5f602082840312156135d1576135d0612cfc565b5b5f6135de848285016135a8565b91505092915050565b5f6135f182612de8565b91506135fc83612de8565b9250828201905080821115613614576136136133e1565b5b92915050565b5f60408201905061362d5f830185612d96565b61363a6020830184612d96565b9392505050565b5f8151905061364f81612df1565b92915050565b5f6020828403121561366a57613669612cfc565b5b5f61367784828501613641565b91505092915050565b5f6040820190506136935f830185612d96565b6136a06020830184612ebd565b9392505050565b5f6136b182612de8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136e3576136e26133e1565b5b600182019050919050565b5f6080820190506137015f830187612d96565b61370e6020830186612d96565b61371b6040830185612ebd565b6137286060830184612ebd565b95945050505050565b7f4f72646572206964206973206e6f742076616c696400000000000000000000005f82015250565b5f613765601583613299565b915061377082613731565b602082019050919050565b5f6020820190508181035f83015261379281613759565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f72646572206973206e6f74206f70656e0000000000000000000000000000005f82015250565b5f6137fa601183613299565b9150613805826137c6565b602082019050919050565b5f6020820190508181035f830152613827816137ee565b9050919050565b7f4661696c656420746f2073656e642045544800000000000000000000000000005f82015250565b5f613862601283613299565b915061386d8261382e565b602082019050919050565b5f6020820190508181035f83015261388f81613856565b9050919050565b7f496e76616c696420706167696e6174696f6e2072616e676500000000000000005f82015250565b5f6138ca601883613299565b91506138d582613896565b602082019050919050565b5f6020820190508181035f8301526138f7816138be565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e6f20746f6b656e2062616c616e636520746f207769746864726177000000005f82015250565b5f61395f601c83613299565b915061396a8261392b565b602082019050919050565b5f6020820190508181035f83015261398c81613953565b9050919050565b7f4e6f7420746865206f7261636c650000000000000000000000000000000000005f82015250565b5f6139c7600e83613299565b91506139d282613993565b602082019050919050565b5f6020820190508181035f8301526139f4816139bb565b9050919050565b5f819050919050565b5f62ffffff82169050919050565b5f819050919050565b5f613a35613a30613a2b846139fb565b613a12565b613a04565b9050919050565b613a4581613a1b565b82525050565b613a5481612d1f565b82525050565b5f60a082019050613a6d5f830188612d96565b613a7a6020830187612d96565b613a876040830186612ebd565b613a946060830185613a3c565b613aa16080830184613a4b565b9695505050505050565b7f4661696c656420746f2070726f636573732073776170000000000000000000005f82015250565b5f613adf601683613299565b9150613aea82613aab565b602082019050919050565b5f6020820190508181035f830152613b0c81613ad3565b9050919050565b5f81519050613b2181612dbe565b92915050565b5f60208284031215613b3c57613b3b612cfc565b5b5f613b4984828501613b13565b91505092915050565b7f4f72646572206973206e6f7420706c61636564207965742e00000000000000005f82015250565b5f613b86601883613299565b9150613b9182613b52565b602082019050919050565b5f6020820190508181035f830152613bb381613b7a565b9050919050565b5f613bc482612de8565b9150613bcf83612de8565b9250828202613bdd81612de8565b91508282048414831517613bf457613bf36133e1565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613c3282612de8565b9150613c3d83612de8565b925082613c4d57613c4c613bfb565b5b82820490509291505056fea264697066735822122019d86a9542a1b8dbfc62cc49b6bffee86a772e2004a7ab01efe09afa2847ff3e64736f6c634300081c003300000000000000000000000032d6b39bc53f9d85d7d64034bad9e5061b408e38
Deployed Bytecode
0x608060405260043610610122575f3560e01c8063817422c01161009f578063af01afdf11610063578063af01afdf146103cc578063b6d9ef60146103f4578063ec4eb4f91461041c578063f9cd3ceb14610458578063fb791b0b1461048257610129565b8063817422c0146102cb5780638da5cb5b1461030c578063962fba2714610336578063a85c38ef14610360578063ad5c4648146103a257610129565b806366f48cf5116100e657806366f48cf5146101ed578063682458bd146102295780636e2bd98d146102515780637adbf973146102795780637dc0d1d0146102a157610129565b8063214ff4591461012d5780633bb7dac7146101555780633cedc5a51461017f578063514fcac71461019b5780635662ecc7146101c357610129565b3661012957005b5f5ffd5b348015610138575f5ffd5b50610153600480360381019061014e9190612d5a565b6104aa565b005b348015610160575f5ffd5b506101696105c6565b6040516101769190612da5565b60405180910390f35b61019960048036038101906101949190612e1b565b6105eb565b005b3480156101a6575f5ffd5b506101c160048036038101906101bc9190612e92565b610e25565b005b3480156101ce575f5ffd5b506101d76112cb565b6040516101e49190612ecc565b60405180910390f35b3480156101f8575f5ffd5b50610213600480360381019061020e9190612ee5565b6112d1565b6040516102209190613135565b60405180910390f35b348015610234575f5ffd5b5061024f600480360381019061024a9190613155565b6116eb565b005b34801561025c575f5ffd5b5061027760048036038101906102729190612e92565b6118bc565b005b348015610284575f5ffd5b5061029f600480360381019061029a9190613193565b611e67565b005b3480156102ac575f5ffd5b506102b5611f38565b6040516102c29190612da5565b60405180910390f35b3480156102d6575f5ffd5b506102f160048036038101906102ec9190612e92565b611f5d565b604051610303969594939291906131be565b60405180910390f35b348015610317575f5ffd5b50610320611fd3565b60405161032d9190612da5565b60405180910390f35b348015610341575f5ffd5b5061034a611ff7565b6040516103579190612ecc565b60405180910390f35b34801561036b575f5ffd5b5061038660048036038101906103819190612e92565b611ffd565b604051610399979695949392919061322c565b60405180910390f35b3480156103ad575f5ffd5b506103b6612066565b6040516103c39190612da5565b60405180910390f35b3480156103d7575f5ffd5b506103f260048036038101906103ed9190613193565b61208b565b005b3480156103ff575f5ffd5b5061041a60048036038101906104159190612e92565b61228a565b005b348015610427575f5ffd5b50610442600480360381019061043d9190613193565b612322565b60405161044f9190612ecc565b60405180910390f35b348015610463575f5ffd5b5061046c612337565b6040516104799190612ecc565b60405180910390f35b34801561048d575f5ffd5b506104a860048036038101906104a39190612e92565b61233d565b005b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052f906132f3565b60405180910390fd5b5f4790505f811161057e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105759061335b565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156105c1573d5f5f3e3d5ffd5b505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600554341015610630576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610627906133c3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036106885760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1694505b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036106e05760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1693505b6005543411801561073d575060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156108ca5760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16945060055434610774919061340e565b90505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b1580156107e1575f5ffd5b505af11580156107f3573d5f5f3e3d5ffd5b50505050505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166005546040516108409061346e565b5f6040518083038185875af1925050503d805f811461087a576040519150601f19603f3d011682016040523d82523d5f602084013e61087f565b606091505b50509050806108c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ba906134cc565b60405180910390fd5b5050610a63565b5f811161090c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090390613534565b60405180910390fd5b5f8590508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b815260040161094d93929190613552565b6020604051808303815f875af1158015610969573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098d91906135bc565b505f341115610a61575f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16346040516109dc9061346e565b5f6040518083038185875af1925050503d805f8114610a16576040519150601f19603f3d011682016040523d82523d5f602084013e610a1b565b606091505b5050905080610a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a56906134cc565b60405180910390fd5b505b505b5f610a6f8686866127f5565b905081600b5f8381526020019081526020015f206003015f828254610a9491906135e7565b925050819055505f869050828173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e3060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610afc92919061361a565b602060405180830381865afa158015610b17573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3b9190613655565b1015610bff578073ffffffffffffffffffffffffffffffffffffffff1663095ea7b360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610bbd929190613680565b6020604051808303815f875af1158015610bd9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bfd91906135bc565b505b5f6040518060e001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018481526020018581526020015f60ff1681526020014281526020015f815250905060065f815480929190610c60906136a7565b91905055508060075f60065481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff021916908360ff16021790555060a0820151816005015560c0820151816006015590505060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600654908060018154018082558091505060019003905f5260205f20015f909190919091505560095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190610dc2906136a7565b91905055503373ffffffffffffffffffffffffffffffffffffffff167f25f958e981f7f2a99eb96852a8dffe251ff392838f2c8e280d160399a90b0fe189898988604051610e1394939291906136ee565b60405180910390a25050505050505050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054811115610ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9c9061377b565b60405180910390fd5b5f60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208281548110610ef557610ef4613799565b5b905f5260205f20015490505f60075f8381526020019081526020015f206004015f9054906101000a900460ff1660ff16148015610f4557505f60075f8381526020019081526020015f2060030154115b610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b90613810565b60405180910390fd5b600260075f8381526020019081526020015f206004015f6101000a81548160ff021916908360ff1602179055504260075f8381526020019081526020015f20600601819055505f60075f8381526020019081526020015f2060020154905060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8381526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036111c55760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d60075f8581526020019081526020015f20600301546040518263ffffffff1660e01b81526004016110d69190612ecc565b5f604051808303815f87803b1580156110ed575f5ffd5b505af11580156110ff573d5f5f3e3d5ffd5b505050505f3373ffffffffffffffffffffffffffffffffffffffff1660075f8581526020019081526020015f206003015460405161113c9061346e565b5f6040518083038185875af1925050503d805f8114611176576040519150601f19603f3d011682016040523d82523d5f602084013e61117b565b606091505b50509050806111bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b690613878565b60405180910390fd5b50611288565b600b5f8281526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3360075f8681526020019081526020015f20600301546040518363ffffffff1660e01b8152600401611246929190613680565b6020604051808303815f875af1158015611262573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061128691906135bc565b505b60075f8381526020019081526020015f2060030154600b5f8381526020019081526020015f206003015f8282546112bf919061340e565b92505081905550505050565b60065481565b606060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905082111561135f5760085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905091505b818311156113a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611399906138e0565b60405180910390fd5b5f83836113af919061340e565b90505f8167ffffffffffffffff8111156113cc576113cb6138fe565b5b60405190808252806020026020018201604052801561140557816020015b6113f2612c56565b8152602001906001900390816113ea5790505b5090505f5f90505b828110156116de575f60085f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20828861145f91906135e7565b815481106114705761146f613799565b5b905f5260205f20015490505f60075f8381526020019081526020015f206002015490505f604051806101c00160405280858b6114ac91906135e7565b815260200160075f8681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160075f8681526020019081526020015f2060010154815260200160075f8681526020019081526020015f2060020154815260200160075f8681526020019081526020015f2060030154815260200160075f8681526020019081526020015f206004015f9054906101000a900460ff1660ff16815260200160075f8681526020019081526020015f2060050154815260200160075f8681526020019081526020015f20600601548152602001600b5f8581526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600b5f8581526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600b5f8581526020019081526020015f20600201548152602001600b5f8581526020019081526020015f20600301548152602001600b5f8581526020019081526020015f20600401548152602001600b5f8581526020019081526020015f20600501548152509050808585815181106116c3576116c2613799565b5b6020026020010181905250505050808060010191505061140d565b5080925050509392505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611779576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611770906132f3565b60405180910390fd5b5f8290505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117b79190612da5565b602060405180830381865afa1580156117d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117f69190613655565b90505f811161183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190613975565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611875929190613680565b6020604051808303815f875af1158015611891573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118b591906135bc565b5050505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461194b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611942906139dd565b60405180910390fd5b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8481526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036119db57479050611a89565b600b5f8381526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611a479190612da5565b602060405180830381865afa158015611a62573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a869190613655565b90505b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394ef1501600b5f8581526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b5f8681526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b5f8781526020019081526020015f2060030154610bb860015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b8152600401611b87959493929190613a5a565b5f604051808303815f87803b158015611b9e575f5ffd5b505af1158015611bb0573d5f5f3e3d5ffd5b505050505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8581526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611c4457479050611cf2565b600b5f8481526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611cb09190612da5565b602060405180830381865afa158015611ccb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cef9190613655565b90505b5f8282611cff919061340e565b90505f8111611d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3a90613af5565b60405180910390fd5b80600b5f8681526020019081526020015f20600401819055505f600c5f600b5f8881526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600b5f8881526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600b5f8881526020019081526020015f206002015481526020019081526020015f208190555050505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eec906132f3565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040154908060050154905086565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6007602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002015490806003015490806004015f9054906101000a900460ff16908060050154908060060154905087565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612119576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612110906132f3565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612224573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122489190613b27565b60045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230f906132f3565b60405180910390fd5b8060058190555050565b6009602052805f5260405f205f915090505481565b60055481565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548111156123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b49061377b565b60405180910390fd5b5f60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20828154811061240d5761240c613799565b5b905f5260205f20015490505f60075f8381526020019081526020015f206004015f9054906101000a900460ff1660ff1614801561245d57505f60075f8381526020019081526020015f2060030154115b61249c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249390613810565b60405180910390fd5b600160075f8381526020019081526020015f206004015f6101000a81548160ff021916908360ff1602179055504260075f8381526020019081526020015f20600601819055505f60075f8381526020019081526020015f206002015490505f600b5f8381526020019081526020015f206004015411612550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254790613b9c565b60405180910390fd5b5f600b5f8381526020019081526020015f206003015490505f600b5f8481526020019081526020015f206004015490505f60075f8681526020019081526020015f206003015490505f83670de0b6b3a7640000836125ae9190613bba565b6125b89190613c28565b90505f670de0b6b3a764000082856125d09190613bba565b6125da9190613c28565b905060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f8881526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612711575f3373ffffffffffffffffffffffffffffffffffffffff16826040516126889061346e565b5f6040518083038185875af1925050503d805f81146126c2576040519150601f19603f3d011682016040523d82523d5f602084013e6126c7565b606091505b505090508061270b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270290613878565b60405180910390fd5b506127c1565b600b5f8781526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161277f929190613680565b6020604051808303815f875af115801561279b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127bf91906135bc565b505b80600b5f8881526020019081526020015f206005015f8282546127e491906135e7565b925050819055505050505050505050565b5f6127ff82612af7565b91505f600c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f2054111561291f57600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20549050612af0565b5f6040518060c001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020015f81526020015f81526020015f8152509050600a5f81548092919061298d906136a7565b919050555080600b5f600a5481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a08201518160050155905050600a54600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f2081905550600a549150505b9392505050565b5f5f6008612b0484612b38565b612b0e919061340e565b6001901b90505f818285612b229190613c28565b612b2c9190613bba565b90508092505050919050565b5f5f5f90507001000000000000000000000000000000008310612b6c57608083901c9250608081612b6991906135e7565b90505b680100000000000000008310612b9357604083901c9250604081612b9091906135e7565b90505b6401000000008310612bb657602083901c9250602081612bb391906135e7565b90505b620100008310612bd757601083901c9250601081612bd491906135e7565b90505b6101008310612bf757600883901c9250600881612bf491906135e7565b90505b60108310612c1657600483901c9250600481612c1391906135e7565b90505b60048310612c3557600283901c9250600281612c3291906135e7565b90505b60028310612c4d57600181612c4a91906135e7565b90505b80915050919050565b604051806101c001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f60ff1681526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81525090565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612d2982612d00565b9050919050565b612d3981612d1f565b8114612d43575f5ffd5b50565b5f81359050612d5481612d30565b92915050565b5f60208284031215612d6f57612d6e612cfc565b5b5f612d7c84828501612d46565b91505092915050565b5f612d8f82612d00565b9050919050565b612d9f81612d85565b82525050565b5f602082019050612db85f830184612d96565b92915050565b612dc781612d85565b8114612dd1575f5ffd5b50565b5f81359050612de281612dbe565b92915050565b5f819050919050565b612dfa81612de8565b8114612e04575f5ffd5b50565b5f81359050612e1581612df1565b92915050565b5f5f5f5f5f60a08688031215612e3457612e33612cfc565b5b5f612e4188828901612dd4565b9550506020612e5288828901612dd4565b9450506040612e6388828901612e07565b9350506060612e7488828901612e07565b9250506080612e8588828901612e07565b9150509295509295909350565b5f60208284031215612ea757612ea6612cfc565b5b5f612eb484828501612e07565b91505092915050565b612ec681612de8565b82525050565b5f602082019050612edf5f830184612ebd565b92915050565b5f5f5f60608486031215612efc57612efb612cfc565b5b5f612f0986828701612dd4565b9350506020612f1a86828701612e07565b9250506040612f2b86828701612e07565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612f6781612de8565b82525050565b612f7681612d85565b82525050565b5f60ff82169050919050565b612f9181612f7c565b82525050565b6101c082015f820151612fac5f850182612f5e565b506020820151612fbf6020850182612f6d565b506040820151612fd26040850182612f5e565b506060820151612fe56060850182612f5e565b506080820151612ff86080850182612f5e565b5060a082015161300b60a0850182612f88565b5060c082015161301e60c0850182612f5e565b5060e082015161303160e0850182612f5e565b50610100820151613046610100850182612f6d565b5061012082015161305b610120850182612f6d565b50610140820151613070610140850182612f5e565b50610160820151613085610160850182612f5e565b5061018082015161309a610180850182612f5e565b506101a08201516130af6101a0850182612f5e565b50505050565b5f6130c08383612f97565b6101c08301905092915050565b5f602082019050919050565b5f6130e382612f35565b6130ed8185612f3f565b93506130f883612f4f565b805f5b8381101561312857815161310f88826130b5565b975061311a836130cd565b9250506001810190506130fb565b5085935050505092915050565b5f6020820190508181035f83015261314d81846130d9565b905092915050565b5f5f6040838503121561316b5761316a612cfc565b5b5f61317885828601612dd4565b925050602061318985828601612dd4565b9150509250929050565b5f602082840312156131a8576131a7612cfc565b5b5f6131b584828501612dd4565b91505092915050565b5f60c0820190506131d15f830189612d96565b6131de6020830188612d96565b6131eb6040830187612ebd565b6131f86060830186612ebd565b6132056080830185612ebd565b61321260a0830184612ebd565b979650505050505050565b61322681612f7c565b82525050565b5f60e08201905061323f5f83018a612d96565b61324c6020830189612ebd565b6132596040830188612ebd565b6132666060830187612ebd565b613273608083018661321d565b61328060a0830185612ebd565b61328d60c0830184612ebd565b98975050505050505050565b5f82825260208201905092915050565b7f4e6f742074686520636f6e7472616374206f776e6572000000000000000000005f82015250565b5f6132dd601683613299565b91506132e8826132a9565b602082019050919050565b5f6020820190508181035f83015261330a816132d1565b9050919050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f613345601283613299565b915061335082613311565b602082019050919050565b5f6020820190508181035f83015261337281613339565b9050919050565b7f4e6f7420656e6f756768206f7261636c652066656500000000000000000000005f82015250565b5f6133ad601583613299565b91506133b882613379565b602082019050919050565b5f6020820190508181035f8301526133da816133a1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61341882612de8565b915061342383612de8565b925082820390508181111561343b5761343a6133e1565b5b92915050565b5f81905092915050565b50565b5f6134595f83613441565b91506134648261344b565b5f82019050919050565b5f6134788261344e565b9150819050919050565b7f4661696c656420746f2073656e64206f7261636c6520666565000000000000005f82015250565b5f6134b6601983613299565b91506134c182613482565b602082019050919050565b5f6020820190508181035f8301526134e3816134aa565b9050919050565b7f4d757374207370656369667920616e20616d6f756e7420746f207377617000005f82015250565b5f61351e601e83613299565b9150613529826134ea565b602082019050919050565b5f6020820190508181035f83015261354b81613512565b9050919050565b5f6060820190506135655f830186612d96565b6135726020830185612d96565b61357f6040830184612ebd565b949350505050565b5f8115159050919050565b61359b81613587565b81146135a5575f5ffd5b50565b5f815190506135b681613592565b92915050565b5f602082840312156135d1576135d0612cfc565b5b5f6135de848285016135a8565b91505092915050565b5f6135f182612de8565b91506135fc83612de8565b9250828201905080821115613614576136136133e1565b5b92915050565b5f60408201905061362d5f830185612d96565b61363a6020830184612d96565b9392505050565b5f8151905061364f81612df1565b92915050565b5f6020828403121561366a57613669612cfc565b5b5f61367784828501613641565b91505092915050565b5f6040820190506136935f830185612d96565b6136a06020830184612ebd565b9392505050565b5f6136b182612de8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136e3576136e26133e1565b5b600182019050919050565b5f6080820190506137015f830187612d96565b61370e6020830186612d96565b61371b6040830185612ebd565b6137286060830184612ebd565b95945050505050565b7f4f72646572206964206973206e6f742076616c696400000000000000000000005f82015250565b5f613765601583613299565b915061377082613731565b602082019050919050565b5f6020820190508181035f83015261379281613759565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f72646572206973206e6f74206f70656e0000000000000000000000000000005f82015250565b5f6137fa601183613299565b9150613805826137c6565b602082019050919050565b5f6020820190508181035f830152613827816137ee565b9050919050565b7f4661696c656420746f2073656e642045544800000000000000000000000000005f82015250565b5f613862601283613299565b915061386d8261382e565b602082019050919050565b5f6020820190508181035f83015261388f81613856565b9050919050565b7f496e76616c696420706167696e6174696f6e2072616e676500000000000000005f82015250565b5f6138ca601883613299565b91506138d582613896565b602082019050919050565b5f6020820190508181035f8301526138f7816138be565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e6f20746f6b656e2062616c616e636520746f207769746864726177000000005f82015250565b5f61395f601c83613299565b915061396a8261392b565b602082019050919050565b5f6020820190508181035f83015261398c81613953565b9050919050565b7f4e6f7420746865206f7261636c650000000000000000000000000000000000005f82015250565b5f6139c7600e83613299565b91506139d282613993565b602082019050919050565b5f6020820190508181035f8301526139f4816139bb565b9050919050565b5f819050919050565b5f62ffffff82169050919050565b5f819050919050565b5f613a35613a30613a2b846139fb565b613a12565b613a04565b9050919050565b613a4581613a1b565b82525050565b613a5481612d1f565b82525050565b5f60a082019050613a6d5f830188612d96565b613a7a6020830187612d96565b613a876040830186612ebd565b613a946060830185613a3c565b613aa16080830184613a4b565b9695505050505050565b7f4661696c656420746f2070726f636573732073776170000000000000000000005f82015250565b5f613adf601683613299565b9150613aea82613aab565b602082019050919050565b5f6020820190508181035f830152613b0c81613ad3565b9050919050565b5f81519050613b2181612dbe565b92915050565b5f60208284031215613b3c57613b3b612cfc565b5b5f613b4984828501613b13565b91505092915050565b7f4f72646572206973206e6f7420706c61636564207965742e00000000000000005f82015250565b5f613b86601883613299565b9150613b9182613b52565b602082019050919050565b5f6020820190508181035f830152613bb381613b7a565b9050919050565b5f613bc482612de8565b9150613bcf83612de8565b9250828202613bdd81612de8565b91508282048414831517613bf457613bf36133e1565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613c3282612de8565b9150613c3d83612de8565b925082613c4d57613c4c613bfb565b5b82820490509291505056fea264697066735822122019d86a9542a1b8dbfc62cc49b6bffee86a772e2004a7ab01efe09afa2847ff3e64736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000032d6b39bc53f9d85d7d64034bad9e5061b408e38
-----Decoded View---------------
Arg [0] : _tokenSwapContract (address): 0x32d6B39bc53F9D85d7d64034bAD9e5061b408e38
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000032d6b39bc53f9d85d7d64034bad9e5061b408e38
Deployed Bytecode Sourcemap
994:13675:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14044:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1230:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3360:2187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5591:1017;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2146:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10000:1696;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14303:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8120:1293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12038:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1135:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2595:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;1054:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2563:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2179:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;1296:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11767:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12179:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2272:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1324:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6616:1433;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14044:211;2849:5;;;;;;;;;;;2835:19;;:10;:19;;;2827:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;14124:15:::1;14142:21;14124:39;;14192:1;14182:7;:11;14174:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;14227:2;:11;;:20;14239:7;14227:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14113:142;14044:211:::0;:::o;1230:32::-;;;;;;;;;;;;;:::o;3360:2187::-;3519:9;;3506;:22;;3498:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;3594:1;3577:19;;:7;:19;;;3574:36;;3606:4;;;;;;;;;;;3598:12;;3574:36;3642:1;3624:20;;:8;:20;;;3621:38;;3655:4;;;;;;;;;;;3646:13;;3621:38;3688:9;;3676;:21;:47;;;;;3718:4;;;;;;;;;;;3701:22;;:7;:22;;;3676:47;3672:892;;;3750:4;;;;;;;;;;;3740:14;;3792:9;;3780;:21;;;;:::i;:::-;3769:32;;3816:18;3843:4;;;;;;;;;;;3816:32;;3863:12;:20;;;3891:8;3863:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3973:9;3988:6;;;;;;;;;;;:11;;4007:9;;3988:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3972:49;;;4044:4;4036:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;3725:365;;3672:892;;;4128:1;4117:8;:12;4109:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;4223:12;4245:7;4223:30;;4268:5;:18;;;4287:10;4307:4;4314:8;4268:55;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4406:1;4396:9;:11;4393:160;;;4428:9;4443:6;;;;;;;;;;;:11;;4462:9;4443:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4427:49;;;4503:4;4495:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;4408:145;4393:160;4094:470;3672:892;4584:19;4606:43;4621:7;4629:8;4638:10;4606:14;:43::i;:::-;4584:65;;4701:8;4660:10;:23;4671:11;4660:23;;;;;;;;;;;:37;;;:49;;;;;;;:::i;:::-;;;;;;;;4749:12;4771:7;4749:30;;4843:8;4793:5;:15;;;4817:4;4824:17;;;;;;;;;;;4793:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;4790:126;;;4866:5;:13;;;4880:17;;;;;;;;;;;4898;4866:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4790:126;5023:21;5047:251;;;;;;;;5074:10;5047:251;;;;;;5108:7;5047:251;;;;5142:11;5047:251;;;;5178:8;5047:251;;;;5208:1;5047:251;;;;;;5244:15;5047:251;;;;5285:1;5047:251;;;5023:275;;5311:11;;:13;;;;;;;;;:::i;:::-;;;;;;5357:8;5335:6;:19;5342:11;;5335:19;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5376:12;:24;5389:10;5376:24;;;;;;;;;;;;;;;5406:11;;5376:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5429:14;:26;5444:10;5429:26;;;;;;;;;;;;;;;;:28;;;;;;;;;:::i;:::-;;;;;;5487:10;5475:64;;;5499:7;5508:8;5518:10;5530:8;5475:64;;;;;;;;;:::i;:::-;;;;;;;;3487:2060;;;3360:2187;;;;;:::o;5591:1017::-;5699:14;:26;5714:10;5699:26;;;;;;;;;;;;;;;;5687:10;:38;;5679:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5761:15;5779:12;:24;5792:10;5779:24;;;;;;;;;;;;;;;5804:10;5779:36;;;;;;;;:::i;:::-;;;;;;;;;;5761:54;;5858:1;5834:6;:15;5841:7;5834:15;;;;;;;;;;;:22;;;;;;;;;;;;:25;;;:55;;;;;5888:1;5863:6;:15;5870:7;5863:15;;;;;;;;;;;:24;;;:26;5834:55;5826:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;5977:1;5954:6;:15;5961:7;5954:15;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;6015:15;5989:6;:15;5996:7;5989:15;;;;;;;;;;;:25;;:41;;;;6083:19;6105:6;:15;6112:7;6105:15;;;;;;;;;;;:27;;;6083:49;;6179:4;;;;;;;;;;;6146:37;;:10;:23;6157:11;6146:23;;;;;;;;;;;:31;;;;;;;;;;;;:37;;;6143:367;;6215:4;;;;;;;;;;;6209:20;;;6230:6;:15;6237:7;6230:15;;;;;;;;;;;:24;;;6209:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6271:12;6289:10;:15;;6312:6;:15;6319:7;6312:15;;;;;;;;;;;:24;;;6289:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6270:71;;;6364:7;6356:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;6194:212;6143:367;;;6431:10;:23;6442:11;6431:23;;;;;;;;;;;:31;;;;;;;;;;;;6424:48;;;6473:10;6485:6;:15;6492:7;6485:15;;;;;;;;;;;:24;;;6424:86;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6143:367;6576:6;:15;6583:7;6576:15;;;;;;;;;;;:24;;;6535:10;:23;6546:11;6535:23;;;;;;;;;;;:37;;;:65;;;;;;;:::i;:::-;;;;;;;;5641:967;;5591:1017;:::o;2146:26::-;;;;:::o;10000:1696::-;10098:17;10145:12;:18;10158:4;10145:18;;;;;;;;;;;;;;;:25;;;;10138:4;:32;10134:97;;;10194:12;:18;10207:4;10194:18;;;;;;;;;;;;;;;:25;;;;10187:32;;10134:97;10259:4;10249:6;:14;;10241:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;10305:12;10327:6;10320:4;:13;;;;:::i;:::-;10305:28;;10344:33;10395:4;10380:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;10344:56;;10426:9;10438:1;10426:13;;10421:1233;10445:4;10441:1;:8;10421:1233;;;10471:18;10492:12;:18;10505:4;10492:18;;;;;;;;;;;;;;;10520:1;10511:6;:10;;;;:::i;:::-;10492:30;;;;;;;;:::i;:::-;;;;;;;;;;10471:51;;10537:19;10559:6;:18;10566:10;10559:18;;;;;;;;;;;:30;;;10537:52;;10606:25;10634:899;;;;;;;;10687:1;10678:6;:10;;;;:::i;:::-;10634:899;;;;10713:6;:18;10720:10;10713:18;;;;;;;;;;;:23;;;;;;;;;;;;10634:899;;;;;;10764:6;:18;10771:10;10764:18;;;;;;;;;;;:26;;;10634:899;;;;10822:6;:18;10829:10;10822:18;;;;;;;;;;;:30;;;10634:899;;;;10881:6;:18;10888:10;10881:18;;;;;;;;;;;:27;;;10634:899;;;;10952:6;:18;10959:10;10952:18;;;;;;;;;;;:25;;;;;;;;;;;;10634:899;;;;;;11049:6;:18;11056:10;11049:18;;;;;;;;;;;:28;;;10634:899;;;;11107:6;:18;11114:10;11107:18;;;;;;;;;;;:28;;;10634:899;;;;11163:10;:23;11174:11;11163:23;;;;;;;;;;;:31;;;;;;;;;;;;10634:899;;;;;;11223:10;:23;11234:11;11223:23;;;;;;;;;;;:32;;;;;;;;;;;;10634:899;;;;;;11281:10;:23;11292:11;11281:23;;;;;;;;;;;:29;;;10634:899;;;;11344:10;:23;11355:11;11344:23;;;;;;;;;;;:37;;;10634:899;;;;11411:10;:23;11422:11;11411:23;;;;;;;;;;;:33;;;10634:899;;;;11479:10;:23;11490:11;11479:23;;;;;;;;;;;:38;;;10634:899;;;10606:927;;11633:9;11612:15;11628:1;11612:18;;;;;;;;:::i;:::-;;;;;;;:30;;;;10456:1198;;;10451:3;;;;;;;10421:1233;;;;11673:15;11666:22;;;;10000:1696;;;;;:::o;14303:285::-;2849:5;;;;;;;;;;;2835:19;;:10;:19;;;2827:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;14392:12:::1;14414:5;14392:28;;14431:15;14449:5;:15;;;14473:4;14449:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14431:48;;14508:1;14498:7;:11;14490:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;14553:5;:14;;;14568:2;14572:7;14553:27;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14381:207;;14303:285:::0;;:::o;8120:1293::-;3017:6;;;;;;;;;;;3003:20;;:10;:20;;;2995:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;8358:20:::1;8428:4;;;;;;;;;;;8392:40;;:10;:23;8403:11;8392:23;;;;;;;;;;;:32;;;;;;;;;;;;:40;;::::0;8389:203:::1;;8462:21;8447:36;;8389:203;;;8534:10;:23;8545:11;8534:23;;;;;;;;;;;:32;;;;;;;;;;;;8527:50;;;8586:4;8527:65;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8512:80;;8389:203;8605:9;;;;;;;;;;;:19;;;8639:10;:23;8650:11;8639:23;;;;;;;;;;;:31;;;;;;;;;;;;8685:10;:23;8696:11;8685:23;;;;;;;;;;;:32;;;;;;;;;;;;8732:10;:23;8743:11;8732:23;;;;;;;;;;;:37;;;8784:4;8811:6;;;;;;;;;;;8605:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8842:18;8910:4;;;;;;;;;;;8874:40;;:10;:23;8885:11;8874:23;;;;;;;;;;;:32;;;;;;;;;;;;:40;;::::0;8871:199:::1;;8942:21;8929:34;;8871:199;;;9012:10;:23;9023:11;9012:23;;;;;;;;;;;:32;;;;;;;;;;;;9005:50;;;9064:4;9005:65;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8992:78;;8871:199;9081:14;9111:12;9098:10;:25;;;;:::i;:::-;9081:42;;9149:1;9142:6;:8;9134:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;9276:6;9240:10;:23;9251:11;9240:23;;;;;;;;;;;:33;;:42;;;;9404:1;9293:12;:45;9306:10;:23;9317:11;9306:23;;;;;;;;;;;:31;;;;;;;;;;;;9293:45;;;;;;;;;;;;;;;:79;9339:10;:23;9350:11;9339:23;;;;;;;;;;;:32;;;;;;;;;;;;9293:79;;;;;;;;;;;;;;;:110;9373:10;:23;9384:11;9373:23;;;;;;;;;;;:29;;;9293:110;;;;;;;;;;;:112;;;;8187:1226;;;8120:1293:::0;:::o;12038:90::-;2849:5;;;;;;;;;;;2835:19;;:10;:19;;;2827:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;12113:7:::1;12104:6;;:16;;;;;;;;;;;;;;;;;;12038:90:::0;:::o;1135:21::-;;;;;;;;;;;;;:::o;2595:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1054:20::-;;;;;;;;;;;;;:::o;2563:25::-;;;;:::o;2179:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1296:19::-;;;;;;;;;;;;;:::o;11767:220::-;2849:5;;;;;;;;;;;2835:19;;:10;:19;;;2827:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;11875:18:::1;11855:17;;:38;;;;;;;;;;;;;;;;;;11927:17;;;;;;;;;;;11904:9;;:41;;;;;;;;;;;;;;;;;;11963:9;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11956:4;;:23;;;;;;;;;;;;;;;;;;11767:220:::0;:::o;12179:99::-;2849:5;;;;;;;;;;;2835:19;;:10;:19;;;2827:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;12260:10:::1;12248:9;:22;;;;12179:99:::0;:::o;2272:46::-;;;;;;;;;;;;;;;;;:::o;1324:34::-;;;;:::o;6616:1433::-;6733:14;:26;6748:10;6733:26;;;;;;;;;;;;;;;;6721:10;:38;;6713:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6795:15;6813:12;:24;6826:10;6813:24;;;;;;;;;;;;;;;6838:10;6813:36;;;;;;;;:::i;:::-;;;;;;;;;;6795:54;;6892:1;6868:6;:15;6875:7;6868:15;;;;;;;;;;;:22;;;;;;;;;;;;:25;;;:55;;;;;6922:1;6897:6;:15;6904:7;6897:15;;;;;;;;;;;:24;;;:26;6868:55;6860:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;7011:1;6988:6;:15;6995:7;6988:15;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;7062:15;7036:6;:15;7043:7;7036:15;;;;;;;;;;;:25;;:41;;;;7134:19;7156:6;:15;7163:7;7156:15;;;;;;;;;;;:27;;;7134:49;;7236:1;7202:10;:23;7213:11;7202:23;;;;;;;;;;;:33;;;:35;7194:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7276:21;7300:10;:23;7311:11;7300:23;;;;;;;;;;;:37;;;7276:61;;7348:22;7373:10;:23;7384:11;7373:23;;;;;;;;;;;:33;;;7348:58;;7417:18;7438:6;:15;7445:7;7438:15;;;;;;;;;;;:24;;;7417:45;;7473:13;7511;7502:6;7489:10;:19;;;;:::i;:::-;:35;;;;:::i;:::-;7473:51;;7535:19;7582:6;7574:5;7557:14;:22;;;;:::i;:::-;:31;;;;:::i;:::-;7535:53;;7638:4;;;;;;;;;;;7604:38;;:10;:23;7615:11;7604:23;;;;;;;;;;;:32;;;;;;;;;;;;:38;;;7601:376;;7763:12;7781:10;:15;;7804:11;7781:39;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7762:58;;;7843:7;7835:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;7653:232;7601:376;;;7910:10;:23;7921:11;7910:23;;;;;;;;;;;:32;;;;;;;;;;;;7903:49;;;7953:10;7965:11;7903:74;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7601:376;8030:11;7988:10;:23;7999:11;7988:23;;;;;;;;;;;:38;;;:53;;;;;;;:::i;:::-;;;;;;;;6665:1384;;;;;;;6616:1433;:::o;13248:757::-;13336:4;13408:22;13424:5;13408:15;:22::i;:::-;13400:30;;13493:1;13454:12;:21;13467:7;13454:21;;;;;;;;;;;;;;;:31;13476:8;13454:31;;;;;;;;;;;;;;;:38;13486:5;13454:38;;;;;;;;;;;;:40;13451:103;;;13516:12;:21;13529:7;13516:21;;;;;;;;;;;;;;;:31;13538:8;13516:31;;;;;;;;;;;;;;;:38;13548:5;13516:38;;;;;;;;;;;;13509:45;;;;13451:103;13575:27;13605:233;;;;;;;;13638:7;13605:233;;;;;;13669:8;13605:233;;;;;;13698:5;13605:233;;;;13732:1;13605:233;;;;13758:1;13605:233;;;;13825:1;13605:233;;;13575:263;;13849:10;;:12;;;;;;;;;:::i;:::-;;;;;;13897:10;13872;:22;13883:10;;13872:22;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13959:10;;13918:12;:21;13931:7;13918:21;;;;;;;;;;;;;;;:31;13940:8;13918:31;;;;;;;;;;;;;;;:38;13950:5;13918:38;;;;;;;;;;;:51;;;;13987:10;;13980:17;;;13248:757;;;;;;:::o;12360:269::-;12422:7;12442:17;12482:1;12468:11;12473:5;12468:4;:11::i;:::-;:15;;;;:::i;:::-;12462:1;:22;;12442:42;;12537:20;12582:9;12569;12561:5;:17;;;;:::i;:::-;12560:31;;;;:::i;:::-;12537:54;;12609:12;12602:19;;;;12360:269;;;:::o;12699:537::-;12746:7;12766:14;12783:1;12766:18;;12804:6;12799:1;:11;12795:46;;12820:3;12814:9;;;;;12835:3;12825:13;;;;;:::i;:::-;;;12795:46;12860:5;12855:1;:10;12851:44;;12876:2;12870:8;;;;;12890:2;12880:12;;;;;:::i;:::-;;;12851:44;12914:5;12909:1;:10;12905:44;;12930:2;12924:8;;;;;12944:2;12934:12;;;;;:::i;:::-;;;12905:44;12968:5;12963:1;:10;12959:44;;12984:2;12978:8;;;;;12998:2;12988:12;;;;;:::i;:::-;;;12959:44;13022:4;13017:1;:9;13013:43;;13038:1;13032:7;;;;;13052:1;13042:11;;;;;:::i;:::-;;;13013:43;13075:4;13070:1;:9;13066:43;;13091:1;13085:7;;;;;13105:1;13095:11;;;;;:::i;:::-;;;13066:43;13128:4;13123:1;:9;13119:43;;13144:1;13138:7;;;;;13158:1;13148:11;;;;;:::i;:::-;;;13119:43;13181:4;13176:1;:9;13172:33;;13201:1;13191:11;;;;;:::i;:::-;;;13172:33;13222:6;13215:13;;;12699:537;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:104::-;511:7;540:24;558:5;540:24;:::i;:::-;529:35;;466:104;;;:::o;576:138::-;657:32;683:5;657:32;:::i;:::-;650:5;647:43;637:71;;704:1;701;694:12;637:71;576:138;:::o;720:155::-;774:5;812:6;799:20;790:29;;828:41;863:5;828:41;:::i;:::-;720:155;;;;:::o;881:345::-;948:6;997:2;985:9;976:7;972:23;968:32;965:119;;;1003:79;;:::i;:::-;965:119;1123:1;1148:61;1201:7;1192:6;1181:9;1177:22;1148:61;:::i;:::-;1138:71;;1094:125;881:345;;;;:::o;1232:96::-;1269:7;1298:24;1316:5;1298:24;:::i;:::-;1287:35;;1232:96;;;:::o;1334:118::-;1421:24;1439:5;1421:24;:::i;:::-;1416:3;1409:37;1334:118;;:::o;1458:222::-;1551:4;1589:2;1578:9;1574:18;1566:26;;1602:71;1670:1;1659:9;1655:17;1646:6;1602:71;:::i;:::-;1458:222;;;;:::o;1686:122::-;1759:24;1777:5;1759:24;:::i;:::-;1752:5;1749:35;1739:63;;1798:1;1795;1788:12;1739:63;1686:122;:::o;1814:139::-;1860:5;1898:6;1885:20;1876:29;;1914:33;1941:5;1914:33;:::i;:::-;1814:139;;;;:::o;1959:77::-;1996:7;2025:5;2014:16;;1959:77;;;:::o;2042:122::-;2115:24;2133:5;2115:24;:::i;:::-;2108:5;2105:35;2095:63;;2154:1;2151;2144:12;2095:63;2042:122;:::o;2170:139::-;2216:5;2254:6;2241:20;2232:29;;2270:33;2297:5;2270:33;:::i;:::-;2170:139;;;;:::o;2315:911::-;2410:6;2418;2426;2434;2442;2491:3;2479:9;2470:7;2466:23;2462:33;2459:120;;;2498:79;;:::i;:::-;2459:120;2618:1;2643:53;2688:7;2679:6;2668:9;2664:22;2643:53;:::i;:::-;2633:63;;2589:117;2745:2;2771:53;2816:7;2807:6;2796:9;2792:22;2771:53;:::i;:::-;2761:63;;2716:118;2873:2;2899:53;2944:7;2935:6;2924:9;2920:22;2899:53;:::i;:::-;2889:63;;2844:118;3001:2;3027:53;3072:7;3063:6;3052:9;3048:22;3027:53;:::i;:::-;3017:63;;2972:118;3129:3;3156:53;3201:7;3192:6;3181:9;3177:22;3156:53;:::i;:::-;3146:63;;3100:119;2315:911;;;;;;;;:::o;3232:329::-;3291:6;3340:2;3328:9;3319:7;3315:23;3311:32;3308:119;;;3346:79;;:::i;:::-;3308:119;3466:1;3491:53;3536:7;3527:6;3516:9;3512:22;3491:53;:::i;:::-;3481:63;;3437:117;3232:329;;;;:::o;3567:118::-;3654:24;3672:5;3654:24;:::i;:::-;3649:3;3642:37;3567:118;;:::o;3691:222::-;3784:4;3822:2;3811:9;3807:18;3799:26;;3835:71;3903:1;3892:9;3888:17;3879:6;3835:71;:::i;:::-;3691:222;;;;:::o;3919:619::-;3996:6;4004;4012;4061:2;4049:9;4040:7;4036:23;4032:32;4029:119;;;4067:79;;:::i;:::-;4029:119;4187:1;4212:53;4257:7;4248:6;4237:9;4233:22;4212:53;:::i;:::-;4202:63;;4158:117;4314:2;4340:53;4385:7;4376:6;4365:9;4361:22;4340:53;:::i;:::-;4330:63;;4285:118;4442:2;4468:53;4513:7;4504:6;4493:9;4489:22;4468:53;:::i;:::-;4458:63;;4413:118;3919:619;;;;;:::o;4544:139::-;4636:6;4670:5;4664:12;4654:22;;4544:139;;;:::o;4689:209::-;4813:11;4847:6;4842:3;4835:19;4887:4;4882:3;4878:14;4863:29;;4689:209;;;;:::o;4904:157::-;4996:4;5019:3;5011:11;;5049:4;5044:3;5040:14;5032:22;;4904:157;;;:::o;5067:108::-;5144:24;5162:5;5144:24;:::i;:::-;5139:3;5132:37;5067:108;;:::o;5181:::-;5258:24;5276:5;5258:24;:::i;:::-;5253:3;5246:37;5181:108;;:::o;5295:86::-;5330:7;5370:4;5363:5;5359:16;5348:27;;5295:86;;;:::o;5387:102::-;5460:22;5476:5;5460:22;:::i;:::-;5455:3;5448:35;5387:102;;:::o;5565:2675::-;5702:6;5697:3;5693:16;5801:4;5794:5;5790:16;5784:23;5820:63;5877:4;5872:3;5868:14;5854:12;5820:63;:::i;:::-;5719:174;5975:4;5968:5;5964:16;5958:23;5994:63;6051:4;6046:3;6042:14;6028:12;5994:63;:::i;:::-;5903:164;6152:4;6145:5;6141:16;6135:23;6171:63;6228:4;6223:3;6219:14;6205:12;6171:63;:::i;:::-;6077:167;6333:4;6326:5;6322:16;6316:23;6352:63;6409:4;6404:3;6400:14;6386:12;6352:63;:::i;:::-;6254:171;6511:4;6504:5;6500:16;6494:23;6530:63;6587:4;6582:3;6578:14;6564:12;6530:63;:::i;:::-;6435:168;6687:4;6680:5;6676:16;6670:23;6706:59;6759:4;6754:3;6750:14;6736:12;6706:59;:::i;:::-;6613:162;6862:4;6855:5;6851:16;6845:23;6881:63;6938:4;6933:3;6929:14;6915:12;6881:63;:::i;:::-;6785:169;7041:4;7034:5;7030:16;7024:23;7060:63;7117:4;7112:3;7108:14;7094:12;7060:63;:::i;:::-;6964:169;7218:6;7211:5;7207:18;7201:25;7239:65;7296:6;7291:3;7287:16;7273:12;7239:65;:::i;:::-;7143:171;7400:6;7393:5;7389:18;7383:25;7421:65;7478:6;7473:3;7469:16;7455:12;7421:65;:::i;:::-;7324:172;7579:6;7572:5;7568:18;7562:25;7600:65;7657:6;7652:3;7648:16;7634:12;7600:65;:::i;:::-;7506:169;7766:6;7759:5;7755:18;7749:25;7787:65;7844:6;7839:3;7835:16;7821:12;7787:65;:::i;:::-;7685:177;7949:6;7942:5;7938:18;7932:25;7970:65;8027:6;8022:3;8018:16;8004:12;7970:65;:::i;:::-;7872:173;8137:6;8130:5;8126:18;8120:25;8158:65;8215:6;8210:3;8206:16;8192:12;8158:65;:::i;:::-;8055:178;5671:2569;5565:2675;;:::o;8246:281::-;8365:10;8386:96;8478:3;8470:6;8386:96;:::i;:::-;8514:6;8509:3;8505:16;8491:30;;8246:281;;;;:::o;8533:138::-;8628:4;8660;8655:3;8651:14;8643:22;;8533:138;;;:::o;8751:932::-;8920:3;8949:79;9022:5;8949:79;:::i;:::-;9044:111;9148:6;9143:3;9044:111;:::i;:::-;9037:118;;9179:81;9254:5;9179:81;:::i;:::-;9283:7;9314:1;9299:359;9324:6;9321:1;9318:13;9299:359;;;9400:6;9394:13;9427:113;9536:3;9521:13;9427:113;:::i;:::-;9420:120;;9563:85;9641:6;9563:85;:::i;:::-;9553:95;;9359:299;9346:1;9343;9339:9;9334:14;;9299:359;;;9303:14;9674:3;9667:10;;8925:758;;;8751:932;;;;:::o;9689:473::-;9882:4;9920:2;9909:9;9905:18;9897:26;;9969:9;9963:4;9959:20;9955:1;9944:9;9940:17;9933:47;9997:158;10150:4;10141:6;9997:158;:::i;:::-;9989:166;;9689:473;;;;:::o;10168:474::-;10236:6;10244;10293:2;10281:9;10272:7;10268:23;10264:32;10261:119;;;10299:79;;:::i;:::-;10261:119;10419:1;10444:53;10489:7;10480:6;10469:9;10465:22;10444:53;:::i;:::-;10434:63;;10390:117;10546:2;10572:53;10617:7;10608:6;10597:9;10593:22;10572:53;:::i;:::-;10562:63;;10517:118;10168:474;;;;;:::o;10648:329::-;10707:6;10756:2;10744:9;10735:7;10731:23;10727:32;10724:119;;;10762:79;;:::i;:::-;10724:119;10882:1;10907:53;10952:7;10943:6;10932:9;10928:22;10907:53;:::i;:::-;10897:63;;10853:117;10648:329;;;;:::o;10983:775::-;11216:4;11254:3;11243:9;11239:19;11231:27;;11268:71;11336:1;11325:9;11321:17;11312:6;11268:71;:::i;:::-;11349:72;11417:2;11406:9;11402:18;11393:6;11349:72;:::i;:::-;11431;11499:2;11488:9;11484:18;11475:6;11431:72;:::i;:::-;11513;11581:2;11570:9;11566:18;11557:6;11513:72;:::i;:::-;11595:73;11663:3;11652:9;11648:19;11639:6;11595:73;:::i;:::-;11678;11746:3;11735:9;11731:19;11722:6;11678:73;:::i;:::-;10983:775;;;;;;;;;:::o;11764:112::-;11847:22;11863:5;11847:22;:::i;:::-;11842:3;11835:35;11764:112;;:::o;11882:878::-;12139:4;12177:3;12166:9;12162:19;12154:27;;12191:71;12259:1;12248:9;12244:17;12235:6;12191:71;:::i;:::-;12272:72;12340:2;12329:9;12325:18;12316:6;12272:72;:::i;:::-;12354;12422:2;12411:9;12407:18;12398:6;12354:72;:::i;:::-;12436;12504:2;12493:9;12489:18;12480:6;12436:72;:::i;:::-;12518:69;12582:3;12571:9;12567:19;12558:6;12518:69;:::i;:::-;12597:73;12665:3;12654:9;12650:19;12641:6;12597:73;:::i;:::-;12680;12748:3;12737:9;12733:19;12724:6;12680:73;:::i;:::-;11882:878;;;;;;;;;;:::o;12766:169::-;12850:11;12884:6;12879:3;12872:19;12924:4;12919:3;12915:14;12900:29;;12766:169;;;;:::o;12941:172::-;13081:24;13077:1;13069:6;13065:14;13058:48;12941:172;:::o;13119:366::-;13261:3;13282:67;13346:2;13341:3;13282:67;:::i;:::-;13275:74;;13358:93;13447:3;13358:93;:::i;:::-;13476:2;13471:3;13467:12;13460:19;;13119:366;;;:::o;13491:419::-;13657:4;13695:2;13684:9;13680:18;13672:26;;13744:9;13738:4;13734:20;13730:1;13719:9;13715:17;13708:47;13772:131;13898:4;13772:131;:::i;:::-;13764:139;;13491:419;;;:::o;13916:168::-;14056:20;14052:1;14044:6;14040:14;14033:44;13916:168;:::o;14090:366::-;14232:3;14253:67;14317:2;14312:3;14253:67;:::i;:::-;14246:74;;14329:93;14418:3;14329:93;:::i;:::-;14447:2;14442:3;14438:12;14431:19;;14090:366;;;:::o;14462:419::-;14628:4;14666:2;14655:9;14651:18;14643:26;;14715:9;14709:4;14705:20;14701:1;14690:9;14686:17;14679:47;14743:131;14869:4;14743:131;:::i;:::-;14735:139;;14462:419;;;:::o;14887:171::-;15027:23;15023:1;15015:6;15011:14;15004:47;14887:171;:::o;15064:366::-;15206:3;15227:67;15291:2;15286:3;15227:67;:::i;:::-;15220:74;;15303:93;15392:3;15303:93;:::i;:::-;15421:2;15416:3;15412:12;15405:19;;15064:366;;;:::o;15436:419::-;15602:4;15640:2;15629:9;15625:18;15617:26;;15689:9;15683:4;15679:20;15675:1;15664:9;15660:17;15653:47;15717:131;15843:4;15717:131;:::i;:::-;15709:139;;15436:419;;;:::o;15861:180::-;15909:77;15906:1;15899:88;16006:4;16003:1;15996:15;16030:4;16027:1;16020:15;16047:194;16087:4;16107:20;16125:1;16107:20;:::i;:::-;16102:25;;16141:20;16159:1;16141:20;:::i;:::-;16136:25;;16185:1;16182;16178:9;16170:17;;16209:1;16203:4;16200:11;16197:37;;;16214:18;;:::i;:::-;16197:37;16047:194;;;;:::o;16247:147::-;16348:11;16385:3;16370:18;;16247:147;;;;:::o;16400:114::-;;:::o;16520:398::-;16679:3;16700:83;16781:1;16776:3;16700:83;:::i;:::-;16693:90;;16792:93;16881:3;16792:93;:::i;:::-;16910:1;16905:3;16901:11;16894:18;;16520:398;;;:::o;16924:379::-;17108:3;17130:147;17273:3;17130:147;:::i;:::-;17123:154;;17294:3;17287:10;;16924:379;;;:::o;17309:175::-;17449:27;17445:1;17437:6;17433:14;17426:51;17309:175;:::o;17490:366::-;17632:3;17653:67;17717:2;17712:3;17653:67;:::i;:::-;17646:74;;17729:93;17818:3;17729:93;:::i;:::-;17847:2;17842:3;17838:12;17831:19;;17490:366;;;:::o;17862:419::-;18028:4;18066:2;18055:9;18051:18;18043:26;;18115:9;18109:4;18105:20;18101:1;18090:9;18086:17;18079:47;18143:131;18269:4;18143:131;:::i;:::-;18135:139;;17862:419;;;:::o;18287:180::-;18427:32;18423:1;18415:6;18411:14;18404:56;18287:180;:::o;18473:366::-;18615:3;18636:67;18700:2;18695:3;18636:67;:::i;:::-;18629:74;;18712:93;18801:3;18712:93;:::i;:::-;18830:2;18825:3;18821:12;18814:19;;18473:366;;;:::o;18845:419::-;19011:4;19049:2;19038:9;19034:18;19026:26;;19098:9;19092:4;19088:20;19084:1;19073:9;19069:17;19062:47;19126:131;19252:4;19126:131;:::i;:::-;19118:139;;18845:419;;;:::o;19270:442::-;19419:4;19457:2;19446:9;19442:18;19434:26;;19470:71;19538:1;19527:9;19523:17;19514:6;19470:71;:::i;:::-;19551:72;19619:2;19608:9;19604:18;19595:6;19551:72;:::i;:::-;19633;19701:2;19690:9;19686:18;19677:6;19633:72;:::i;:::-;19270:442;;;;;;:::o;19718:90::-;19752:7;19795:5;19788:13;19781:21;19770:32;;19718:90;;;:::o;19814:116::-;19884:21;19899:5;19884:21;:::i;:::-;19877:5;19874:32;19864:60;;19920:1;19917;19910:12;19864:60;19814:116;:::o;19936:137::-;19990:5;20021:6;20015:13;20006:22;;20037:30;20061:5;20037:30;:::i;:::-;19936:137;;;;:::o;20079:345::-;20146:6;20195:2;20183:9;20174:7;20170:23;20166:32;20163:119;;;20201:79;;:::i;:::-;20163:119;20321:1;20346:61;20399:7;20390:6;20379:9;20375:22;20346:61;:::i;:::-;20336:71;;20292:125;20079:345;;;;:::o;20430:191::-;20470:3;20489:20;20507:1;20489:20;:::i;:::-;20484:25;;20523:20;20541:1;20523:20;:::i;:::-;20518:25;;20566:1;20563;20559:9;20552:16;;20587:3;20584:1;20581:10;20578:36;;;20594:18;;:::i;:::-;20578:36;20430:191;;;;:::o;20627:332::-;20748:4;20786:2;20775:9;20771:18;20763:26;;20799:71;20867:1;20856:9;20852:17;20843:6;20799:71;:::i;:::-;20880:72;20948:2;20937:9;20933:18;20924:6;20880:72;:::i;:::-;20627:332;;;;;:::o;20965:143::-;21022:5;21053:6;21047:13;21038:22;;21069:33;21096:5;21069:33;:::i;:::-;20965:143;;;;:::o;21114:351::-;21184:6;21233:2;21221:9;21212:7;21208:23;21204:32;21201:119;;;21239:79;;:::i;:::-;21201:119;21359:1;21384:64;21440:7;21431:6;21420:9;21416:22;21384:64;:::i;:::-;21374:74;;21330:128;21114:351;;;;:::o;21471:332::-;21592:4;21630:2;21619:9;21615:18;21607:26;;21643:71;21711:1;21700:9;21696:17;21687:6;21643:71;:::i;:::-;21724:72;21792:2;21781:9;21777:18;21768:6;21724:72;:::i;:::-;21471:332;;;;;:::o;21809:233::-;21848:3;21871:24;21889:5;21871:24;:::i;:::-;21862:33;;21917:66;21910:5;21907:77;21904:103;;21987:18;;:::i;:::-;21904:103;22034:1;22027:5;22023:13;22016:20;;21809:233;;;:::o;22048:553::-;22225:4;22263:3;22252:9;22248:19;22240:27;;22277:71;22345:1;22334:9;22330:17;22321:6;22277:71;:::i;:::-;22358:72;22426:2;22415:9;22411:18;22402:6;22358:72;:::i;:::-;22440;22508:2;22497:9;22493:18;22484:6;22440:72;:::i;:::-;22522;22590:2;22579:9;22575:18;22566:6;22522:72;:::i;:::-;22048:553;;;;;;;:::o;22607:171::-;22747:23;22743:1;22735:6;22731:14;22724:47;22607:171;:::o;22784:366::-;22926:3;22947:67;23011:2;23006:3;22947:67;:::i;:::-;22940:74;;23023:93;23112:3;23023:93;:::i;:::-;23141:2;23136:3;23132:12;23125:19;;22784:366;;;:::o;23156:419::-;23322:4;23360:2;23349:9;23345:18;23337:26;;23409:9;23403:4;23399:20;23395:1;23384:9;23380:17;23373:47;23437:131;23563:4;23437:131;:::i;:::-;23429:139;;23156:419;;;:::o;23581:180::-;23629:77;23626:1;23619:88;23726:4;23723:1;23716:15;23750:4;23747:1;23740:15;23767:167;23907:19;23903:1;23895:6;23891:14;23884:43;23767:167;:::o;23940:366::-;24082:3;24103:67;24167:2;24162:3;24103:67;:::i;:::-;24096:74;;24179:93;24268:3;24179:93;:::i;:::-;24297:2;24292:3;24288:12;24281:19;;23940:366;;;:::o;24312:419::-;24478:4;24516:2;24505:9;24501:18;24493:26;;24565:9;24559:4;24555:20;24551:1;24540:9;24536:17;24529:47;24593:131;24719:4;24593:131;:::i;:::-;24585:139;;24312:419;;;:::o;24737:168::-;24877:20;24873:1;24865:6;24861:14;24854:44;24737:168;:::o;24911:366::-;25053:3;25074:67;25138:2;25133:3;25074:67;:::i;:::-;25067:74;;25150:93;25239:3;25150:93;:::i;:::-;25268:2;25263:3;25259:12;25252:19;;24911:366;;;:::o;25283:419::-;25449:4;25487:2;25476:9;25472:18;25464:26;;25536:9;25530:4;25526:20;25522:1;25511:9;25507:17;25500:47;25564:131;25690:4;25564:131;:::i;:::-;25556:139;;25283:419;;;:::o;25708:174::-;25848:26;25844:1;25836:6;25832:14;25825:50;25708:174;:::o;25888:366::-;26030:3;26051:67;26115:2;26110:3;26051:67;:::i;:::-;26044:74;;26127:93;26216:3;26127:93;:::i;:::-;26245:2;26240:3;26236:12;26229:19;;25888:366;;;:::o;26260:419::-;26426:4;26464:2;26453:9;26449:18;26441:26;;26513:9;26507:4;26503:20;26499:1;26488:9;26484:17;26477:47;26541:131;26667:4;26541:131;:::i;:::-;26533:139;;26260:419;;;:::o;26685:180::-;26733:77;26730:1;26723:88;26830:4;26827:1;26820:15;26854:4;26851:1;26844:15;26871:178;27011:30;27007:1;26999:6;26995:14;26988:54;26871:178;:::o;27055:366::-;27197:3;27218:67;27282:2;27277:3;27218:67;:::i;:::-;27211:74;;27294:93;27383:3;27294:93;:::i;:::-;27412:2;27407:3;27403:12;27396:19;;27055:366;;;:::o;27427:419::-;27593:4;27631:2;27620:9;27616:18;27608:26;;27680:9;27674:4;27670:20;27666:1;27655:9;27651:17;27644:47;27708:131;27834:4;27708:131;:::i;:::-;27700:139;;27427:419;;;:::o;27852:164::-;27992:16;27988:1;27980:6;27976:14;27969:40;27852:164;:::o;28022:366::-;28164:3;28185:67;28249:2;28244:3;28185:67;:::i;:::-;28178:74;;28261:93;28350:3;28261:93;:::i;:::-;28379:2;28374:3;28370:12;28363:19;;28022:366;;;:::o;28394:419::-;28560:4;28598:2;28587:9;28583:18;28575:26;;28647:9;28641:4;28637:20;28633:1;28622:9;28618:17;28611:47;28675:131;28801:4;28675:131;:::i;:::-;28667:139;;28394:419;;;:::o;28819:88::-;28867:7;28896:5;28885:16;;28819:88;;;:::o;28913:91::-;28949:7;28989:8;28982:5;28978:20;28967:31;;28913:91;;;:::o;29010:60::-;29038:3;29059:5;29052:12;;29010:60;;;:::o;29076:162::-;29136:9;29169:63;29186:45;29195:35;29224:5;29195:35;:::i;:::-;29186:45;:::i;:::-;29169:63;:::i;:::-;29156:76;;29076:162;;;:::o;29244:151::-;29341:47;29382:5;29341:47;:::i;:::-;29336:3;29329:60;29244:151;;:::o;29401:142::-;29504:32;29530:5;29504:32;:::i;:::-;29499:3;29492:45;29401:142;;:::o;29549:716::-;29780:4;29818:3;29807:9;29803:19;29795:27;;29832:71;29900:1;29889:9;29885:17;29876:6;29832:71;:::i;:::-;29913:72;29981:2;29970:9;29966:18;29957:6;29913:72;:::i;:::-;29995;30063:2;30052:9;30048:18;30039:6;29995:72;:::i;:::-;30077:82;30155:2;30144:9;30140:18;30131:6;30077:82;:::i;:::-;30169:89;30253:3;30242:9;30238:19;30229:6;30169:89;:::i;:::-;29549:716;;;;;;;;:::o;30271:172::-;30411:24;30407:1;30399:6;30395:14;30388:48;30271:172;:::o;30449:366::-;30591:3;30612:67;30676:2;30671:3;30612:67;:::i;:::-;30605:74;;30688:93;30777:3;30688:93;:::i;:::-;30806:2;30801:3;30797:12;30790:19;;30449:366;;;:::o;30821:419::-;30987:4;31025:2;31014:9;31010:18;31002:26;;31074:9;31068:4;31064:20;31060:1;31049:9;31045:17;31038:47;31102:131;31228:4;31102:131;:::i;:::-;31094:139;;30821:419;;;:::o;31246:143::-;31303:5;31334:6;31328:13;31319:22;;31350:33;31377:5;31350:33;:::i;:::-;31246:143;;;;:::o;31395:351::-;31465:6;31514:2;31502:9;31493:7;31489:23;31485:32;31482:119;;;31520:79;;:::i;:::-;31482:119;31640:1;31665:64;31721:7;31712:6;31701:9;31697:22;31665:64;:::i;:::-;31655:74;;31611:128;31395:351;;;;:::o;31752:174::-;31892:26;31888:1;31880:6;31876:14;31869:50;31752:174;:::o;31932:366::-;32074:3;32095:67;32159:2;32154:3;32095:67;:::i;:::-;32088:74;;32171:93;32260:3;32171:93;:::i;:::-;32289:2;32284:3;32280:12;32273:19;;31932:366;;;:::o;32304:419::-;32470:4;32508:2;32497:9;32493:18;32485:26;;32557:9;32551:4;32547:20;32543:1;32532:9;32528:17;32521:47;32585:131;32711:4;32585:131;:::i;:::-;32577:139;;32304:419;;;:::o;32729:410::-;32769:7;32792:20;32810:1;32792:20;:::i;:::-;32787:25;;32826:20;32844:1;32826:20;:::i;:::-;32821:25;;32881:1;32878;32874:9;32903:30;32921:11;32903:30;:::i;:::-;32892:41;;33082:1;33073:7;33069:15;33066:1;33063:22;33043:1;33036:9;33016:83;32993:139;;33112:18;;:::i;:::-;32993:139;32777:362;32729:410;;;;:::o;33145:180::-;33193:77;33190:1;33183:88;33290:4;33287:1;33280:15;33314:4;33311:1;33304:15;33331:185;33371:1;33388:20;33406:1;33388:20;:::i;:::-;33383:25;;33422:20;33440:1;33422:20;:::i;:::-;33417:25;;33461:1;33451:35;;33466:18;;:::i;:::-;33451:35;33508:1;33505;33501:9;33496:14;;33331:185;;;;:::o
Swarm Source
ipfs://19d86a9542a1b8dbfc62cc49b6bffee86a772e2004a7ab01efe09afa2847ff3e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
POL | 100.00% | $0.317818 | 0.1947 | $0.061874 |
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.