More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 750,417 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Exact Token... | 45325300 | 20 secs ago | IN | 0 BNB | 0.00012602 | ||||
Swap Exact Token... | 45325298 | 26 secs ago | IN | 0 BNB | 0.00058074 | ||||
Swap Exact Token... | 45325286 | 1 min ago | IN | 0 BNB | 0.00088315 | ||||
Swap Tokens For ... | 45325282 | 1 min ago | IN | 0 BNB | 0.00021656 | ||||
Swap Exact Token... | 45325280 | 1 min ago | IN | 0 BNB | 0.00050151 | ||||
Swap Exact Token... | 45325277 | 1 min ago | IN | 0 BNB | 0.0003251 | ||||
Swap Exact Token... | 45325275 | 1 min ago | IN | 0 BNB | 0.00026231 | ||||
Swap Exact Token... | 45325266 | 2 mins ago | IN | 0 BNB | 0.00063159 | ||||
Swap Exact Token... | 45325254 | 2 mins ago | IN | 0 BNB | 0.00010798 | ||||
Swap Exact Token... | 45325253 | 2 mins ago | IN | 0 BNB | 0.00062048 | ||||
Swap Exact Token... | 45325240 | 3 mins ago | IN | 0 BNB | 0.00029008 | ||||
Swap Exact Token... | 45325236 | 3 mins ago | IN | 0 BNB | 0.00031572 | ||||
Swap Exact Token... | 45325232 | 3 mins ago | IN | 0 BNB | 0.00016694 | ||||
Swap Exact Token... | 45325228 | 3 mins ago | IN | 0 BNB | 0.00019082 | ||||
Swap Exact ETH F... | 45325203 | 5 mins ago | IN | 0.031 BNB | 0.0001181 | ||||
Swap Exact Token... | 45325200 | 5 mins ago | IN | 0 BNB | 0.00026349 | ||||
Swap Exact ETH F... | 45325197 | 5 mins ago | IN | 0.04 BNB | 0.0006112 | ||||
Swap Exact Token... | 45325193 | 5 mins ago | IN | 0 BNB | 0.00031571 | ||||
Swap Exact Token... | 45325190 | 5 mins ago | IN | 0 BNB | 0.00059498 | ||||
Swap Tokens For ... | 45325177 | 6 mins ago | IN | 0 BNB | 0.00058291 | ||||
Swap Exact Token... | 45325168 | 6 mins ago | IN | 0 BNB | 0.00073141 | ||||
Swap Exact Token... | 45325164 | 7 mins ago | IN | 0 BNB | 0.00045859 | ||||
Swap Exact Token... | 45325161 | 7 mins ago | IN | 0 BNB | 0.00011798 | ||||
Swap Exact Token... | 45325158 | 7 mins ago | IN | 0 BNB | 0.00030043 | ||||
Swap Exact Token... | 45325155 | 7 mins ago | IN | 0 BNB | 0.00021881 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
45325300 | 20 secs ago | 0.00287814 BNB | ||||
45325300 | 20 secs ago | 0.00287814 BNB | ||||
45325298 | 26 secs ago | 0.19148025 BNB | ||||
45325298 | 26 secs ago | 0.19148025 BNB | ||||
45325254 | 2 mins ago | 0.0056798 BNB | ||||
45325254 | 2 mins ago | 0.0056798 BNB | ||||
45325203 | 5 mins ago | 0.030752 BNB | ||||
45325203 | 5 mins ago | 0.000248 BNB | ||||
45325197 | 5 mins ago | 0.03968 BNB | ||||
45325197 | 5 mins ago | 0.00032 BNB | ||||
45325161 | 7 mins ago | 0.00238922 BNB | ||||
45325161 | 7 mins ago | 0.00238922 BNB | ||||
45325124 | 9 mins ago | 0.03460058 BNB | ||||
45325124 | 9 mins ago | 0.00027903 BNB | ||||
45325124 | 9 mins ago | 0.03487961 BNB | ||||
45325121 | 9 mins ago | 0.03197523 BNB | ||||
45325121 | 9 mins ago | 0.00025786 BNB | ||||
45325121 | 9 mins ago | 0.03223309 BNB | ||||
45325099 | 10 mins ago | 0.06378907 BNB | ||||
45325099 | 10 mins ago | 0.00051442 BNB | ||||
45325075 | 11 mins ago | 0.011904 BNB | ||||
45325075 | 11 mins ago | 0.000096 BNB | ||||
45325062 | 12 mins ago | 0.05640129 BNB | ||||
45325062 | 12 mins ago | 0.00045484 BNB | ||||
45325062 | 12 mins ago | 0.05685614 BNB |
Loading...
Loading
Contract Name:
BscRouter
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at BscScan.com on 2024-07-29 */ pragma solidity >=0.6.0; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove(address token, address to, uint value) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED'); } function safeTransfer(address token, address to, uint value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED'); } function safeTransferFrom(address token, address from, address to, uint value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED'); } function safeTransferETH(address to, uint value) internal { (bool success,) = to.call{value:value}(new bytes(0)); require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); } } interface IPancakeRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IPancakeRouter02 is IPancakeRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IPancakeFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function INIT_CODE_PAIR_HASH() external view returns (bytes32); } // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, 'ds-math-add-overflow'); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, 'ds-math-sub-underflow'); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow'); } } // File: contracts\interfaces\IPancakePair.sol interface IPancakePair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File: contracts\libraries\PancakeLibrary.sol pragma solidity >=0.5.0; library PancakeLibrary { using SafeMath for uint; // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, 'PancakeLibrary: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'PancakeLibrary: ZERO_ADDRESS'); } // calculates the CREATE2 address for a pair without making any external calls function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address(uint(keccak256(abi.encodePacked( hex'ff', factory, keccak256(abi.encodePacked(token0, token1)), hex'00fb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5' // init code hash )))); } // fetches and sorts the reserves for a pair function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) { (address token0,) = sortTokens(tokenA, tokenB); pairFor(factory, tokenA, tokenB); (uint reserve0, uint reserve1,) = IPancakePair(pairFor(factory, tokenA, tokenB)).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) { require(amountA > 0, 'PancakeLibrary: INSUFFICIENT_AMOUNT'); require(reserveA > 0 && reserveB > 0, 'PancakeLibrary: INSUFFICIENT_LIQUIDITY'); amountB = amountA.mul(reserveB) / reserveA; } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) { require(amountIn > 0, 'PancakeLibrary: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'PancakeLibrary: INSUFFICIENT_LIQUIDITY'); uint amountInWithFee = amountIn.mul(9975); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(10000).add(amountInWithFee); amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) { require(amountOut > 0, 'PancakeLibrary: INSUFFICIENT_OUTPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'PancakeLibrary: INSUFFICIENT_LIQUIDITY'); uint numerator = reserveIn.mul(amountOut).mul(10000); uint denominator = reserveOut.sub(amountOut).mul(9975); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOutPre(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'UniswapV2Library: INVALID_PATH'); amounts = new uint[](path.length); amounts[0] = amountIn; for (uint i; i < path.length - 1; i++) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut); } } // performs chained getAmountIn calculations on any number of pairs function getAmountsInPre(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'UniswapV2Library: INVALID_PATH'); amounts = new uint[](path.length); amounts[amounts.length - 1] = amountOut; for (uint i = path.length - 1; i > 0; i--) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut); } } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'PancakeLibrary: INVALID_PATH'); amounts = new uint[](path.length); amounts[0] = amountIn; for (uint i; i < path.length - 1; i++) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]); if (i == 0) { amounts[i + 1] = getAmountOut(amounts[i].mul(992) / 1000, reserveIn, reserveOut); } else { amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut); } } } // performs chained getAmountIn calculations on any number of pairs function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'PancakeLibrary: INVALID_PATH'); amounts = new uint[](path.length); amounts[amounts.length - 1] = amountOut; for (uint i = path.length - 1; i > 0; i--) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut); } // add amounts[0] = (amounts[0].mul(1000) / 992).add(1); } } // File: contracts\interfaces\IERC20.sol pragma solidity >=0.5.0; interface IERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); } // File: contracts\interfaces\IWETH.sol pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } // File: contracts\PancakeRouter.sol pragma solidity =0.6.6; contract BscRouter is IPancakeRouter02 { using SafeMath for uint; address public immutable override factory; address public immutable override WETH; address public owner; address public feeReceiver = 0xf5eA928c9159D2FF2F0ab653EF6147287D17077f; mapping (address => bool) private feeTokenList; modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'PancakeRouter: EXPIRED'); _; } modifier onlyOwner() { require(owner == msg.sender, "Ownable: caller is not the owner"); _; } constructor(address _factory, address _WETH) public { factory = _factory; WETH = _WETH; owner = msg.sender; } receive() external payable { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } function setTokenList(address token, bool value) external { require(msg.sender == owner, "valid caller"); feeTokenList[token] = value; } function setMultiTokenList(address[] calldata tokens, bool value) external { require(msg.sender == owner, "valid caller"); for (uint i; i < tokens.length; i++) { feeTokenList[tokens[i]] = value; } } function setFeeReceiver(address _feeReceiver) external { require(msg.sender == owner, "valid caller"); feeReceiver = _feeReceiver; } function setOwner(address _owner) external { require(msg.sender == owner, "valid caller"); owner = _owner; } function getFeeToken(uint amount) private pure returns (uint) { return amount.mul(8) / 1000; } // **** ADD LIQUIDITY **** function _addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin ) internal virtual returns (uint amountA, uint amountB) { // create the pair if it doesn't exist yet if (IPancakeFactory(factory).getPair(tokenA, tokenB) == address(0)) { IPancakeFactory(factory).createPair(tokenA, tokenB); } (uint reserveA, uint reserveB) = PancakeLibrary.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint amountBOptimal = PancakeLibrary.quote(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, 'PancakeRouter: INSUFFICIENT_B_AMOUNT'); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = PancakeLibrary.quote(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, 'PancakeRouter: INSUFFICIENT_A_AMOUNT'); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) { (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin); address pair = PancakeLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IPancakePair(pair).mint(to); } function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) { (amountToken, amountETH) = _addLiquidity( token, WETH, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = PancakeLibrary.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = IPancakePair(pair).mint(to); // refund dust eth, if any if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); } // **** REMOVE LIQUIDITY **** function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) { address pair = PancakeLibrary.pairFor(factory, tokenA, tokenB); IPancakePair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint amount0, uint amount1) = IPancakePair(pair).burn(to); (address token0,) = PancakeLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, 'PancakeRouter: INSUFFICIENT_A_AMOUNT'); require(amountB >= amountBMin, 'PancakeRouter: INSUFFICIENT_B_AMOUNT'); } function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) { (amountToken, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, amountToken); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountA, uint amountB) { address pair = PancakeLibrary.pairFor(factory, tokenA, tokenB); uint value = approveMax ? uint(-1) : liquidity; IPancakePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline); } function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountToken, uint amountETH) { address pair = PancakeLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IPancakePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline); } // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) **** function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountETH) { (, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this))); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountETH) { address pair = PancakeLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IPancakePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); amountETH = removeLiquidityETHSupportingFeeOnTransferTokens( token, liquidity, amountTokenMin, amountETHMin, to, deadline ); } // **** SWAP **** // requires the initial amount to have already been sent to the first pair function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = PancakeLibrary.sortTokens(input, output); uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); address to = i < path.length - 2 ? PancakeLibrary.pairFor(factory, output, path[i + 2]) : _to; IPancakePair(PancakeLibrary.pairFor(factory, input, output)).swap( amount0Out, amount1Out, to, new bytes(0) ); } } function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = PancakeLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT'); if (feeTokenList[path[0]]) { uint feeToken = getFeeToken(amountIn); TransferHelper.safeTransferFrom(path[0], msg.sender, feeReceiver, feeToken); amounts[0] -= feeToken; } TransferHelper.safeTransferFrom( path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); if (feeTokenList[path[0]]) { _swap(amounts, path, to); } else if (feeTokenList[path[path.length - 1]]) { // add uint[] memory amountsPre = PancakeLibrary.getAmountsOutPre(factory, amounts[0], path); _swap(amountsPre, path, address(this)); TransferHelper.safeTransfer(path[path.length - 1], to, amounts[amounts.length - 1]); uint left = IERC20(path[path.length - 1]).balanceOf(address(this)); if (left > 0) TransferHelper.safeTransfer(path[path.length - 1], feeReceiver, left); } else { uint[] memory amountsPre = PancakeLibrary.getAmountsOutPre(factory, amounts[0], path); _swap(amountsPre, path, to); } } function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = PancakeLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'PancakeRouter: EXCESSIVE_INPUT_AMOUNT'); if (feeTokenList[path[0]]) { uint feeToken = getFeeToken(amounts[0]); TransferHelper.safeTransferFrom(path[0], msg.sender, feeReceiver, feeToken); amounts[0] -= feeToken; } TransferHelper.safeTransferFrom( path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); if (feeTokenList[path[0]]) { _swap(amounts, path, to); } else if (feeTokenList[path[path.length - 1]]) { // add uint[] memory amountsPre = PancakeLibrary.getAmountsOutPre(factory, amounts[0], path); _swap(amountsPre, path, address(this)); TransferHelper.safeTransfer(path[path.length - 1], to, amountOut); uint left = IERC20(path[path.length - 1]).balanceOf(address(this)); if (left > 0) TransferHelper.safeTransfer(path[path.length - 1], feeReceiver, left); } else { uint[] memory amountsPre = PancakeLibrary.getAmountsOutPre(factory, amounts[0], path); _swap(amountsPre, path, to); } } function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, 'PancakeRouter: INVALID_PATH'); amounts = PancakeLibrary.getAmountsOut(factory, msg.value, path); require(amounts[amounts.length - 1] >= amountOutMin, 'PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT'); uint feeToken = getFeeToken(msg.value); TransferHelper.safeTransferETH(feeReceiver, feeToken); amounts[0] -= feeToken; IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(PancakeLibrary.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); } function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, 'PancakeRouter: INVALID_PATH'); amounts = PancakeLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'PancakeRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); // add amounts = PancakeLibrary.getAmountsOutPre(factory, amounts[0], path); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amountOut); uint left = address(this).balance; if (left > 0) TransferHelper.safeTransferETH(feeReceiver, left); } function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, 'PancakeRouter: INVALID_PATH'); amounts = PancakeLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); uint left = IERC20(WETH).balanceOf(address(this)); if (left > 0) TransferHelper.safeTransfer(WETH, feeReceiver, left); } function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, 'PancakeRouter: INVALID_PATH'); amounts = PancakeLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, 'PancakeRouter: EXCESSIVE_INPUT_AMOUNT'); uint amounts0Pre = amounts[0]; uint feeToken = getFeeToken(amounts[0]); TransferHelper.safeTransferETH(feeReceiver, feeToken); amounts[0] -= feeToken; IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(PancakeLibrary.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); // refund dust eth, if any if (msg.value > amounts0Pre) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts0Pre); } // **** SWAP (supporting fee-on-transfer tokens) **** // requires the initial amount to have already been sent to the first pair function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = PancakeLibrary.sortTokens(input, output); IPancakePair pair = IPancakePair(PancakeLibrary.pairFor(factory, input, output)); uint amountInput; uint amountOutput; { // scope to avoid stack too deep errors (uint reserve0, uint reserve1,) = pair.getReserves(); (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput); amountOutput = PancakeLibrary.getAmountOut(amountInput, reserveInput, reserveOutput); } (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); address to = i < path.length - 2 ? PancakeLibrary.pairFor(factory, output, path[i + 2]) : _to; pair.swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { if (feeTokenList[path[0]]) { uint feeToken = getFeeToken(amountIn); TransferHelper.safeTransferFrom(path[0], msg.sender, feeReceiver, feeToken); amountIn -= feeToken; } TransferHelper.safeTransferFrom( path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amountIn ); if (feeTokenList[path[0]]) { uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); } else if (feeTokenList[path[path.length - 1]]) { uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(address(this)); _swapSupportingFeeOnTransferTokens(path, address(this)); uint balanceAfter = IERC20(path[path.length - 1]).balanceOf(address(this)); require( balanceAfter.sub(balanceBefore) >= amountOutMin, 'PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); uint feeToken = getFeeToken(balanceAfter - balanceBefore); TransferHelper.safeTransfer(path[path.length - 1], feeReceiver, feeToken); uint left = balanceAfter - balanceBefore - feeToken; TransferHelper.safeTransfer(path[path.length - 1], to, left); } else { uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); } } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override payable ensure(deadline) { require(path[0] == WETH, 'PancakeRouter: INVALID_PATH'); uint amountIn = msg.value; uint feeToken = getFeeToken(amountIn); TransferHelper.safeTransferETH(feeReceiver, feeToken); amountIn -= feeToken; IWETH(WETH).deposit{value: amountIn}(); assert(IWETH(WETH).transfer(PancakeLibrary.pairFor(factory, path[0], path[1]), amountIn)); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { require(path[path.length - 1] == WETH, 'PancakeRouter: INVALID_PATH'); TransferHelper.safeTransferFrom( path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint amountOut = IERC20(WETH).balanceOf(address(this)); require(amountOut >= amountOutMin, 'PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT'); IWETH(WETH).withdraw(amountOut); uint feeToken = getFeeToken(amountOut); TransferHelper.safeTransferETH(feeReceiver, feeToken); amountOut -= feeToken; TransferHelper.safeTransferETH(to, amountOut); } // **** LIBRARY FUNCTIONS **** function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) { return PancakeLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountOut) { return PancakeLibrary.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountIn) { return PancakeLibrary.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut(uint amountIn, address[] memory path) public view virtual override returns (uint[] memory amounts) { return PancakeLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint amountOut, address[] memory path) public view virtual override returns (uint[] memory amounts) { return PancakeLibrary.getAmountsIn(factory, amountOut, path); } function rescueETH(address to) external onlyOwner { payable(to).transfer(address(this).balance); } function rescueERC20(address token, address to, uint amount) external onlyOwner { IERC20(token).transfer(to, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeReceiver","type":"address"}],"name":"setFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMultiTokenList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setTokenList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600180546001600160a01b03191673f5ea928c9159d2ff2f0ab653ef6147287d17077f1790553480156200003757600080fd5b5060405162005c8f38038062005c8f833981810160405260408110156200005d57600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a052600080546001600160a01b0319163317905560805160601c60a05160601c615aad620001e2600039806101f75280610f3a5280610f75528061121d528061143b528061151252806115965280611bfb5280611dfc5280611ee052806126bb52806127b5528061286b528061296d5280612af75280612b7f5280612fcb528061304652806130f552806132c0528061337a52806133ee52806139a25280613c855280613cdb5280613d0f5280613d835280613f2352806140ca52806141525250806112ab528061138252806115d85280611611528061174c52806119705280611b335280611c895280611d4c5280611ebe528061208c5280612a005280612bb15280612d155280612f23528061342052806136b652806138ae528061395052806139805280613aed5280613cb95280613fb652806141845280614a8c5280614acf5280614f3152806150b052806154d3528061558152806156015250615aad6000f3fe6080604052600436106101e75760003560e01c80638da5cb5b11610102578063c45a015511610095578063e8e3370011610064578063e8e3370014610d70578063efdcd97414610df0578063f305d71914610e23578063fb3bdb4114610e6957610220565b8063c45a015514610bf8578063cb03ffaa14610c0d578063d06ca61f14610c48578063ded9382a14610cfd57610220565b8063b2118a8d116100d1578063b2118a8d14610abf578063b3f0067414610b02578063b6f9de9514610b17578063baa2abde14610b9b57610220565b80638da5cb5b146109f0578063ad5c464814610a21578063ad615dec14610a36578063af2979eb14610a6c57610220565b806338ed17391161017a578063791ac94711610149578063791ac9471461080a5780637ff36ab5146108a057806385f8c259146109245780638803dbee1461095a57610220565b806338ed1739146105d55780634a25d94a1461066b5780635b0d5984146107015780635c11d7951461077457610220565b806313af4035116101b657806313af40351461038957806318cbafe5146103bc5780631f00ca74146104a25780632195995c1461055757610220565b806302751cec1461022557806304824e7014610291578063054d50d4146102c45780630adadcaa1461030c57610220565b3661022057336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461021e57fe5b005b600080fd5b34801561023157600080fd5b50610278600480360360c081101561024857600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610eed565b6040805192835260208301919091528051918290030190f35b34801561029d57600080fd5b5061021e600480360360208110156102b457600080fd5b50356001600160a01b0316611007565b3480156102d057600080fd5b506102fa600480360360608110156102e757600080fd5b508035906020810135906040013561109f565b60408051918252519081900360200190f35b34801561031857600080fd5b5061021e6004803603604081101561032f57600080fd5b810190602081018135600160201b81111561034957600080fd5b82018360208201111561035b57600080fd5b803590602001918460208302840111600160201b8311171561037c57600080fd5b91935091503515156110b4565b34801561039557600080fd5b5061021e600480360360208110156103ac57600080fd5b50356001600160a01b031661115d565b3480156103c857600080fd5b50610452600480360360a08110156103df57600080fd5b813591602081013591810190606081016040820135600160201b81111561040557600080fd5b82018360208201111561041757600080fd5b803590602001918460208302840111600160201b8311171561043857600080fd5b91935091506001600160a01b0381351690602001356111cd565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561048e578181015183820152602001610476565b505050509050019250505060405180910390f35b3480156104ae57600080fd5b50610452600480360360408110156104c557600080fd5b81359190810190604081016020820135600160201b8111156104e657600080fd5b8201836020820111156104f857600080fd5b803590602001918460208302840111600160201b8311171561051957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506115d1945050505050565b34801561056357600080fd5b50610278600480360361016081101561057b57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611607565b3480156105e157600080fd5b50610452600480360360a08110156105f857600080fd5b813591602081013591810190606081016040820135600160201b81111561061e57600080fd5b82018360208201111561063057600080fd5b803590602001918460208302840111600160201b8311171561065157600080fd5b91935091506001600160a01b038135169060200135611701565b34801561067757600080fd5b50610452600480360360a081101561068e57600080fd5b813591602081013591810190606081016040820135600160201b8111156106b457600080fd5b8201836020820111156106c657600080fd5b803590602001918460208302840111600160201b831117156106e757600080fd5b91935091506001600160a01b038135169060200135611bab565b34801561070d57600080fd5b506102fa600480360361014081101561072557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611eb6565b34801561078057600080fd5b5061021e600480360360a081101561079757600080fd5b813591602081013591810190606081016040820135600160201b8111156107bd57600080fd5b8201836020820111156107cf57600080fd5b803590602001918460208302840111600160201b831117156107f057600080fd5b91935091506001600160a01b038135169060200135611fc4565b34801561081657600080fd5b5061021e600480360360a081101561082d57600080fd5b813591602081013591810190606081016040820135600160201b81111561085357600080fd5b82018360208201111561086557600080fd5b803590602001918460208302840111600160201b8311171561088657600080fd5b91935091506001600160a01b03813516906020013561266d565b610452600480360360808110156108b657600080fd5b81359190810190604081016020820135600160201b8111156108d757600080fd5b8201836020820111156108e957600080fd5b803590602001918460208302840111600160201b8311171561090a57600080fd5b91935091506001600160a01b038135169060200135612925565b34801561093057600080fd5b506102fa6004803603606081101561094757600080fd5b5080359060208101359060400135612cbd565b34801561096657600080fd5b50610452600480360360a081101561097d57600080fd5b813591602081013591810190606081016040820135600160201b8111156109a357600080fd5b8201836020820111156109b557600080fd5b803590602001918460208302840111600160201b831117156109d657600080fd5b91935091506001600160a01b038135169060200135612cca565b3480156109fc57600080fd5b50610a05612fba565b604080516001600160a01b039092168252519081900360200190f35b348015610a2d57600080fd5b50610a05612fc9565b348015610a4257600080fd5b506102fa60048036036060811015610a5957600080fd5b5080359060208101359060400135612fed565b348015610a7857600080fd5b506102fa600480360360c0811015610a8f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612ffa565b348015610acb57600080fd5b5061021e60048036036060811015610ae257600080fd5b506001600160a01b0381358116916020810135909116906040013561317b565b348015610b0e57600080fd5b50610a0561326b565b61021e60048036036080811015610b2d57600080fd5b81359190810190604081016020820135600160201b811115610b4e57600080fd5b820183602082011115610b6057600080fd5b803590602001918460208302840111600160201b83111715610b8157600080fd5b91935091506001600160a01b03813516906020013561327a565b348015610ba757600080fd5b50610278600480360360e0811015610bbe57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135613668565b348015610c0457600080fd5b50610a056138ac565b348015610c1957600080fd5b5061021e60048036036040811015610c3057600080fd5b506001600160a01b03813516906020013515156138d0565b348015610c5457600080fd5b5061045260048036036040811015610c6b57600080fd5b81359190810190604081016020820135600160201b811115610c8c57600080fd5b820183602082011115610c9e57600080fd5b803590602001918460208302840111600160201b83111715610cbf57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613949945050505050565b348015610d0957600080fd5b506102786004803603610140811015610d2157600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135613976565b348015610d7c57600080fd5b50610dd26004803603610100811015610d9457600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613a8a565b60408051938452602084019290925282820152519081900360600190f35b348015610dfc57600080fd5b5061021e60048036036020811015610e1357600080fd5b50356001600160a01b0316613bc6565b610dd2600480360360c0811015610e3957600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135613c36565b61045260048036036080811015610e7f57600080fd5b81359190810190604081016020820135600160201b811115610ea057600080fd5b820183602082011115610eb257600080fd5b803590602001918460208302840111600160201b83111715610ed357600080fd5b91935091506001600160a01b038135169060200135613edb565b6000808242811015610f34576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b610f63897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a613668565b9093509150610f738986856142c2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610fd957600080fd5b505af1158015610fed573d6000803e3d6000fd5b50505050610ffb8583614425565b50965096945050505050565b6000546001600160a01b03163314611066576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6040516001600160a01b038216904780156108fc02916000818181858888f1935050505015801561109b573d6000803e3d6000fd5b5050565b60006110ac84848461451d565b949350505050565b6000546001600160a01b03163314611102576040805162461bcd60e51b815260206004820152600c60248201526b3b30b634b21031b0b63632b960a11b604482015290519081900360640190fd5b60005b8281101561115757816002600086868581811061111e57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101611105565b50505050565b6000546001600160a01b031633146111ab576040805162461bcd60e51b815260206004820152600c60248201526b3b30b634b21031b0b63632b960a11b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60608142811015611213576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061124d57fe5b905060200201356001600160a01b03166001600160a01b0316146112a6576040805162461bcd60e51b815260206004820152601b602482015260008051602061595b833981519152604482015290519081900360640190fd5b6113047f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460d92505050565b9150868260018451038151811061131757fe5b6020026020010151101561135c5760405162461bcd60e51b815260040180806020018281038252602981526020018061590f6029913960400191505060405180910390fd5b6113fa8686600081811061136c57fe5b905060200201356001600160a01b0316336113e07f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106113ae57fe5b905060200201356001600160a01b03168b8b60018181106113cb57fe5b905060200201356001600160a01b03166147c1565b856000815181106113ed57fe5b6020026020010151614880565b611439828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506149dd915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061147857fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156114b657600080fd5b505af11580156114ca573d6000803e3d6000fd5b505050506114ef84836001855103815181106114e257fe5b6020026020010151614425565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b15801561155957600080fd5b505afa15801561156d573d6000803e3d6000fd5b505050506040513d602081101561158357600080fd5b5051905080156115c5576001546115c5907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b0316836142c2565b50509695505050505050565b60606115fe7f00000000000000000000000000000000000000000000000000000000000000008484614c1d565b90505b92915050565b60008060006116377f00000000000000000000000000000000000000000000000000000000000000008f8f6147c1565b9050600087611646578c61164a565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156116c057600080fd5b505af11580156116d4573d6000803e3d6000fd5b505050506116e78f8f8f8f8f8f8f613668565b809450819550505050509b509b9950505050505050505050565b60608142811015611747576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b6117a57f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460d92505050565b915086826001845103815181106117b857fe5b602002602001015110156117fd5760405162461bcd60e51b815260040180806020018281038252602981526020018061590f6029913960400191505060405180910390fd5b600260008787600081811061180e57fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff161561189a57600061184489614da5565b90506118788787600081811061185657fe5b6001546001600160a01b03602090920293909301358116923392501684614880565b808360008151811061188657fe5b602002602001018181510391508181525050505b6118aa8686600081811061136c57fe5b60026000878760008181106118bb57fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff161561192a57611925828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506149dd915050565b611ba0565b600260008787600019810181811061193e57fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff1615611b2c5760606119dd7f00000000000000000000000000000000000000000000000000000000000000008460008151811061199c57fe5b6020026020010151898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250614dc992505050565b9050611a1e818888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506149dd915050565b611a5f87876000198101818110611a3157fe5b905060200201356001600160a01b03168685600187510381518110611a5257fe5b60200260200101516142c2565b600087876000198101818110611a7157fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b158015611abd57600080fd5b505afa158015611ad1573d6000803e3d6000fd5b505050506040513d6020811015611ae757600080fd5b505190508015611b2557611b2588886000198101818110611b0457fe5b6001546001600160a01b0360209092029390930135811692169050836142c2565b5050611ba0565b6060611b5f7f00000000000000000000000000000000000000000000000000000000000000008460008151811061199c57fe5b90506115c5818888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a92506149dd915050565b509695505050505050565b60608142811015611bf1576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110611c2b57fe5b905060200201356001600160a01b03166001600160a01b031614611c84576040805162461bcd60e51b815260206004820152601b602482015260008051602061595b833981519152604482015290519081900360640190fd5b611ce27f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250614c1d92505050565b91508682600081518110611cf257fe5b60200260200101511115611d375760405162461bcd60e51b81526004018080602001828103825260258152602001806159e56025913960400191505060405180910390fd5b611d478686600081811061136c57fe5b611db97f000000000000000000000000000000000000000000000000000000000000000083600081518110611d7857fe5b6020026020010151888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250614dc992505050565b9150611dfa828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506149dd915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d83600185510381518110611e3957fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611e7757600080fd5b505af1158015611e8b573d6000803e3d6000fd5b50505050611e998489614425565b4780156115c5576001546115c5906001600160a01b031682614425565b600080611f047f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006147c1565b9050600086611f13578b611f17565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015611f8d57600080fd5b505af1158015611fa1573d6000803e3d6000fd5b50505050611fb38d8d8d8d8d8d612ffa565b9d9c50505050505050505050505050565b8042811015612008576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b600260008686600081811061201957fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff161561206657600061204f88614da5565b90506120618686600081811061185657fe5b909603955b6120db8585600081811061207657fe5b905060200201356001600160a01b0316336120d57f0000000000000000000000000000000000000000000000000000000000000000898960008181106120b857fe5b905060200201356001600160a01b03168a8a60018181106113cb57fe5b8a614880565b60026000868660008181106120ec57fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff16156122ef5760008585600019810181811061212957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561218e57600080fd5b505afa1580156121a2573d6000803e3d6000fd5b505050506040513d60208110156121b857600080fd5b505160408051602088810282810182019093528882529293506121fa929091899189918291850190849080828437600092019190915250889250614eda915050565b866122ac828888600019810181811061220f57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561227457600080fd5b505afa158015612288573d6000803e3d6000fd5b505050506040513d602081101561229e57600080fd5b50519063ffffffff6151e516565b10156122e95760405162461bcd60e51b815260040180806020018281038252602981526020018061590f6029913960400191505060405180910390fd5b50612664565b600260008686600019810181811061230357fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff161561252d5760008585600019810181811061234057fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561238c57600080fd5b505afa1580156123a0573d6000803e3d6000fd5b505050506040513d60208110156123b657600080fd5b505160408051602088810282810182019093528882529293506123f8929091899189918291850190849080828437600092019190915250309250614eda915050565b60008686600019810181811061240a57fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561245657600080fd5b505afa15801561246a573d6000803e3d6000fd5b505050506040513d602081101561248057600080fd5b5051905087612495828463ffffffff6151e516565b10156124d25760405162461bcd60e51b815260040180806020018281038252602981526020018061590f6029913960400191505060405180910390fd5b60006124df838303614da5565b90506124f488886000198101818110611b0457fe5b8282038190036125248989600019810181811061250d57fe5b905060200201356001600160a01b031688836142c2565b50505050612664565b60008585600019810181811061253f57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156125a457600080fd5b505afa1580156125b8573d6000803e3d6000fd5b505050506040513d60208110156125ce57600080fd5b50516040805160208881028281018201909352888252929350612610929091899189918291850190849080828437600092019190915250889250614eda915050565b86612625828888600019810181811061220f57fe5b10156126625760405162461bcd60e51b815260040180806020018281038252602981526020018061590f6029913960400191505060405180910390fd5b505b50505050505050565b80428110156126b1576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016858560001981018181106126eb57fe5b905060200201356001600160a01b03166001600160a01b031614612744576040805162461bcd60e51b815260206004820152601b602482015260008051602061595b833981519152604482015290519081900360640190fd5b6127548585600081811061207657fe5b612792858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614eda915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b1580156127fc57600080fd5b505afa158015612810573d6000803e3d6000fd5b505050506040513d602081101561282657600080fd5b50519050868110156128695760405162461bcd60e51b815260040180806020018281038252602981526020018061590f6029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156128cf57600080fd5b505af11580156128e3573d6000803e3d6000fd5b5050505060006128f282614da5565b60015490915061290b906001600160a01b031682614425565b808203915061291a8583614425565b505050505050505050565b6060814281101561296b576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106129a257fe5b905060200201356001600160a01b03166001600160a01b0316146129fb576040805162461bcd60e51b815260206004820152601b602482015260008051602061595b833981519152604482015290519081900360640190fd5b612a597f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460d92505050565b91508682600184510381518110612a6c57fe5b60200260200101511015612ab15760405162461bcd60e51b815260040180806020018281038252602981526020018061590f6029913960400191505060405180910390fd5b6000612abc34614da5565b600154909150612ad5906001600160a01b031682614425565b8083600081518110612ae357fe5b6020026020010181815103915081815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db084600081518110612b3157fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b6457600080fd5b505af1158015612b78573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612bdd7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106113ae57fe5b85600081518110612bea57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612c4157600080fd5b505af1158015612c55573d6000803e3d6000fd5b505050506040513d6020811015612c6b57600080fd5b5051612c7357fe5b612cb2838888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a92506149dd915050565b505095945050505050565b60006110ac848484615235565b60608142811015612d10576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b612d6e7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250614c1d92505050565b91508682600081518110612d7e57fe5b60200260200101511115612dc35760405162461bcd60e51b81526004018080602001828103825260258152602001806159e56025913960400191505060405180910390fd5b6002600087876000818110612dd457fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff1615612e52576000612e1e83600081518110612e1157fe5b6020026020010151614da5565b9050612e308787600081811061185657fe5b8083600081518110612e3e57fe5b602002602001018181510391508181525050505b612e628686600081811061136c57fe5b6002600087876000818110612e7357fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff1615612edd57611925828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506149dd915050565b6002600087876000198101818110612ef157fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff1615611b2c576060612f4f7f00000000000000000000000000000000000000000000000000000000000000008460008151811061199c57fe5b9050612f90818888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506149dd915050565b611a5f87876000198101818110612fa357fe5b905060200201356001600160a01b0316868b6142c2565b6000546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006110ac848484615318565b60008142811015613040576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b61306f887f00000000000000000000000000000000000000000000000000000000000000008989893089613668565b604080516370a0823160e01b815230600482015290519194506130f392508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156130c257600080fd5b505afa1580156130d6573d6000803e3d6000fd5b505050506040513d60208110156130ec57600080fd5b50516142c2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561315957600080fd5b505af115801561316d573d6000803e3d6000fd5b50505050611ba08483614425565b6000546001600160a01b031633146131da576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561323a57600080fd5b505af115801561324e573d6000803e3d6000fd5b505050506040513d602081101561326457600080fd5b5050505050565b6001546001600160a01b031681565b80428110156132be576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106132f557fe5b905060200201356001600160a01b03166001600160a01b03161461334e576040805162461bcd60e51b815260206004820152601b602482015260008051602061595b833981519152604482015290519081900360640190fd5b34600061335a82614da5565b600154909150613373906001600160a01b031682614425565b80820391507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156133d357600080fd5b505af11580156133e7573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61344c7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106113ae57fe5b846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561349c57600080fd5b505af11580156134b0573d6000803e3d6000fd5b505050506040513d60208110156134c657600080fd5b50516134ce57fe5b6000878760001981018181106134e057fe5b905060200201356001600160a01b03166001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561354557600080fd5b505afa158015613559573d6000803e3d6000fd5b505050506040513d602081101561356f57600080fd5b50516040805160208a810282810182019093528a82529293506135b19290918b918b9182918501908490808284376000920191909152508a9250614eda915050565b8861362b828a8a60001981018181106135c657fe5b905060200201356001600160a01b03166001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561227457600080fd5b101561291a5760405162461bcd60e51b815260040180806020018281038252602981526020018061590f6029913960400191505060405180910390fd5b60008082428110156136af576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b60006136dc7f00000000000000000000000000000000000000000000000000000000000000008c8c6147c1565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561373757600080fd5b505af115801561374b573d6000803e3d6000fd5b505050506040513d602081101561376157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156137ae57600080fd5b505af11580156137c2573d6000803e3d6000fd5b505050506040513d60408110156137d857600080fd5b508051602090910151909250905060006137f28e8e6153c4565b509050806001600160a01b03168e6001600160a01b031614613815578183613818565b82825b90975095508a87101561385c5760405162461bcd60e51b815260040180806020018281038252602481526020018061597b6024913960400191505060405180910390fd5b8986101561389b5760405162461bcd60e51b8152600401808060200182810382526024815260200180615a546024913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b0316331461391e576040805162461bcd60e51b815260206004820152600c60248201526b3b30b634b21031b0b63632b960a11b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b60606115fe7f0000000000000000000000000000000000000000000000000000000000000000848461460d565b60008060006139c67f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006147c1565b90506000876139d5578c6139d9565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015613a4f57600080fd5b505af1158015613a63573d6000803e3d6000fd5b50505050613a758e8e8e8e8e8e610eed565b909f909e509c50505050505050505050505050565b60008060008342811015613ad3576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b613ae18c8c8c8c8c8c6154a2565b90945092506000613b137f00000000000000000000000000000000000000000000000000000000000000008e8e6147c1565b9050613b218d338388614880565b613b2d8c338387614880565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015613b8557600080fd5b505af1158015613b99573d6000803e3d6000fd5b505050506040513d6020811015613baf57600080fd5b5051949d939c50939a509198505050505050505050565b6000546001600160a01b03163314613c14576040805162461bcd60e51b815260206004820152600c60248201526b3b30b634b21031b0b63632b960a11b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060008342811015613c7f576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b613cad8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6154a2565b90945092506000613cff7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006147c1565b9050613d0d8b338388614880565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015613d6857600080fd5b505af1158015613d7c573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613e0157600080fd5b505af1158015613e15573d6000803e3d6000fd5b505050506040513d6020811015613e2b57600080fd5b5051613e3357fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015613e8b57600080fd5b505af1158015613e9f573d6000803e3d6000fd5b505050506040513d6020811015613eb557600080fd5b5051925034841015613ecd57613ecd33853403614425565b505096509650969350505050565b60608142811015613f21576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110613f5857fe5b905060200201356001600160a01b03166001600160a01b031614613fb1576040805162461bcd60e51b815260206004820152601b602482015260008051602061595b833981519152604482015290519081900360640190fd5b61400f7f000000000000000000000000000000000000000000000000000000000000000088888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250614c1d92505050565b9150348260008151811061401f57fe5b602002602001015111156140645760405162461bcd60e51b81526004018080602001828103825260258152602001806159e56025913960400191505060405180910390fd5b60008260008151811061407357fe5b60200260200101519050600061408f84600081518110612e1157fe5b6001549091506140a8906001600160a01b031682614425565b80846000815181106140b657fe5b6020026020010181815103915081815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08560008151811061410457fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561413757600080fd5b505af115801561414b573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6141cd7f00000000000000000000000000000000000000000000000000000000000000008b8b60008181106141b057fe5b905060200201356001600160a01b03168c8c60018181106113cb57fe5b866000815181106141da57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561423157600080fd5b505af1158015614245573d6000803e3d6000fd5b505050506040513d602081101561425b57600080fd5b505161426357fe5b6142a2848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b92506149dd915050565b813411156142b6576142b633833403614425565b50505095945050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b6020831061433f5780518252601f199092019160209182019101614320565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146143a1576040519150601f19603f3d011682016040523d82523d6000602084013e6143a6565b606091505b50915091508180156143d45750805115806143d457508080602001905160208110156143d157600080fd5b50515b613264576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106144715780518252601f199092019160209182019101614452565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146144d3576040519150601f19603f3d011682016040523d82523d6000602084013e6144d8565b606091505b50509050806145185760405162461bcd60e51b81526004018080602001828103825260238152602001806159c26023913960400191505060405180910390fd5b505050565b600080841161455d5760405162461bcd60e51b815260040180806020018281038252602981526020018061589c6029913960400191505060405180910390fd5b60008311801561456d5750600082115b6145a85760405162461bcd60e51b8152600401808060200182810382526026815260200180615a0a6026913960400191505060405180910390fd5b60006145bc856126f763ffffffff61571616565b905060006145d0828563ffffffff61571616565b905060006145f6836145ea8861271063ffffffff61571616565b9063ffffffff61577916565b905080828161460157fe5b04979650505050505050565b6060600282511015614666576040805162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561467e57600080fd5b506040519080825280602002602001820160405280156146a8578160200160208202803683370190505b50905082816000815181106146b957fe5b60200260200101818152505060005b60018351038110156147b95760008061470b878685815181106146e757fe5b60200260200101518786600101815181106146fe57fe5b60200260200101516157c8565b915091508260001415614775576147556103e86147466103e087878151811061473057fe5b602002602001015161571690919063ffffffff16565b8161474d57fe5b04838361451d565b84846001018151811061476457fe5b6020026020010181815250506147af565b61479384848151811061478457fe5b6020026020010151838361451d565b8484600101815181106147a257fe5b6020026020010181815250505b50506001016146c8565b509392505050565b60008060006147d085856153c4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527efb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106149055780518252601f1990920191602091820191016148e6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614967576040519150601f19603f3d011682016040523d82523d6000602084013e61496c565b606091505b509150915081801561499a57508051158061499a575080806020019051602081101561499757600080fd5b50515b6149d55760405162461bcd60e51b8152600401808060200182810382526024815260200180615a306024913960400191505060405180910390fd5b505050505050565b60005b6001835103811015611157576000808483815181106149fb57fe5b6020026020010151858460010181518110614a1257fe5b6020026020010151915091506000614a2a83836153c4565b5090506000878560010181518110614a3e57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b031614614a6c57826000614a70565b6000835b91509150600060028a51038810614a875788614ac8565b614ac87f0000000000000000000000000000000000000000000000000000000000000000878c8b60020181518110614abb57fe5b60200260200101516147c1565b9050614af57f000000000000000000000000000000000000000000000000000000000000000088886147c1565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015614b32576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614ba3578181015183820152602001614b8b565b50505050905090810190601f168015614bd05780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614bf257600080fd5b505af1158015614c06573d6000803e3d6000fd5b5050600190990198506149e0975050505050505050565b6060600282511015614c76576040805162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015614c8e57600080fd5b50604051908082528060200260200182016040528015614cb8578160200160208202803683370190505b5090508281600183510381518110614ccc57fe5b60209081029190910101528151600019015b8015614d5557600080614d0e87866001860381518110614cfa57fe5b60200260200101518786815181106146fe57fe5b91509150614d30848481518110614d2157fe5b60200260200101518383615235565b846001850381518110614d3f57fe5b6020908102919091010152505060001901614cde565b50614d8560016103e0614d716103e88560008151811061473057fe5b81614d7857fe5b049063ffffffff61577916565b81600081518110614d9257fe5b6020026020010181815250509392505050565b60006103e8614dbb83600863ffffffff61571616565b81614dc257fe5b0492915050565b6060600282511015614e22576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff81118015614e3a57600080fd5b50604051908082528060200260200182016040528015614e64578160200160208202803683370190505b5090508281600081518110614e7557fe5b60200260200101818152505060005b60018351038110156147b957600080614ea3878685815181106146e757fe5b91509150614eb684848151811061478457fe5b848460010181518110614ec557fe5b60209081029190910101525050600101614e84565b60005b600183510381101561451857600080848381518110614ef857fe5b6020026020010151858460010181518110614f0f57fe5b6020026020010151915091506000614f2783836153c4565b5090506000614f577f000000000000000000000000000000000000000000000000000000000000000085856147c1565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614f9857600080fd5b505afa158015614fac573d6000803e3d6000fd5b505050506040513d6060811015614fc257600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614614ff8578284614ffb565b83835b91509150615059828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561227457600080fd5b955061506686838361451d565b945050505050600080856001600160a01b0316886001600160a01b03161461509057826000615094565b6000835b91509150600060028c51038a106150ab578a6150df565b6150df7f0000000000000000000000000000000000000000000000000000000000000000898e8d60020181518110614abb57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015615169578181015183820152602001615151565b50505050905090810190601f1680156151965780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156151b857600080fd5b505af11580156151cc573d6000803e3d6000fd5b50506001909b019a50614edd9950505050505050505050565b80820382811115611601576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008084116152755760405162461bcd60e51b815260040180806020018281038252602a8152602001806158c5602a913960400191505060405180910390fd5b6000831180156152855750600082115b6152c05760405162461bcd60e51b8152600401808060200182810382526026815260200180615a0a6026913960400191505060405180910390fd5b60006152e46127106152d8868863ffffffff61571616565b9063ffffffff61571616565b905060006152fe6126f76152d8868963ffffffff6151e516565b905061530e6001828481614d7857fe5b9695505050505050565b60008084116153585760405162461bcd60e51b815260040180806020018281038252602381526020018061599f6023913960400191505060405180910390fd5b6000831180156153685750600082115b6153a35760405162461bcd60e51b8152600401808060200182810382526026815260200180615a0a6026913960400191505060405180910390fd5b826153b4858463ffffffff61571616565b816153bb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156154185760405162461bcd60e51b81526004018080602001828103825260238152602001806159386023913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b03161061543857828461543b565b83835b90925090506001600160a01b03821661549b576040805162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561551c57600080fd5b505afa158015615530573d6000803e3d6000fd5b505050506040513d602081101561554657600080fd5b50516001600160a01b031614156155f957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156155cc57600080fd5b505af11580156155e0573d6000803e3d6000fd5b505050506040513d60208110156155f657600080fd5b50505b6000806156277f00000000000000000000000000000000000000000000000000000000000000008b8b6157c8565b91509150816000148015615639575080155b1561564957879350869250615709565b6000615656898484615318565b90508781116156a9578581101561569e5760405162461bcd60e51b8152600401808060200182810382526024815260200180615a546024913960400191505060405180910390fd5b889450925082615707565b60006156b6898486615318565b9050898111156156c257fe5b878110156157015760405162461bcd60e51b815260040180806020018281038252602481526020018061597b6024913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806157315750508082028282828161572e57fe5b04145b611601576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611601576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006157d785856153c4565b5090506157e58686866147c1565b506000806157f48888886147c1565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561582c57600080fd5b505afa158015615840573d6000803e3d6000fd5b505050506040513d606081101561585657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b038781169084161461588957808261588c565b81815b9099909850965050505050505056fe50616e63616b654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5450616e63616b65526f757465723a20455850495245440000000000000000000050616e63616b65526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5450616e63616b654c6962726172793a204944454e544943414c5f41444452455353455350616e63616b65526f757465723a20494e56414c49445f50415448000000000050616e63616b65526f757465723a20494e53554646494349454e545f415f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454450616e63616b65526f757465723a204558434553534956455f494e5055545f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454450616e63616b65526f757465723a20494e53554646494349454e545f425f414d4f554e54a26469706673582212209b559f038c5ceaffc78abb863c76df8a9a5ff1302f25c23a01674dd742044dd064736f6c63430006060033000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c73000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
Deployed Bytecode
0x6080604052600436106101e75760003560e01c80638da5cb5b11610102578063c45a015511610095578063e8e3370011610064578063e8e3370014610d70578063efdcd97414610df0578063f305d71914610e23578063fb3bdb4114610e6957610220565b8063c45a015514610bf8578063cb03ffaa14610c0d578063d06ca61f14610c48578063ded9382a14610cfd57610220565b8063b2118a8d116100d1578063b2118a8d14610abf578063b3f0067414610b02578063b6f9de9514610b17578063baa2abde14610b9b57610220565b80638da5cb5b146109f0578063ad5c464814610a21578063ad615dec14610a36578063af2979eb14610a6c57610220565b806338ed17391161017a578063791ac94711610149578063791ac9471461080a5780637ff36ab5146108a057806385f8c259146109245780638803dbee1461095a57610220565b806338ed1739146105d55780634a25d94a1461066b5780635b0d5984146107015780635c11d7951461077457610220565b806313af4035116101b657806313af40351461038957806318cbafe5146103bc5780631f00ca74146104a25780632195995c1461055757610220565b806302751cec1461022557806304824e7014610291578063054d50d4146102c45780630adadcaa1461030c57610220565b3661022057336001600160a01b037f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c161461021e57fe5b005b600080fd5b34801561023157600080fd5b50610278600480360360c081101561024857600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610eed565b6040805192835260208301919091528051918290030190f35b34801561029d57600080fd5b5061021e600480360360208110156102b457600080fd5b50356001600160a01b0316611007565b3480156102d057600080fd5b506102fa600480360360608110156102e757600080fd5b508035906020810135906040013561109f565b60408051918252519081900360200190f35b34801561031857600080fd5b5061021e6004803603604081101561032f57600080fd5b810190602081018135600160201b81111561034957600080fd5b82018360208201111561035b57600080fd5b803590602001918460208302840111600160201b8311171561037c57600080fd5b91935091503515156110b4565b34801561039557600080fd5b5061021e600480360360208110156103ac57600080fd5b50356001600160a01b031661115d565b3480156103c857600080fd5b50610452600480360360a08110156103df57600080fd5b813591602081013591810190606081016040820135600160201b81111561040557600080fd5b82018360208201111561041757600080fd5b803590602001918460208302840111600160201b8311171561043857600080fd5b91935091506001600160a01b0381351690602001356111cd565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561048e578181015183820152602001610476565b505050509050019250505060405180910390f35b3480156104ae57600080fd5b50610452600480360360408110156104c557600080fd5b81359190810190604081016020820135600160201b8111156104e657600080fd5b8201836020820111156104f857600080fd5b803590602001918460208302840111600160201b8311171561051957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506115d1945050505050565b34801561056357600080fd5b50610278600480360361016081101561057b57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611607565b3480156105e157600080fd5b50610452600480360360a08110156105f857600080fd5b813591602081013591810190606081016040820135600160201b81111561061e57600080fd5b82018360208201111561063057600080fd5b803590602001918460208302840111600160201b8311171561065157600080fd5b91935091506001600160a01b038135169060200135611701565b34801561067757600080fd5b50610452600480360360a081101561068e57600080fd5b813591602081013591810190606081016040820135600160201b8111156106b457600080fd5b8201836020820111156106c657600080fd5b803590602001918460208302840111600160201b831117156106e757600080fd5b91935091506001600160a01b038135169060200135611bab565b34801561070d57600080fd5b506102fa600480360361014081101561072557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611eb6565b34801561078057600080fd5b5061021e600480360360a081101561079757600080fd5b813591602081013591810190606081016040820135600160201b8111156107bd57600080fd5b8201836020820111156107cf57600080fd5b803590602001918460208302840111600160201b831117156107f057600080fd5b91935091506001600160a01b038135169060200135611fc4565b34801561081657600080fd5b5061021e600480360360a081101561082d57600080fd5b813591602081013591810190606081016040820135600160201b81111561085357600080fd5b82018360208201111561086557600080fd5b803590602001918460208302840111600160201b8311171561088657600080fd5b91935091506001600160a01b03813516906020013561266d565b610452600480360360808110156108b657600080fd5b81359190810190604081016020820135600160201b8111156108d757600080fd5b8201836020820111156108e957600080fd5b803590602001918460208302840111600160201b8311171561090a57600080fd5b91935091506001600160a01b038135169060200135612925565b34801561093057600080fd5b506102fa6004803603606081101561094757600080fd5b5080359060208101359060400135612cbd565b34801561096657600080fd5b50610452600480360360a081101561097d57600080fd5b813591602081013591810190606081016040820135600160201b8111156109a357600080fd5b8201836020820111156109b557600080fd5b803590602001918460208302840111600160201b831117156109d657600080fd5b91935091506001600160a01b038135169060200135612cca565b3480156109fc57600080fd5b50610a05612fba565b604080516001600160a01b039092168252519081900360200190f35b348015610a2d57600080fd5b50610a05612fc9565b348015610a4257600080fd5b506102fa60048036036060811015610a5957600080fd5b5080359060208101359060400135612fed565b348015610a7857600080fd5b506102fa600480360360c0811015610a8f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612ffa565b348015610acb57600080fd5b5061021e60048036036060811015610ae257600080fd5b506001600160a01b0381358116916020810135909116906040013561317b565b348015610b0e57600080fd5b50610a0561326b565b61021e60048036036080811015610b2d57600080fd5b81359190810190604081016020820135600160201b811115610b4e57600080fd5b820183602082011115610b6057600080fd5b803590602001918460208302840111600160201b83111715610b8157600080fd5b91935091506001600160a01b03813516906020013561327a565b348015610ba757600080fd5b50610278600480360360e0811015610bbe57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135613668565b348015610c0457600080fd5b50610a056138ac565b348015610c1957600080fd5b5061021e60048036036040811015610c3057600080fd5b506001600160a01b03813516906020013515156138d0565b348015610c5457600080fd5b5061045260048036036040811015610c6b57600080fd5b81359190810190604081016020820135600160201b811115610c8c57600080fd5b820183602082011115610c9e57600080fd5b803590602001918460208302840111600160201b83111715610cbf57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613949945050505050565b348015610d0957600080fd5b506102786004803603610140811015610d2157600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135613976565b348015610d7c57600080fd5b50610dd26004803603610100811015610d9457600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613a8a565b60408051938452602084019290925282820152519081900360600190f35b348015610dfc57600080fd5b5061021e60048036036020811015610e1357600080fd5b50356001600160a01b0316613bc6565b610dd2600480360360c0811015610e3957600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135613c36565b61045260048036036080811015610e7f57600080fd5b81359190810190604081016020820135600160201b811115610ea057600080fd5b820183602082011115610eb257600080fd5b803590602001918460208302840111600160201b83111715610ed357600080fd5b91935091506001600160a01b038135169060200135613edb565b6000808242811015610f34576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b610f63897f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8a8a8a308a613668565b9093509150610f738986856142c2565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610fd957600080fd5b505af1158015610fed573d6000803e3d6000fd5b50505050610ffb8583614425565b50965096945050505050565b6000546001600160a01b03163314611066576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6040516001600160a01b038216904780156108fc02916000818181858888f1935050505015801561109b573d6000803e3d6000fd5b5050565b60006110ac84848461451d565b949350505050565b6000546001600160a01b03163314611102576040805162461bcd60e51b815260206004820152600c60248201526b3b30b634b21031b0b63632b960a11b604482015290519081900360640190fd5b60005b8281101561115757816002600086868581811061111e57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101611105565b50505050565b6000546001600160a01b031633146111ab576040805162461bcd60e51b815260206004820152600c60248201526b3b30b634b21031b0b63632b960a11b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60608142811015611213576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c168686600019810181811061124d57fe5b905060200201356001600160a01b03166001600160a01b0316146112a6576040805162461bcd60e51b815260206004820152601b602482015260008051602061595b833981519152604482015290519081900360640190fd5b6113047f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c738988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460d92505050565b9150868260018451038151811061131757fe5b6020026020010151101561135c5760405162461bcd60e51b815260040180806020018281038252602981526020018061590f6029913960400191505060405180910390fd5b6113fa8686600081811061136c57fe5b905060200201356001600160a01b0316336113e07f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c738a8a60008181106113ae57fe5b905060200201356001600160a01b03168b8b60018181106113cb57fe5b905060200201356001600160a01b03166147c1565b856000815181106113ed57fe5b6020026020010151614880565b611439828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506149dd915050565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316632e1a7d4d8360018551038151811061147857fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156114b657600080fd5b505af11580156114ca573d6000803e3d6000fd5b505050506114ef84836001855103815181106114e257fe5b6020026020010151614425565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c16916370a0823191602480820192602092909190829003018186803b15801561155957600080fd5b505afa15801561156d573d6000803e3d6000fd5b505050506040513d602081101561158357600080fd5b5051905080156115c5576001546115c5907f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c906001600160a01b0316836142c2565b50509695505050505050565b60606115fe7f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c738484614c1d565b90505b92915050565b60008060006116377f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c738f8f6147c1565b9050600087611646578c61164a565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156116c057600080fd5b505af11580156116d4573d6000803e3d6000fd5b505050506116e78f8f8f8f8f8f8f613668565b809450819550505050509b509b9950505050505050505050565b60608142811015611747576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b6117a57f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c738988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460d92505050565b915086826001845103815181106117b857fe5b602002602001015110156117fd5760405162461bcd60e51b815260040180806020018281038252602981526020018061590f6029913960400191505060405180910390fd5b600260008787600081811061180e57fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff161561189a57600061184489614da5565b90506118788787600081811061185657fe5b6001546001600160a01b03602090920293909301358116923392501684614880565b808360008151811061188657fe5b602002602001018181510391508181525050505b6118aa8686600081811061136c57fe5b60026000878760008181106118bb57fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff161561192a57611925828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506149dd915050565b611ba0565b600260008787600019810181811061193e57fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff1615611b2c5760606119dd7f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c738460008151811061199c57fe5b6020026020010151898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250614dc992505050565b9050611a1e818888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506149dd915050565b611a5f87876000198101818110611a3157fe5b905060200201356001600160a01b03168685600187510381518110611a5257fe5b60200260200101516142c2565b600087876000198101818110611a7157fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b158015611abd57600080fd5b505afa158015611ad1573d6000803e3d6000fd5b505050506040513d6020811015611ae757600080fd5b505190508015611b2557611b2588886000198101818110611b0457fe5b6001546001600160a01b0360209092029390930135811692169050836142c2565b5050611ba0565b6060611b5f7f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c738460008151811061199c57fe5b90506115c5818888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a92506149dd915050565b509695505050505050565b60608142811015611bf1576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c1686866000198101818110611c2b57fe5b905060200201356001600160a01b03166001600160a01b031614611c84576040805162461bcd60e51b815260206004820152601b602482015260008051602061595b833981519152604482015290519081900360640190fd5b611ce27f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c7389888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250614c1d92505050565b91508682600081518110611cf257fe5b60200260200101511115611d375760405162461bcd60e51b81526004018080602001828103825260258152602001806159e56025913960400191505060405180910390fd5b611d478686600081811061136c57fe5b611db97f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c7383600081518110611d7857fe5b6020026020010151888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250614dc992505050565b9150611dfa828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506149dd915050565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316632e1a7d4d83600185510381518110611e3957fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611e7757600080fd5b505af1158015611e8b573d6000803e3d6000fd5b50505050611e998489614425565b4780156115c5576001546115c5906001600160a01b031682614425565b600080611f047f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c738d7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6147c1565b9050600086611f13578b611f17565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015611f8d57600080fd5b505af1158015611fa1573d6000803e3d6000fd5b50505050611fb38d8d8d8d8d8d612ffa565b9d9c50505050505050505050505050565b8042811015612008576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b600260008686600081811061201957fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff161561206657600061204f88614da5565b90506120618686600081811061185657fe5b909603955b6120db8585600081811061207657fe5b905060200201356001600160a01b0316336120d57f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c73898960008181106120b857fe5b905060200201356001600160a01b03168a8a60018181106113cb57fe5b8a614880565b60026000868660008181106120ec57fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff16156122ef5760008585600019810181811061212957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561218e57600080fd5b505afa1580156121a2573d6000803e3d6000fd5b505050506040513d60208110156121b857600080fd5b505160408051602088810282810182019093528882529293506121fa929091899189918291850190849080828437600092019190915250889250614eda915050565b866122ac828888600019810181811061220f57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561227457600080fd5b505afa158015612288573d6000803e3d6000fd5b505050506040513d602081101561229e57600080fd5b50519063ffffffff6151e516565b10156122e95760405162461bcd60e51b815260040180806020018281038252602981526020018061590f6029913960400191505060405180910390fd5b50612664565b600260008686600019810181811061230357fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff161561252d5760008585600019810181811061234057fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561238c57600080fd5b505afa1580156123a0573d6000803e3d6000fd5b505050506040513d60208110156123b657600080fd5b505160408051602088810282810182019093528882529293506123f8929091899189918291850190849080828437600092019190915250309250614eda915050565b60008686600019810181811061240a57fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561245657600080fd5b505afa15801561246a573d6000803e3d6000fd5b505050506040513d602081101561248057600080fd5b5051905087612495828463ffffffff6151e516565b10156124d25760405162461bcd60e51b815260040180806020018281038252602981526020018061590f6029913960400191505060405180910390fd5b60006124df838303614da5565b90506124f488886000198101818110611b0457fe5b8282038190036125248989600019810181811061250d57fe5b905060200201356001600160a01b031688836142c2565b50505050612664565b60008585600019810181811061253f57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156125a457600080fd5b505afa1580156125b8573d6000803e3d6000fd5b505050506040513d60208110156125ce57600080fd5b50516040805160208881028281018201909352888252929350612610929091899189918291850190849080828437600092019190915250889250614eda915050565b86612625828888600019810181811061220f57fe5b10156126625760405162461bcd60e51b815260040180806020018281038252602981526020018061590f6029913960400191505060405180910390fd5b505b50505050505050565b80428110156126b1576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c16858560001981018181106126eb57fe5b905060200201356001600160a01b03166001600160a01b031614612744576040805162461bcd60e51b815260206004820152601b602482015260008051602061595b833981519152604482015290519081900360640190fd5b6127548585600081811061207657fe5b612792858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614eda915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c16916370a0823191602480820192602092909190829003018186803b1580156127fc57600080fd5b505afa158015612810573d6000803e3d6000fd5b505050506040513d602081101561282657600080fd5b50519050868110156128695760405162461bcd60e51b815260040180806020018281038252602981526020018061590f6029913960400191505060405180910390fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156128cf57600080fd5b505af11580156128e3573d6000803e3d6000fd5b5050505060006128f282614da5565b60015490915061290b906001600160a01b031682614425565b808203915061291a8583614425565b505050505050505050565b6060814281101561296b576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316868660008181106129a257fe5b905060200201356001600160a01b03166001600160a01b0316146129fb576040805162461bcd60e51b815260206004820152601b602482015260008051602061595b833981519152604482015290519081900360640190fd5b612a597f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c733488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460d92505050565b91508682600184510381518110612a6c57fe5b60200260200101511015612ab15760405162461bcd60e51b815260040180806020018281038252602981526020018061590f6029913960400191505060405180910390fd5b6000612abc34614da5565b600154909150612ad5906001600160a01b031682614425565b8083600081518110612ae357fe5b6020026020010181815103915081815250507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663d0e30db084600081518110612b3157fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b6457600080fd5b505af1158015612b78573d6000803e3d6000fd5b50505050507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663a9059cbb612bdd7f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c738a8a60008181106113ae57fe5b85600081518110612bea57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612c4157600080fd5b505af1158015612c55573d6000803e3d6000fd5b505050506040513d6020811015612c6b57600080fd5b5051612c7357fe5b612cb2838888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a92506149dd915050565b505095945050505050565b60006110ac848484615235565b60608142811015612d10576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b612d6e7f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c7389888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250614c1d92505050565b91508682600081518110612d7e57fe5b60200260200101511115612dc35760405162461bcd60e51b81526004018080602001828103825260258152602001806159e56025913960400191505060405180910390fd5b6002600087876000818110612dd457fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff1615612e52576000612e1e83600081518110612e1157fe5b6020026020010151614da5565b9050612e308787600081811061185657fe5b8083600081518110612e3e57fe5b602002602001018181510391508181525050505b612e628686600081811061136c57fe5b6002600087876000818110612e7357fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff1615612edd57611925828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506149dd915050565b6002600087876000198101818110612ef157fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff1615611b2c576060612f4f7f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c738460008151811061199c57fe5b9050612f90818888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506149dd915050565b611a5f87876000198101818110612fa357fe5b905060200201356001600160a01b0316868b6142c2565b6000546001600160a01b031681565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c81565b60006110ac848484615318565b60008142811015613040576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b61306f887f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8989893089613668565b604080516370a0823160e01b815230600482015290519194506130f392508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156130c257600080fd5b505afa1580156130d6573d6000803e3d6000fd5b505050506040513d60208110156130ec57600080fd5b50516142c2565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561315957600080fd5b505af115801561316d573d6000803e3d6000fd5b50505050611ba08483614425565b6000546001600160a01b031633146131da576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561323a57600080fd5b505af115801561324e573d6000803e3d6000fd5b505050506040513d602081101561326457600080fd5b5050505050565b6001546001600160a01b031681565b80428110156132be576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316858560008181106132f557fe5b905060200201356001600160a01b03166001600160a01b03161461334e576040805162461bcd60e51b815260206004820152601b602482015260008051602061595b833981519152604482015290519081900360640190fd5b34600061335a82614da5565b600154909150613373906001600160a01b031682614425565b80820391507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156133d357600080fd5b505af11580156133e7573d6000803e3d6000fd5b50505050507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663a9059cbb61344c7f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c738a8a60008181106113ae57fe5b846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561349c57600080fd5b505af11580156134b0573d6000803e3d6000fd5b505050506040513d60208110156134c657600080fd5b50516134ce57fe5b6000878760001981018181106134e057fe5b905060200201356001600160a01b03166001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561354557600080fd5b505afa158015613559573d6000803e3d6000fd5b505050506040513d602081101561356f57600080fd5b50516040805160208a810282810182019093528a82529293506135b19290918b918b9182918501908490808284376000920191909152508a9250614eda915050565b8861362b828a8a60001981018181106135c657fe5b905060200201356001600160a01b03166001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561227457600080fd5b101561291a5760405162461bcd60e51b815260040180806020018281038252602981526020018061590f6029913960400191505060405180910390fd5b60008082428110156136af576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b60006136dc7f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c738c8c6147c1565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561373757600080fd5b505af115801561374b573d6000803e3d6000fd5b505050506040513d602081101561376157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156137ae57600080fd5b505af11580156137c2573d6000803e3d6000fd5b505050506040513d60408110156137d857600080fd5b508051602090910151909250905060006137f28e8e6153c4565b509050806001600160a01b03168e6001600160a01b031614613815578183613818565b82825b90975095508a87101561385c5760405162461bcd60e51b815260040180806020018281038252602481526020018061597b6024913960400191505060405180910390fd5b8986101561389b5760405162461bcd60e51b8152600401808060200182810382526024815260200180615a546024913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c7381565b6000546001600160a01b0316331461391e576040805162461bcd60e51b815260206004820152600c60248201526b3b30b634b21031b0b63632b960a11b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b60606115fe7f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c73848461460d565b60008060006139c67f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c738e7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6147c1565b90506000876139d5578c6139d9565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015613a4f57600080fd5b505af1158015613a63573d6000803e3d6000fd5b50505050613a758e8e8e8e8e8e610eed565b909f909e509c50505050505050505050505050565b60008060008342811015613ad3576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b613ae18c8c8c8c8c8c6154a2565b90945092506000613b137f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c738e8e6147c1565b9050613b218d338388614880565b613b2d8c338387614880565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015613b8557600080fd5b505af1158015613b99573d6000803e3d6000fd5b505050506040513d6020811015613baf57600080fd5b5051949d939c50939a509198505050505050505050565b6000546001600160a01b03163314613c14576040805162461bcd60e51b815260206004820152600c60248201526b3b30b634b21031b0b63632b960a11b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060008342811015613c7f576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b613cad8a7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8b348c8c6154a2565b90945092506000613cff7f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c738c7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6147c1565b9050613d0d8b338388614880565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015613d6857600080fd5b505af1158015613d7c573d6000803e3d6000fd5b50505050507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613e0157600080fd5b505af1158015613e15573d6000803e3d6000fd5b505050506040513d6020811015613e2b57600080fd5b5051613e3357fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015613e8b57600080fd5b505af1158015613e9f573d6000803e3d6000fd5b505050506040513d6020811015613eb557600080fd5b5051925034841015613ecd57613ecd33853403614425565b505096509650969350505050565b60608142811015613f21576040805162461bcd60e51b815260206004820152601660248201526000805160206158ef833981519152604482015290519081900360640190fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031686866000818110613f5857fe5b905060200201356001600160a01b03166001600160a01b031614613fb1576040805162461bcd60e51b815260206004820152601b602482015260008051602061595b833981519152604482015290519081900360640190fd5b61400f7f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c7388888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250614c1d92505050565b9150348260008151811061401f57fe5b602002602001015111156140645760405162461bcd60e51b81526004018080602001828103825260258152602001806159e56025913960400191505060405180910390fd5b60008260008151811061407357fe5b60200260200101519050600061408f84600081518110612e1157fe5b6001549091506140a8906001600160a01b031682614425565b80846000815181106140b657fe5b6020026020010181815103915081815250507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663d0e30db08560008151811061410457fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561413757600080fd5b505af115801561414b573d6000803e3d6000fd5b50505050507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663a9059cbb6141cd7f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c738b8b60008181106141b057fe5b905060200201356001600160a01b03168c8c60018181106113cb57fe5b866000815181106141da57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561423157600080fd5b505af1158015614245573d6000803e3d6000fd5b505050506040513d602081101561425b57600080fd5b505161426357fe5b6142a2848989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b92506149dd915050565b813411156142b6576142b633833403614425565b50505095945050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b6020831061433f5780518252601f199092019160209182019101614320565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146143a1576040519150601f19603f3d011682016040523d82523d6000602084013e6143a6565b606091505b50915091508180156143d45750805115806143d457508080602001905160208110156143d157600080fd5b50515b613264576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106144715780518252601f199092019160209182019101614452565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146144d3576040519150601f19603f3d011682016040523d82523d6000602084013e6144d8565b606091505b50509050806145185760405162461bcd60e51b81526004018080602001828103825260238152602001806159c26023913960400191505060405180910390fd5b505050565b600080841161455d5760405162461bcd60e51b815260040180806020018281038252602981526020018061589c6029913960400191505060405180910390fd5b60008311801561456d5750600082115b6145a85760405162461bcd60e51b8152600401808060200182810382526026815260200180615a0a6026913960400191505060405180910390fd5b60006145bc856126f763ffffffff61571616565b905060006145d0828563ffffffff61571616565b905060006145f6836145ea8861271063ffffffff61571616565b9063ffffffff61577916565b905080828161460157fe5b04979650505050505050565b6060600282511015614666576040805162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561467e57600080fd5b506040519080825280602002602001820160405280156146a8578160200160208202803683370190505b50905082816000815181106146b957fe5b60200260200101818152505060005b60018351038110156147b95760008061470b878685815181106146e757fe5b60200260200101518786600101815181106146fe57fe5b60200260200101516157c8565b915091508260001415614775576147556103e86147466103e087878151811061473057fe5b602002602001015161571690919063ffffffff16565b8161474d57fe5b04838361451d565b84846001018151811061476457fe5b6020026020010181815250506147af565b61479384848151811061478457fe5b6020026020010151838361451d565b8484600101815181106147a257fe5b6020026020010181815250505b50506001016146c8565b509392505050565b60008060006147d085856153c4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527efb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106149055780518252601f1990920191602091820191016148e6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614967576040519150601f19603f3d011682016040523d82523d6000602084013e61496c565b606091505b509150915081801561499a57508051158061499a575080806020019051602081101561499757600080fd5b50515b6149d55760405162461bcd60e51b8152600401808060200182810382526024815260200180615a306024913960400191505060405180910390fd5b505050505050565b60005b6001835103811015611157576000808483815181106149fb57fe5b6020026020010151858460010181518110614a1257fe5b6020026020010151915091506000614a2a83836153c4565b5090506000878560010181518110614a3e57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b031614614a6c57826000614a70565b6000835b91509150600060028a51038810614a875788614ac8565b614ac87f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c73878c8b60020181518110614abb57fe5b60200260200101516147c1565b9050614af57f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c7388886147c1565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015614b32576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614ba3578181015183820152602001614b8b565b50505050905090810190601f168015614bd05780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614bf257600080fd5b505af1158015614c06573d6000803e3d6000fd5b5050600190990198506149e0975050505050505050565b6060600282511015614c76576040805162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015614c8e57600080fd5b50604051908082528060200260200182016040528015614cb8578160200160208202803683370190505b5090508281600183510381518110614ccc57fe5b60209081029190910101528151600019015b8015614d5557600080614d0e87866001860381518110614cfa57fe5b60200260200101518786815181106146fe57fe5b91509150614d30848481518110614d2157fe5b60200260200101518383615235565b846001850381518110614d3f57fe5b6020908102919091010152505060001901614cde565b50614d8560016103e0614d716103e88560008151811061473057fe5b81614d7857fe5b049063ffffffff61577916565b81600081518110614d9257fe5b6020026020010181815250509392505050565b60006103e8614dbb83600863ffffffff61571616565b81614dc257fe5b0492915050565b6060600282511015614e22576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff81118015614e3a57600080fd5b50604051908082528060200260200182016040528015614e64578160200160208202803683370190505b5090508281600081518110614e7557fe5b60200260200101818152505060005b60018351038110156147b957600080614ea3878685815181106146e757fe5b91509150614eb684848151811061478457fe5b848460010181518110614ec557fe5b60209081029190910101525050600101614e84565b60005b600183510381101561451857600080848381518110614ef857fe5b6020026020010151858460010181518110614f0f57fe5b6020026020010151915091506000614f2783836153c4565b5090506000614f577f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c7385856147c1565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614f9857600080fd5b505afa158015614fac573d6000803e3d6000fd5b505050506040513d6060811015614fc257600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614614ff8578284614ffb565b83835b91509150615059828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561227457600080fd5b955061506686838361451d565b945050505050600080856001600160a01b0316886001600160a01b03161461509057826000615094565b6000835b91509150600060028c51038a106150ab578a6150df565b6150df7f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c73898e8d60020181518110614abb57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015615169578181015183820152602001615151565b50505050905090810190601f1680156151965780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156151b857600080fd5b505af11580156151cc573d6000803e3d6000fd5b50506001909b019a50614edd9950505050505050505050565b80820382811115611601576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008084116152755760405162461bcd60e51b815260040180806020018281038252602a8152602001806158c5602a913960400191505060405180910390fd5b6000831180156152855750600082115b6152c05760405162461bcd60e51b8152600401808060200182810382526026815260200180615a0a6026913960400191505060405180910390fd5b60006152e46127106152d8868863ffffffff61571616565b9063ffffffff61571616565b905060006152fe6126f76152d8868963ffffffff6151e516565b905061530e6001828481614d7857fe5b9695505050505050565b60008084116153585760405162461bcd60e51b815260040180806020018281038252602381526020018061599f6023913960400191505060405180910390fd5b6000831180156153685750600082115b6153a35760405162461bcd60e51b8152600401808060200182810382526026815260200180615a0a6026913960400191505060405180910390fd5b826153b4858463ffffffff61571616565b816153bb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156154185760405162461bcd60e51b81526004018080602001828103825260238152602001806159386023913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b03161061543857828461543b565b83835b90925090506001600160a01b03821661549b576040805162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c739092169163e6a4390591604480820192602092909190829003018186803b15801561551c57600080fd5b505afa158015615530573d6000803e3d6000fd5b505050506040513d602081101561554657600080fd5b50516001600160a01b031614156155f957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c739092169163c9c65396916044808201926020929091908290030181600087803b1580156155cc57600080fd5b505af11580156155e0573d6000803e3d6000fd5b505050506040513d60208110156155f657600080fd5b50505b6000806156277f000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c738b8b6157c8565b91509150816000148015615639575080155b1561564957879350869250615709565b6000615656898484615318565b90508781116156a9578581101561569e5760405162461bcd60e51b8152600401808060200182810382526024815260200180615a546024913960400191505060405180910390fd5b889450925082615707565b60006156b6898486615318565b9050898111156156c257fe5b878110156157015760405162461bcd60e51b815260040180806020018281038252602481526020018061597b6024913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806157315750508082028282828161572e57fe5b04145b611601576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611601576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006157d785856153c4565b5090506157e58686866147c1565b506000806157f48888886147c1565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561582c57600080fd5b505afa158015615840573d6000803e3d6000fd5b505050506040513d606081101561585657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b038781169084161461588957808261588c565b81815b9099909850965050505050505056fe50616e63616b654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5450616e63616b65526f757465723a20455850495245440000000000000000000050616e63616b65526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5450616e63616b654c6962726172793a204944454e544943414c5f41444452455353455350616e63616b65526f757465723a20494e56414c49445f50415448000000000050616e63616b65526f757465723a20494e53554646494349454e545f415f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454450616e63616b65526f757465723a204558434553534956455f494e5055545f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454450616e63616b65526f757465723a20494e53554646494349454e545f425f414d4f554e54a26469706673582212209b559f038c5ceaffc78abb863c76df8a9a5ff1302f25c23a01674dd742044dd064736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c73000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
-----Decoded View---------------
Arg [0] : _factory (address): 0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73
Arg [1] : _WETH (address): 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000ca143ce32fe78f1f7019d7d551a6402fc5350c73
Arg [1] : 000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
Deployed Bytecode Sourcemap
17323:24253:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18110:10;-1:-1:-1;;;;;18124:4:0;18110:18;;18103:26;;;;17323:24253;;12:1:-1;9;2:12;23062:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23062:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23062:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;41320:112;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41320:112:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;41320:112:0;-1:-1:-1;;;;;41320:112:0;;:::i;40267:260::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40267:260:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;40267:260:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18367:243;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18367:243:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;18367:243:0;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;18367:243:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;18367:243:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;18367:243:0;;-1:-1:-1;18367:243:0;-1:-1:-1;18367:243:0;;;;:::i;18781:131::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18781:131:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18781:131:0;-1:-1:-1;;;;;18781:131:0;;:::i;32513:1004::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32513:1004:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32513:1004:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32513:1004:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32513:1004:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32513:1004:0;;-1:-1:-1;32513:1004:0;-1:-1:-1;;;;;;32513:1004:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;32513:1004:0;;;;;;;;;;;;;;;;;41061:251;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41061:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;41061:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;41061:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;41061:251:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;41061:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;41061:251:0;;-1:-1:-1;41061:251:0;;-1:-1:-1;;;;;41061:251:0:i;23741:673::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23741:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23741:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27434:1609::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27434:1609:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27434:1609:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27434:1609:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27434:1609:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27434:1609:0;;-1:-1:-1;27434:1609:0;-1:-1:-1;;;;;;27434:1609:0;;;;;;;;:::i;31471:1036::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31471:1036:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31471:1036:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31471:1036:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31471:1036:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31471:1036:0;;-1:-1:-1;31471:1036:0;-1:-1:-1;;;;;;31471:1036:0;;;;;;;;:::i;25870:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25870:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;25870:714:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35883:2149::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35883:2149:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;35883:2149:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;35883:2149:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35883:2149:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35883:2149:0;;-1:-1:-1;35883:2149:0;-1:-1:-1;;;;;;35883:2149:0;;;;;;;;:::i;39035:994::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39035:994:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;39035:994:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;39035:994:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;39035:994:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;39035:994:0;;-1:-1:-1;39035:994:0;-1:-1:-1;;;;;;39035:994:0;;;;;;;;:::i;30618:847::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30618:847:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30618:847:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30618:847:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30618:847:0;;-1:-1:-1;30618:847:0;-1:-1:-1;;;;;;30618:847:0;;;;;;;;:::i;40535:259::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40535:259:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;40535:259:0;;;;;;;;;;;;:::i;29049:1563::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29049:1563:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29049:1563:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29049:1563:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29049:1563:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29049:1563:0;;-1:-1:-1;29049:1563:0;-1:-1:-1;;;;;;29049:1563:0;;;;;;;;:::i;17496:20::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17496:20:0;;;:::i;:::-;;;;-1:-1:-1;;;;;17496:20:0;;;;;;;;;;;;;;17449:38;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17449:38:0;;;:::i;40073:186::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40073:186:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;40073:186:0;;;;;;;;;;;;:::i;25164:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25164:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;25164:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;41440:133::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41440:133:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;41440:133:0;;;;;;;;;;;;;;;;;:::i;17525:71::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17525:71:0;;;:::i;38038:991::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;38038:991:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;38038:991:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;38038:991:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;38038:991:0;;-1:-1:-1;38038:991:0;-1:-1:-1;;;;;;38038:991:0;;;;;;;;:::i;22203:853::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22203:853:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22203:853:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17401:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17401:41:0;;;:::i;18200:159::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18200:159:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;18200:159:0;;;;;;;;;;:::i;40802:251::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40802:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;40802:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;40802:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;40802:251:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;40802:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;40802:251:0;;-1:-1:-1;40802:251:0;;-1:-1:-1;;;;;40802:251:0:i;24420:665::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24420:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;24420:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20450:734::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20450:734:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20450:734:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18618:155;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18618:155:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18618:155:0;-1:-1:-1;;;;;18618:155:0;;:::i;21190:970::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21190:970:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33523:1005::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33523:1005:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33523:1005:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33523:1005:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33523:1005:0;;-1:-1:-1;33523:1005:0;-1:-1:-1;;;;;;33523:1005:0;;;;;;;;:::i;23062:673::-;23299:16;23317:14;23280:8;17722:15;17710:8;:27;;17702:62;;;;;-1:-1:-1;;;17702:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17702:62:0;;;;;;;;;;;;;;;23371:196:::1;23401:5;23421:4;23440:9;23464:14;23493:12;23528:4;23548:8;23371:15;:196::i;:::-;23344:223:::0;;-1:-1:-1;23344:223:0;-1:-1:-1;23578:51:0::1;23606:5:::0;23613:2;23344:223;23578:27:::1;:51::i;:::-;23646:4;-1:-1:-1::0;;;;;23640:20:0::1;;23661:9;23640:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23640:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23640:31:0;;;;23682:45;23713:2;23717:9;23682:30;:45::i;:::-;23062:673:::0;;;;;;;;;;:::o;41320:112::-;17832:5;;-1:-1:-1;;;;;17832:5:0;17841:10;17832:19;17824:64;;;;;-1:-1:-1;;;17824:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41381:43:::1;::::0;-1:-1:-1;;;;;41381:20:0;::::1;::::0;41402:21:::1;41381:43:::0;::::1;;;::::0;::::1;::::0;;;41402:21;41381:20;:43;::::1;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;41381:43:0;41320:112:::0;:::o;40267:260::-;40420:14;40459:60;40487:8;40497:9;40508:10;40459:27;:60::i;:::-;40452:67;40267:260;-1:-1:-1;;;;40267:260:0:o;18367:243::-;18475:5;;-1:-1:-1;;;;;18475:5:0;18461:10;:19;18453:44;;;;;-1:-1:-1;;;18453:44:0;;;;;;;;;;;;-1:-1:-1;;;18453:44:0;;;;;;;;;;;;;;;18513:6;18508:95;18521:17;;;18508:95;;;18586:5;18560:12;:23;18573:6;;18580:1;18573:9;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18573:9:0;18560:23;;-1:-1:-1;18560:23:0;;;;;;;;-1:-1:-1;18560:23:0;:31;;-1:-1:-1;;18560:31:0;;;;;;;;;;-1:-1:-1;18540:3:0;18508:95;;;;18367:243;;;:::o;18781:131::-;18857:5;;-1:-1:-1;;;;;18857:5:0;18843:10;:19;18835:44;;;;;-1:-1:-1;;;18835:44:0;;;;;;;;;;;;-1:-1:-1;;;18835:44:0;;;;;;;;;;;;;;;18890:5;:14;;-1:-1:-1;;;;;;18890:14:0;-1:-1:-1;;;;;18890:14:0;;;;;;;;;;18781:131::o;32513:1004::-;32727:21;32699:8;17722:15;17710:8;:27;;17702:62;;;;;-1:-1:-1;;;17702:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17702:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32799:4:0::1;32774:29;:4:::0;;-1:-1:-1;;32779:15:0;;32774:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32774:21:0::1;-1:-1:-1::0;;;;;32774:29:0::1;;32766:69;;;::::0;;-1:-1:-1;;;32766:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32766:69:0;;;;;;;;;;;;;::::1;;32856:53;32885:7;32894:8;32904:4;;32856:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32856:28:0::1;::::0;-1:-1:-1;;;32856:53:0:i:1;:::-;32846:63;;32959:12;32928:7;32953:1;32936:7;:14;:18;32928:27;;;;;;;;;;;;;;:43;;32920:97;;;;-1:-1:-1::0;;;32920:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33038:139;33084:4;;33089:1;33084:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33084:7:0::1;33093:10;33105:49;33128:7;33137:4;;33142:1;33137:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33137:7:0::1;33146:4;;33151:1;33146:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33146:7:0::1;33105:22;:49::i;:::-;33156:7;33164:1;33156:10;;;;;;;;;;;;;;33038:31;:139::i;:::-;33188:35;33194:7;33203:4;;33188:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33217:4:0::1;::::0;-1:-1:-1;33188:5:0::1;::::0;-1:-1:-1;;33188:35:0:i:1;:::-;33240:4;-1:-1:-1::0;;;;;33234:20:0::1;;33255:7;33280:1;33263:7;:14;:18;33255:27;;;;;;;;;;;;;;33234:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33234:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33234:49:0;;;;33294:63;33325:2;33329:7;33354:1;33337:7;:14;:18;33329:27;;;;;;;;;;;;;;33294:30;:63::i;:::-;33382:37;::::0;;-1:-1:-1;;;33382:37:0;;33413:4:::1;33382:37;::::0;::::1;::::0;;;33370:9:::1;::::0;-1:-1:-1;;;;;33389:4:0::1;33382:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33382:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33382:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33382:37:0;;-1:-1:-1;33434:8:0;;33430:79:::1;;33491:11;::::0;33457:52:::1;::::0;33485:4:::1;::::0;-1:-1:-1;;;;;33491:11:0::1;33504:4:::0;33457:27:::1;:52::i;:::-;17775:1;32513:1004:::0;;;;;;;;;:::o;41061:251::-;41205:21;41251:53;41279:7;41288:9;41299:4;41251:27;:53::i;:::-;41244:60;;41061:251;;;;;:::o;23741:673::-;24047:12;24061;24086;24101:47;24124:7;24133:6;24141;24101:22;:47::i;:::-;24086:62;;24159:10;24172;:33;;24196:9;24172:33;;;-1:-1:-1;;24172:33:0;24216:78;;;-1:-1:-1;;;24216:78:0;;24242:10;24216:78;;;;24262:4;24216:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24159:46;;-1:-1:-1;;;;;;24216:25:0;;;;;:78;;;;;-1:-1:-1;;24216:78:0;;;;;;;;-1:-1:-1;24216:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;24216:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24216:78:0;;;;24326:80;24342:6;24350;24358:9;24369:10;24381;24393:2;24397:8;24326:15;:80::i;:::-;24305:101;;;;;;;;23741:673;;;;;;;;;;;;;;;;:::o;27434:1609::-;27658:21;27639:8;17722:15;17710:8;:27;;17702:62;;;;;-1:-1:-1;;;17702:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17702:62:0;;;;;;;;;;;;;;;27702:53:::1;27731:7;27740:8;27750:4;;27702:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27702:28:0::1;::::0;-1:-1:-1;;;27702:53:0:i:1;:::-;27692:63;;27805:12;27774:7;27799:1;27782:7;:14;:18;27774:27;;;;;;;;;;;;;;:43;;27766:97;;;;-1:-1:-1::0;;;27766:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27887:12;:21;27900:4;;27905:1;27900:7;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;27900:7:0::1;27887:21:::0;;-1:-1:-1;27887:21:0;::::1;::::0;;;;;;-1:-1:-1;27887:21:0;;::::1;;27883:218;;;27925:13;27941:21;27953:8;27941:11;:21::i;:::-;27925:37;;27977:75;28009:4;;28014:1;28009:7;;;;;;;28030:11;::::0;-1:-1:-1;;;;;28009:7:0::1;::::0;;::::1;::::0;;;::::1;;::::0;::::1;::::0;28018:10:::1;::::0;-1:-1:-1;28030:11:0::1;28043:8:::0;27977:31:::1;:75::i;:::-;28081:8;28067:7;28075:1;28067:10;;;;;;;;;;;;;:22;;;;;;;;;::::0;::::1;27883:218;;28120:139;28166:4;;28171:1;28166:7;;;;;;28120:139;28276:12;:21;28289:4;;28294:1;28289:7;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;28289:7:0::1;28276:21:::0;;-1:-1:-1;28276:21:0;::::1;::::0;;;;;;-1:-1:-1;28276:21:0;;::::1;;28272:764;;;28314:24;28320:7;28329:4;;28314:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28335:2:0;;-1:-1:-1;28314:5:0::1;::::0;-1:-1:-1;;28314:24:0:i:1;:::-;28272:764;;;28360:12;:35;28373:4:::0;;-1:-1:-1;;28378:15:0;;28373:21;;::::1;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;28373:21:0::1;28360:35:::0;;-1:-1:-1;28360:35:0;::::1;::::0;;;;;;-1:-1:-1;28360:35:0;;::::1;;28356:680;;;28432:24;28459:58;28491:7;28500;28508:1;28500:10;;;;;;;;;;;;;;28512:4;;28459:58;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28459:31:0::1;::::0;-1:-1:-1;;;28459:58:0:i:1;:::-;28432:85;;28532:38;28538:10;28550:4;;28532:38;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28564:4:0::1;::::0;-1:-1:-1;28532:5:0::1;::::0;-1:-1:-1;;28532:38:0:i:1;:::-;28585:83;28613:4:::0;;-1:-1:-1;;28618:15:0;;28613:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28613:21:0::1;28636:2;28640:7;28665:1;28648:7;:14;:18;28640:27;;;;;;;;;;;;;;28585;:83::i;:::-;28683:9;28702:4:::0;;-1:-1:-1;;28707:15:0;;28702:21;;::::1;;;;;28695:54;::::0;;-1:-1:-1;;;28695:54:0;;28743:4:::1;28695:54;::::0;::::1;::::0;;;28702:21:::1;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;28702:21:0::1;::::0;28695:39:::1;::::0;-1:-1:-1;28695:54:0;;;;;28702:21;28695:54;;;;;28702:21;28695:54;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;28695:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28695:54:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28695:54:0;;-1:-1:-1;28768:8:0;;28764:100:::1;;28795:69;28823:4:::0;;-1:-1:-1;;28828:15:0;;28823:21;;::::1;;;;;28846:11;::::0;-1:-1:-1;;;;;28823:21:0::1;::::0;;::::1;::::0;;;::::1;;::::0;::::1;::::0;28846:11:::1;::::0;-1:-1:-1;28859:4:0;28795:27:::1;:69::i;:::-;28356:680;;;;;28897:24;28924:58;28956:7;28965;28973:1;28965:10;;;;;;;28924:58;28897:85;;28997:27;29003:10;29015:4;;28997:27;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29021:2:0;;-1:-1:-1;28997:5:0::1;::::0;-1:-1:-1;;28997:27:0:i:1;28356:680::-;27434:1609:::0;;;;;;;;;:::o;31471:1036::-;31685:21;31657:8;17722:15;17710:8;:27;;17702:62;;;;;-1:-1:-1;;;17702:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17702:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31757:4:0::1;31732:29;:4:::0;;-1:-1:-1;;31737:15:0;;31732:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31732:21:0::1;-1:-1:-1::0;;;;;31732:29:0::1;;31724:69;;;::::0;;-1:-1:-1;;;31724:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31724:69:0;;;;;;;;;;;;;::::1;;31814:53;31842:7;31851:9;31862:4;;31814:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31814:27:0::1;::::0;-1:-1:-1;;;31814:53:0:i:1;:::-;31804:63;;31900:11;31886:7;31894:1;31886:10;;;;;;;;;;;;;;:25;;31878:75;;;;-1:-1:-1::0;;;31878:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31966:139;32012:4;;32017:1;32012:7;;;;;;31966:139;32142:58;32174:7;32183;32191:1;32183:10;;;;;;;;;;;;;;32195:4;;32142:58;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32142:31:0::1;::::0;-1:-1:-1;;;32142:58:0:i:1;:::-;32132:68;;32211:35;32217:7;32226:4;;32211:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32240:4:0::1;::::0;-1:-1:-1;32211:5:0::1;::::0;-1:-1:-1;;32211:35:0:i:1;:::-;32263:4;-1:-1:-1::0;;;;;32257:20:0::1;;32278:7;32303:1;32286:7;:14;:18;32278:27;;;;;;;;;;;;;;32257:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32257:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32257:49:0;;;;32317:45;32348:2;32352:9;32317:30;:45::i;:::-;32387:21;32423:8:::0;;32419:76:::1;;32477:11;::::0;32446:49:::1;::::0;-1:-1:-1;;;;;32477:11:0::1;32490:4:::0;32446:30:::1;:49::i;25870:714::-:0;26188:14;26215:12;26230:44;26253:7;26262:5;26269:4;26230:22;:44::i;:::-;26215:59;;26285:10;26298;:33;;26322:9;26298:33;;;-1:-1:-1;;26298:33:0;26342:78;;;-1:-1:-1;;;26342:78:0;;26368:10;26342:78;;;;26388:4;26342:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26285:46;;-1:-1:-1;;;;;;26342:25:0;;;;;:78;;;;;-1:-1:-1;;26342:78:0;;;;;;;;-1:-1:-1;26342:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;26342:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26342:78:0;;;;26443:133;26505:5;26512:9;26523:14;26539:12;26553:2;26557:8;26443:47;:133::i;:::-;26431:145;25870:714;-1:-1:-1;;;;;;;;;;;;;25870:714:0:o;35883:2149::-;36117:8;17722:15;17710:8;:27;;17702:62;;;;;-1:-1:-1;;;17702:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17702:62:0;;;;;;;;;;;;;;;36142:12:::1;:21;36155:4;;36160:1;36155:7;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;36155:7:0::1;36142:21:::0;;-1:-1:-1;36142:21:0;::::1;::::0;;;;;;-1:-1:-1;36142:21:0;;::::1;;36138:216;;;36180:13;36196:21;36208:8;36196:11;:21::i;:::-;36180:37;;36232:75;36264:4;;36269:1;36264:7;;;;;;36232:75;36322:20:::0;;::::1;::::0;36138:216:::1;36374:137;36420:4;;36425:1;36420:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;36420:7:0::1;36429:10;36441:49;36464:7;36473:4;;36478:1;36473:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;36473:7:0::1;36482:4;;36487:1;36482:7;;;;;;36441:49;36492:8;36374:31;:137::i;:::-;36528:12;:21;36541:4;;36546:1;36541:7;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;36541:7:0::1;36528:21:::0;;-1:-1:-1;36528:21:0;::::1;::::0;;;;;;-1:-1:-1;36528:21:0;;::::1;;36524:1501;;;36566:18;36594:4:::0;;-1:-1:-1;;36599:15:0;;36594:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;36594:21:0::1;-1:-1:-1::0;;;;;36587:39:0::1;;36627:2;36587:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;36587:43:0::1;-1:-1:-1::0;;;;;36587:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36587:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36587:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36587:43:0;36645:44:::1;::::0;;36587:43:::1;36645:44:::0;;::::1;::::0;;;;;;;;;;;36587:43;;-1:-1:-1;36645:44:0::1;::::0;;;36680:4;;;;;;36645:44;::::1;::::0;36680:4;;36645:44;36680:4;36645:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;36686:2:0;;-1:-1:-1;36645:34:0::1;::::0;-1:-1:-1;;36645:44:0:i:1;:::-;36796:12:::0;36730:62:::1;36778:13:::0;36737:4;;-1:-1:-1;;36742:15:0;;36737:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;36737:21:0::1;-1:-1:-1::0;;;;;36730:39:0::1;;36770:2;36730:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;36730:43:0::1;-1:-1:-1::0;;;;;36730:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36730:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36730:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36730:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;36704:181;;;;-1:-1:-1::0;;;36704:181:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36524:1501;;;;36907:12;:35;36920:4:::0;;-1:-1:-1;;36925:15:0;;36920:21;;::::1;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;36920:21:0::1;36907:35:::0;;-1:-1:-1;36907:35:0;::::1;::::0;;;;;;-1:-1:-1;36907:35:0;;::::1;;36903:1122;;;36959:18;36987:4:::0;;-1:-1:-1;;36992:15:0;;36987:21;;::::1;;;;;36980:54;::::0;;-1:-1:-1;;;36980:54:0;;37028:4:::1;36980:54;::::0;::::1;::::0;;;36987:21:::1;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;36987:21:0::1;::::0;36980:39:::1;::::0;-1:-1:-1;36980:54:0;;;;;36987:21;36980:54;;;;;36987:21;36980:54;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;36980:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36980:54:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36980:54:0;37049:55:::1;::::0;;36980:54:::1;37049:55:::0;;::::1;::::0;;;;;;;;;;;36980:54;;-1:-1:-1;37049:55:0::1;::::0;;;37084:4;;;;;;37049:55;::::1;::::0;37084:4;;37049:55;37084:4;37049:55;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;37098:4:0::1;::::0;-1:-1:-1;37049:34:0::1;::::0;-1:-1:-1;;37049:55:0:i:1;:::-;37119:17;37146:4:::0;;-1:-1:-1;;37151:15:0;;37146:21;;::::1;;;;;37139:54;::::0;;-1:-1:-1;;;37139:54:0;;37187:4:::1;37139:54;::::0;::::1;::::0;;;37146:21:::1;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;37146:21:0::1;::::0;37139:39:::1;::::0;-1:-1:-1;37139:54:0;;;;;37146:21;37139:54;;;;;37146:21;37139:54;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;37139:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37139:54:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;37139:54:0;;-1:-1:-1;37269:12:0;37234:31:::1;37139:54:::0;37251:13;37234:31:::1;:16;:31;:::i;:::-;:47;;37208:150;;;;-1:-1:-1::0;;;37208:150:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37375:13;37391:41;37418:13;37403:12;:28;37391:11;:41::i;:::-;37375:57:::0;-1:-1:-1;37447:73:0::1;37475:4:::0;;-1:-1:-1;;37480:15:0;;37475:21;;::::1;;;;37447:73;37547:28:::0;;::::1;:39:::0;;::::1;37601:60;37629:4:::0;;-1:-1:-1;;37634:15:0;;37629:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37629:21:0::1;37652:2;37656:4;37601:27;:60::i;:::-;36903:1122;;;;;;;37694:18;37722:4:::0;;-1:-1:-1;;37727:15:0;;37722:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37722:21:0::1;-1:-1:-1::0;;;;;37715:39:0::1;;37755:2;37715:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;37715:43:0::1;-1:-1:-1::0;;;;;37715:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;37715:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37715:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;37715:43:0;37773:44:::1;::::0;;37715:43:::1;37773:44:::0;;::::1;::::0;;;;;;;;;;;37715:43;;-1:-1:-1;37773:44:0::1;::::0;;;37808:4;;;;;;37773:44;::::1;::::0;37808:4;;37773:44;37808:4;37773:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;37814:2:0;;-1:-1:-1;37773:34:0::1;::::0;-1:-1:-1;;37773:44:0:i:1;:::-;37924:12:::0;37858:62:::1;37906:13:::0;37865:4;;-1:-1:-1;;37870:15:0;;37865:21;;::::1;;;;37858:62;:78;;37832:181;;;;-1:-1:-1::0;;;37832:181:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36903:1122;;35883:2149:::0;;;;;;;:::o;39035:994::-;39302:8;17722:15;17710:8;:27;;17702:62;;;;;-1:-1:-1;;;17702:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17702:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;39361:4:0::1;39336:29;:4:::0;;-1:-1:-1;;39341:15:0;;39336:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;39336:21:0::1;-1:-1:-1::0;;;;;39336:29:0::1;;39328:69;;;::::0;;-1:-1:-1;;;39328:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;39328:69:0;;;;;;;;;;;;;::::1;;39408:137;39454:4;;39459:1;39454:7;;;;;;39408:137;39556:55;39591:4;;39556:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;39605:4:0::1;::::0;-1:-1:-1;39556:34:0::1;::::0;-1:-1:-1;;39556:55:0:i:1;:::-;39639:37;::::0;;-1:-1:-1;;;39639:37:0;;39670:4:::1;39639:37;::::0;::::1;::::0;;;39622:14:::1;::::0;-1:-1:-1;;;;;39646:4:0::1;39639:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;39639:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;39639:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;39639:37:0;;-1:-1:-1;39695:25:0;;::::1;;39687:79;;;;-1:-1:-1::0;;;39687:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39783:4;-1:-1:-1::0;;;;;39777:20:0::1;;39798:9;39777:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;39777:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;39777:31:0;;;;39821:13;39837:22;39849:9;39837:11;:22::i;:::-;39901:11;::::0;39821:38;;-1:-1:-1;39870:53:0::1;::::0;-1:-1:-1;;;;;39901:11:0::1;39821:38:::0;39870:30:::1;:53::i;:::-;39947:8;39934:21;;;;39976:45;40007:2;40011:9;39976:30;:45::i;:::-;17775:1;;39035:994:::0;;;;;;;:::o;30618:847::-;30834:21;30806:8;17722:15;17710:8;:27;;17702:62;;;;;-1:-1:-1;;;17702:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17702:62:0;;;;;;;;;;;;;;;30892:4:::1;-1:-1:-1::0;;;;;30881:15:0::1;:4;;30886:1;30881:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30881:7:0::1;-1:-1:-1::0;;;;;30881:15:0::1;;30873:55;;;::::0;;-1:-1:-1;;;30873:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;30873:55:0;;;;;;;;;;;;;::::1;;30949:54;30978:7;30987:9;30998:4;;30949:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30949:28:0::1;::::0;-1:-1:-1;;;30949:54:0:i:1;:::-;30939:64;;31053:12;31022:7;31047:1;31030:7;:14;:18;31022:27;;;;;;;;;;;;;;:43;;31014:97;;;;-1:-1:-1::0;;;31014:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31124:13;31140:22;31152:9;31140:11;:22::i;:::-;31204:11;::::0;31124:38;;-1:-1:-1;31173:53:0::1;::::0;-1:-1:-1;;;;;31204:11:0::1;31124:38:::0;31173:30:::1;:53::i;:::-;31251:8;31237:7;31245:1;31237:10;;;;;;;;;;;;;:22;;;;;;;;;::::0;::::1;31286:4;-1:-1:-1::0;;;;;31280:19:0::1;;31307:7;31315:1;31307:10;;;;;;;;;;;;;;31280:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31280:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31280:40:0;;;;;31344:4;-1:-1:-1::0;;;;;31338:20:0::1;;31359:49;31382:7;31391:4;;31396:1;31391:7;;;;;;31359:49;31410:7;31418:1;31410:10;;;;;;;;;;;;;;31338:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;31338:83:0::1;-1:-1:-1::0;;;;;31338:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31338:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31338:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31338:83:0;31331:91:::1;;;;31433:24;31439:7;31448:4;;31433:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31454:2:0;;-1:-1:-1;31433:5:0::1;::::0;-1:-1:-1;;31433:24:0:i:1;:::-;17775:1;30618:847:::0;;;;;;;;:::o;40535:259::-;40688:13;40726:60;40753:9;40764;40775:10;40726:26;:60::i;29049:1563::-;29273:21;29254:8;17722:15;17710:8;:27;;17702:62;;;;;-1:-1:-1;;;17702:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17702:62:0;;;;;;;;;;;;;;;29317:53:::1;29345:7;29354:9;29365:4;;29317:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29317:27:0::1;::::0;-1:-1:-1;;;29317:53:0:i:1;:::-;29307:63;;29403:11;29389:7;29397:1;29389:10;;;;;;;;;;;;;;:25;;29381:75;;;;-1:-1:-1::0;;;29381:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29473:12;:21;29486:4;;29491:1;29486:7;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;29486:7:0::1;29473:21:::0;;-1:-1:-1;29473:21:0;::::1;::::0;;;;;;-1:-1:-1;29473:21:0;;::::1;;29469:220;;;29511:13;29527:23;29539:7;29547:1;29539:10;;;;;;;;;;;;;;29527:11;:23::i;:::-;29511:39;;29565:75;29597:4;;29602:1;29597:7;;;;;;29565:75;29669:8;29655:7;29663:1;29655:10;;;;;;;;;;;;;:22;;;;;;;;;::::0;::::1;29469:220;;29701:139;29747:4;;29752:1;29747:7;;;;;;29701:139;29857:12;:21;29870:4;;29875:1;29870:7;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;29870:7:0::1;29857:21:::0;;-1:-1:-1;29857:21:0;::::1;::::0;;;;;;-1:-1:-1;29857:21:0;;::::1;;29853:752;;;29895:24;29901:7;29910:4;;29895:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29916:2:0;;-1:-1:-1;29895:5:0::1;::::0;-1:-1:-1;;29895:24:0:i:1;29853:752::-;29941:12;:35;29954:4:::0;;-1:-1:-1;;29959:15:0;;29954:21;;::::1;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;29954:21:0::1;29941:35:::0;;-1:-1:-1;29941:35:0;::::1;::::0;;;;;;-1:-1:-1;29941:35:0;;::::1;;29937:668;;;30013:24;30040:58;30072:7;30081;30089:1;30081:10;;;;;;;30040:58;30013:85;;30113:38;30119:10;30131:4;;30113:38;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30145:4:0::1;::::0;-1:-1:-1;30113:5:0::1;::::0;-1:-1:-1;;30113:38:0:i:1;:::-;30166:65;30194:4:::0;;-1:-1:-1;;30199:15:0;;30194:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30194:21:0::1;30217:2;30221:9;30166:27;:65::i;17496:20::-:0;;;-1:-1:-1;;;;;17496:20:0;;:::o;17449:38::-;;;:::o;40073:186::-;40170:12;40202:49;40223:7;40232:8;40242;40202:20;:49::i;25164:700::-;25430:14;25411:8;17722:15;17710:8;:27;;17702:62;;;;;-1:-1:-1;;;17702:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17702:62:0;;;;;;;;;;;;;;;25473:196:::1;25503:5;25523:4;25542:9;25566:14;25595:12;25630:4;25650:8;25473:15;:196::i;:::-;25719:38;::::0;;-1:-1:-1;;;25719:38:0;;25751:4:::1;25719:38;::::0;::::1;::::0;;;25457:212;;-1:-1:-1;25680:78:0::1;::::0;-1:-1:-1;25708:5:0;;25715:2;;-1:-1:-1;;;;;25719:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;25719:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25719:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;25719:38:0;25680:27:::1;:78::i;:::-;25775:4;-1:-1:-1::0;;;;;25769:20:0::1;;25790:9;25769:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25769:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25769:31:0;;;;25811:45;25842:2;25846:9;25811:30;:45::i;41440:133::-:0;17832:5;;-1:-1:-1;;;;;17832:5:0;17841:10;17832:19;17824:64;;;;;-1:-1:-1;;;17824:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41538:5:::1;-1:-1:-1::0;;;;;41531:22:0::1;;41554:2;41558:6;41531:34;;;;;;;;;;;;;-1:-1:-1::0;;;;;41531:34:0::1;-1:-1:-1::0;;;;;41531:34:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;41531:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;41531:34:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;;;;41440:133:0:o;17525:71::-;;;-1:-1:-1;;;;;17525:71:0;;:::o;38038:991::-;38298:8;17722:15;17710:8;:27;;17702:62;;;;;-1:-1:-1;;;17702:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17702:62:0;;;;;;;;;;;;;;;38343:4:::1;-1:-1:-1::0;;;;;38332:15:0::1;:4;;38337:1;38332:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;38332:7:0::1;-1:-1:-1::0;;;;;38332:15:0::1;;38324:55;;;::::0;;-1:-1:-1;;;38324:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;38324:55:0;;;;;;;;;;;;;::::1;;38406:9;38390:13;38444:21;38406:9:::0;38444:11:::1;:21::i;:::-;38507:11;::::0;38428:37;;-1:-1:-1;38476:53:0::1;::::0;-1:-1:-1;;;;;38507:11:0::1;38428:37:::0;38476:30:::1;:53::i;:::-;38552:8;38540:20;;;;38579:4;-1:-1:-1::0;;;;;38573:19:0::1;;38600:8;38573:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38573:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38573:38:0;;;;;38635:4;-1:-1:-1::0;;;;;38629:20:0::1;;38650:49;38673:7;38682:4;;38687:1;38682:7;;;;;;38650:49;38701:8;38629:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;38629:81:0::1;-1:-1:-1::0;;;;;38629:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38629:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38629:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;38629:81:0;38622:89:::1;;;;38722:18;38750:4:::0;;-1:-1:-1;;38755:15:0;;38750:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;38750:21:0::1;-1:-1:-1::0;;;;;38743:39:0::1;;38783:2;38743:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;38743:43:0::1;-1:-1:-1::0;;;;;38743:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38743:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38743:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;38743:43:0;38797:44:::1;::::0;;38743:43:::1;38797:44:::0;;::::1;::::0;;;;;;;;;;;38743:43;;-1:-1:-1;38797:44:0::1;::::0;;;38832:4;;;;;;38797:44;::::1;::::0;38832:4;;38797:44;38832:4;38797:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;38838:2:0;;-1:-1:-1;38797:34:0::1;::::0;-1:-1:-1;;38797:44:0:i:1;:::-;38940:12:::0;38874:62:::1;38922:13:::0;38881:4;;-1:-1:-1;;38886:15:0;;38881:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;38881:21:0::1;-1:-1:-1::0;;;;;38874:39:0::1;;38914:2;38874:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;38874:43:0::1;-1:-1:-1::0;;;;;38874:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;38874:62:0;:78;;38852:169;;;;-1:-1:-1::0;;;38852:169:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22203:853:::0;22457:12;22471;22438:8;17722:15;17710:8;:27;;17702:62;;;;;-1:-1:-1;;;17702:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17702:62:0;;;;;;;;;;;;;;;22496:12:::1;22511:47;22534:7;22543:6;22551;22511:22;:47::i;:::-;22569:60;::::0;;-1:-1:-1;;;22569:60:0;;22601:10:::1;22569:60;::::0;::::1;::::0;-1:-1:-1;;;;;22569:31:0;::::1;:60:::0;;;;;;;;;;;;;;22496:62;;-1:-1:-1;22569:31:0;;::::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;22569:31:0;:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22569:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22569:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;22697:27:0::1;::::0;;-1:-1:-1;;;22697:27:0;;-1:-1:-1;;;;;22697:27:0;;::::1;;::::0;::::1;::::0;;;22667:12:::1;::::0;;;22697:23;;::::1;::::0;::::1;::::0;:27;;;;;;;;;;;22667:12;22697:23;:27;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22697:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22697:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22697:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;22697:27:0;-1:-1:-1;22736:14:0::1;22755:41;22781:6:::0;22789;22755:25:::1;:41::i;:::-;22735:61;;;22838:6;-1:-1:-1::0;;;;;22828:16:0::1;:6;-1:-1:-1::0;;;;;22828:16:0::1;;:58;;22869:7;22878;22828:58;;;22848:7;22857;22828:58;22807:79:::0;;-1:-1:-1;22807:79:0;-1:-1:-1;22905:21:0;;::::1;;22897:70;;;;-1:-1:-1::0;;;22897:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22997:10;22986:7;:21;;22978:70;;;;-1:-1:-1::0;;;22978:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17775:1;;;;22203:853:::0;;;;;;;;;;;:::o;17401:41::-;;;:::o;18200:159::-;18291:5;;-1:-1:-1;;;;;18291:5:0;18277:10;:19;18269:44;;;;;-1:-1:-1;;;18269:44:0;;;;;;;;;;;;-1:-1:-1;;;18269:44:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;18324:19:0;;;;;;;;:12;:19;;;;;:27;;-1:-1:-1;;18324:27:0;;;;;;;;;;18200:159::o;40802:251::-;40946:21;40992:53;41021:7;41030:8;41040:4;40992:28;:53::i;24420:665::-;24709:16;24727:14;24754:12;24769:44;24792:7;24801:5;24808:4;24769:22;:44::i;:::-;24754:59;;24824:10;24837;:33;;24861:9;24837:33;;;-1:-1:-1;;24837:33:0;24881:78;;;-1:-1:-1;;;24881:78:0;;24907:10;24881:78;;;;24927:4;24881:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24824:46;;-1:-1:-1;;;;;;24881:25:0;;;;;:78;;;;;-1:-1:-1;;24881:78:0;;;;;;;;-1:-1:-1;24881:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;24881:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24881:78:0;;;;24997:80;25016:5;25023:9;25034:14;25050:12;25064:2;25068:8;24997:18;:80::i;:::-;24970:107;;;;-1:-1:-1;24420:665:0;-1:-1:-1;;;;;;;;;;;;;24420:665:0:o;20450:734::-;20738:12;20752;20766:14;20719:8;17722:15;17710:8;:27;;17702:62;;;;;-1:-1:-1;;;17702:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17702:62:0;;;;;;;;;;;;;;;20814:85:::1;20828:6;20836;20844:14;20860;20876:10;20888;20814:13;:85::i;:::-;20793:106:::0;;-1:-1:-1;20793:106:0;-1:-1:-1;20910:12:0::1;20925:47;20948:7;20957:6:::0;20965;20925:22:::1;:47::i;:::-;20910:62;;20983:66;21015:6;21023:10;21035:4;21041:7;20983:31;:66::i;:::-;21060;21092:6;21100:10;21112:4;21118:7;21060:31;:66::i;:::-;21162:4;-1:-1:-1::0;;;;;21149:23:0::1;;21173:2;21149:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;21149:27:0::1;-1:-1:-1::0;;;;;21149:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21149:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21149:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21149:27:0;20450:734;;;;-1:-1:-1;21149:27:0;;-1:-1:-1;20450:734:0;;-1:-1:-1;;;;;;;;;20450:734:0:o;18618:155::-;18706:5;;-1:-1:-1;;;;;18706:5:0;18692:10;:19;18684:44;;;;;-1:-1:-1;;;18684:44:0;;;;;;;;;;;;-1:-1:-1;;;18684:44:0;;;;;;;;;;;;;;;18739:11;:26;;-1:-1:-1;;;;;;18739:26:0;-1:-1:-1;;;;;18739:26:0;;;;;;;;;;18618:155::o;21190:970::-;21443:16;21461:14;21477;21424:8;17722:15;17710:8;:27;;17702:62;;;;;-1:-1:-1;;;17702:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17702:62:0;;;;;;;;;;;;;;;21531:176:::1;21559:5;21579:4;21598:18;21631:9;21655:14;21684:12;21531:13;:176::i;:::-;21504:203:::0;;-1:-1:-1;21504:203:0;-1:-1:-1;21718:12:0::1;21733:44;21756:7;21765:5:::0;21772:4:::1;21733:22;:44::i;:::-;21718:59;;21788:69;21820:5;21827:10;21839:4;21845:11;21788:31;:69::i;:::-;21874:4;-1:-1:-1::0;;;;;21868:19:0::1;;21895:9;21868:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21868:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21868:39:0;;;;;21931:4;-1:-1:-1::0;;;;;21925:20:0::1;;21946:4;21952:9;21925:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;21925:37:0::1;-1:-1:-1::0;;;;;21925:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21925:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21925:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21925:37:0;21918:45:::1;;;;21999:4;-1:-1:-1::0;;;;;21986:23:0::1;;22010:2;21986:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;21986:27:0::1;-1:-1:-1::0;;;;;21986:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21986:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21986:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21986:27:0;;-1:-1:-1;22064:9:0::1;:21:::0;-1:-1:-1;22060:92:0::1;;;22087:65;22118:10;22142:9;22130;:21;22087:30;:65::i;:::-;17775:1;21190:970:::0;;;;;;;;;;;:::o;33523:1005::-;33736:21;33708:8;17722:15;17710:8;:27;;17702:62;;;;;-1:-1:-1;;;17702:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17702:62:0;;;;;;;;;;;;;;;33794:4:::1;-1:-1:-1::0;;;;;33783:15:0::1;:4;;33788:1;33783:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33783:7:0::1;-1:-1:-1::0;;;;;33783:15:0::1;;33775:55;;;::::0;;-1:-1:-1;;;33775:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33775:55:0;;;;;;;;;;;;;::::1;;33851:53;33879:7;33888:9;33899:4;;33851:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33851:27:0::1;::::0;-1:-1:-1;;;33851:53:0:i:1;:::-;33841:63;;33937:9;33923:7;33931:1;33923:10;;;;;;;;;;;;;;:23;;33915:73;;;;-1:-1:-1::0;;;33915:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33999:16;34018:7;34026:1;34018:10;;;;;;;;;;;;;;33999:29;;34041:13;34057:23;34069:7;34077:1;34069:10;;;;;;;34057:23;34122:11;::::0;34041:39;;-1:-1:-1;34091:53:0::1;::::0;-1:-1:-1;;;;;34122:11:0::1;34041:39:::0;34091:30:::1;:53::i;:::-;34169:8;34155:7;34163:1;34155:10;;;;;;;;;;;;;:22;;;;;;;;;::::0;::::1;34204:4;-1:-1:-1::0;;;;;34198:19:0::1;;34225:7;34233:1;34225:10;;;;;;;;;;;;;;34198:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34198:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34198:40:0;;;;;34264:4;-1:-1:-1::0;;;;;34258:20:0::1;;34279:49;34302:7;34311:4;;34316:1;34311:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;34311:7:0::1;34320:4;;34325:1;34320:7;;;;;;34279:49;34330:7;34338:1;34330:10;;;;;;;;;;;;;;34258:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;34258:83:0::1;-1:-1:-1::0;;;;;34258:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34258:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34258:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34258:83:0;34251:91:::1;;;;34353:24;34359:7;34368:4;;34353:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34374:2:0;;-1:-1:-1;34353:5:0::1;::::0;-1:-1:-1;;34353:24:0:i:1;:::-;34440:11;34428:9;:23;34424:96;;;34453:67;34484:10;34508:11;34496:9;:23;34453:30;:67::i;:::-;17775:1;;33523:1005:::0;;;;;;;;:::o;536:361::-;731:45;;;-1:-1:-1;;;;;731:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;731:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;720:57:0;;;;685:12;;699:17;;720:10;;;;731:45;720:57;;;25:18:-1;720:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;720:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;684:93:0;;;;796:7;:57;;;;-1:-1:-1;808:11:0;;:16;;:44;;;839:4;828:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;828:24:0;808:44;788:101;;;;;-1:-1:-1;;;788:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1315:195;1423:12;;;1385;1423;;;;;;;;;-1:-1:-1;;;;;1402:7:0;;;1416:5;;1402:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1402:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1384:52:0;;;1455:7;1447:55;;;;-1:-1:-1;;;1447:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1315:195;;;:::o;12342:525::-;12435:14;12481:1;12470:8;:12;12462:66;;;;-1:-1:-1;;;12462:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12559:1;12547:9;:13;:31;;;;;12577:1;12564:10;:14;12547:31;12539:82;;;;-1:-1:-1;;;12539:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12642:20;12665:18;:8;12678:4;12665:18;:12;:18;:::i;:::-;12642:41;-1:-1:-1;12694:14:0;12711:31;12642:41;12731:10;12711:31;:19;:31;:::i;:::-;12694:48;-1:-1:-1;12753:16:0;12772:41;12797:15;12772:20;:9;12786:5;12772:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;12753:60;;12848:11;12836:9;:23;;;;;;;12342:525;-1:-1:-1;;;;;;;12342:525:0:o;14752:677::-;14853:21;14910:1;14895:4;:11;:16;;14887:57;;;;;-1:-1:-1;;;14887:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14976:4;:11;14965:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14965:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14965:23:0;;14955:33;;15012:8;14999:7;15007:1;14999:10;;;;;;;;;;;;;:21;;;;;15036:6;15031:391;15062:1;15048:4;:11;:15;15044:1;:19;15031:391;;;15086:14;15102:15;15121:42;15133:7;15142:4;15147:1;15142:7;;;;;;;;;;;;;;15151:4;15156:1;15160;15156:5;15151:11;;;;;;;;;;;;;;15121;:42::i;:::-;15085:78;;;;15182:1;15187;15182:6;15178:232;;;15226:63;15261:4;15239:19;15254:3;15239:7;15247:1;15239:10;;;;;;;;;;;;;;:14;;:19;;;;:::i;:::-;:26;;;;;;15267:9;15278:10;15226:12;:63::i;:::-;15209:7;15217:1;15221;15217:5;15209:14;;;;;;;;;;;;;:80;;;;;15178:232;;;15347:47;15360:7;15368:1;15360:10;;;;;;;;;;;;;;15372:9;15383:10;15347:12;:47::i;:::-;15330:7;15338:1;15342;15338:5;15330:14;;;;;;;;;;;;;:64;;;;;15178:232;-1:-1:-1;;15065:3:0;;15031:391;;;;14752:677;;;;;:::o;10822:478::-;10911:12;10937:14;10953;10971:26;10982:6;10990;10971:10;:26::i;:::-;11135:32;;;-1:-1:-1;;11135:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11135:32:0;;;;;11125:43;;;;;;-1:-1:-1;;;;;;11038:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11038:251:0;;;;;;;11028:262;;;;;;;;;10822:478;-1:-1:-1;;;;;10822:478:0:o;905:402::-;1130:51;;;-1:-1:-1;;;;;1130:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1130:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1119:63:0;;;;1084:12;;1098:17;;1119:10;;;;1130:51;1119:63;;;25:18:-1;1119:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1119:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1083:99:0;;;;1201:7;:57;;;;-1:-1:-1;1213:11:0;;:16;;:44;;;1244:4;1233:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1233:24:0;1213:44;1193:106;;;;-1:-1:-1;;;1193:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;905:402;;;;;;:::o;26695:727::-;26802:6;26797:618;26828:1;26814:4;:11;:15;26810:1;:19;26797:618;;;26852:13;26867:14;26886:4;26891:1;26886:7;;;;;;;;;;;;;;26895:4;26900:1;26904;26900:5;26895:11;;;;;;;;;;;;;;26851:56;;;;26923:14;26942:40;26968:5;26975:6;26942:25;:40::i;:::-;26922:60;;;26997:14;27014:7;27022:1;27026;27022:5;27014:14;;;;;;;;;;;;;;26997:31;;27044:15;27061;27089:6;-1:-1:-1;;;;;27080:15:0;:5;-1:-1:-1;;;;;27080:15:0;;:61;;27122:9;27138:1;27080:61;;;27104:1;27108:9;27080:61;27043:98;;;;27156:10;27187:1;27173:4;:11;:15;27169:1;:19;:80;;27246:3;27169:80;;;27191:52;27214:7;27223:6;27231:4;27236:1;27240;27236:5;27231:11;;;;;;;;;;;;;;27191:22;:52::i;:::-;27156:93;;27277:46;27300:7;27309:5;27316:6;27277:22;:46::i;:::-;-1:-1:-1;;;;;27264:65:0;;27348:10;27360;27372:2;27386:1;27376:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;27376:12:0;87:42:-1;143:17;;-1:-1;27376:12:0;;27264:139;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27264:139:0;-1:-1:-1;;;;;27264:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;27264:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27264:139:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;26831:3:0;;;;;-1:-1:-1;26797:618:0;;-1:-1:-1;;;;;;;;26797:618:0;15510:605;15611:21;15668:1;15653:4;:11;:16;;15645:57;;;;;-1:-1:-1;;;15645:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15734:4;:11;15723:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15723:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;15723:23:0;;15713:33;;15787:9;15757:7;15782:1;15765:7;:14;:18;15757:27;;;;;;;;;;;;;;;;;:39;15821:11;;-1:-1:-1;;15821:15:0;15807:226;15838:5;;15807:226;;15866:14;15882:15;15901:42;15913:7;15922:4;15931:1;15927;:5;15922:11;;;;;;;;;;;;;;15935:4;15940:1;15935:7;;;;;;;15901:42;15865:78;;;;15975:46;15987:7;15995:1;15987:10;;;;;;;;;;;;;;15999:9;16010:10;15975:11;:46::i;:::-;15958:7;15970:1;15966;:5;15958:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;15845:3:0;15807:226;;;;16072:35;16105:1;16096:3;16073:20;16088:4;16073:7;16081:1;16073:10;;;;;;;:20;:26;;;;;;;16072:35;:32;:35;:::i;:::-;16059:7;16067:1;16059:10;;;;;;;;;;;;;:48;;;;;15510:605;;;;;:::o;18920:108::-;18976:4;19016;19000:13;:6;19011:1;19000:13;:10;:13;:::i;:::-;:20;;;;;;;18920:108;-1:-1:-1;;18920:108:0:o;13540:514::-;13644:21;13701:1;13686:4;:11;:16;;13678:59;;;;;-1:-1:-1;;;13678:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13769:4;:11;13758:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13758:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13758:23:0;;13748:33;;13805:8;13792:7;13800:1;13792:10;;;;;;;;;;;;;:21;;;;;13829:6;13824:223;13855:1;13841:4;:11;:15;13837:1;:19;13824:223;;;13879:14;13895:15;13914:42;13926:7;13935:4;13940:1;13935:7;;;;;;;13914:42;13878:78;;;;13988:47;14001:7;14009:1;14001:10;;;;;;;13988:47;13971:7;13979:1;13983;13979:5;13971:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;13858:3:0;;13824:223;;34675:1202;34788:6;34783:1087;34814:1;34800:4;:11;:15;34796:1;:19;34783:1087;;;34838:13;34853:14;34872:4;34877:1;34872:7;;;;;;;;;;;;;;34881:4;34886:1;34890;34886:5;34881:11;;;;;;;;;;;;;;34837:56;;;;34909:14;34928:40;34954:5;34961:6;34928:25;:40::i;:::-;34908:60;;;34983:17;35016:46;35039:7;35048:5;35055:6;35016:22;:46::i;:::-;34983:80;;35078:16;35109:17;35197:13;35212;35230:4;-1:-1:-1;;;;;35230:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35230:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35230:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35230:18:0;;;;;;;-1:-1:-1;;;;;35196:52:0;;;;-1:-1:-1;35196:52:0;;-1:-1:-1;35264:17:0;;-1:-1:-1;;;;;35305:15:0;;;;;;;:61;;35347:8;35357;35305:61;;;35324:8;35334;35305:61;35263:103;;;;35395:56;35438:12;35402:5;-1:-1:-1;;;;;35395:23:0;;35427:4;35395:38;;;;;;;;;;;;;-1:-1:-1;;;;;35395:38:0;-1:-1:-1;;;;;35395:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;35395:56:0;35381:70;;35481:69;35509:11;35522:12;35536:13;35481:27;:69::i;:::-;35466:84;;34783:1087;;;;35581:15;35598;35626:6;-1:-1:-1;;;;;35617:15:0;:5;-1:-1:-1;;;;;35617:15:0;;:67;;35662:12;35681:1;35617:67;;;35641:1;35645:12;35617:67;35580:104;;;;35699:10;35730:1;35716:4;:11;:15;35712:1;:19;:80;;35789:3;35712:80;;;35734:52;35757:7;35766:6;35774:4;35779:1;35783;35779:5;35774:11;;;;;;;35734:52;35845:12;;;35855:1;35845:12;;;;;;;;;;-1:-1:-1;;;35807:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;35807:51:0;;;;;;;;;;;;;;;;;;;;;;35699:93;;-1:-1:-1;35807:9:0;;;;;;35817:10;;35829;;35699:93;;35845:12;;35807:51;;;;;;;;35845:12;;35807:51;;;;35845:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;35807:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35807:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;34817:3:0;;;;;-1:-1:-1;34783:1087:0;;-1:-1:-1;;;;;;;;;;34783:1087:0;7361:129;7445:5;;;7440:16;;;;7432:50;;;;;-1:-1:-1;;;7432:50:0;;;;;;;;;;;;-1:-1:-1;;;7432:50:0;;;;;;;;;;;;;;12988:470;13081:13;13127:1;13115:9;:13;13107:68;;;;-1:-1:-1;;;13107:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13206:1;13194:9;:13;:31;;;;;13224:1;13211:10;:14;13194:31;13186:82;;;;-1:-1:-1;;;13186:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13279:14;13296:35;13325:5;13296:24;:9;13310;13296:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;13279:52;-1:-1:-1;13342:16:0;13361:35;13391:4;13361:25;:10;13376:9;13361:25;:14;:25;:::i;:35::-;13342:54;;13418:32;13448:1;13431:11;13419:9;:23;;;;13418:32;13407:43;12988:470;-1:-1:-1;;;;;;12988:470:0:o;11903:317::-;11985:12;12028:1;12018:7;:11;12010:59;;;;-1:-1:-1;;;12010:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12099:1;12088:8;:12;:28;;;;;12115:1;12104:8;:12;12088:28;12080:79;;;;-1:-1:-1;;;12080:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12204:8;12180:21;:7;12192:8;12180:21;:11;:21;:::i;:::-;:32;;;;;;;11903:317;-1:-1:-1;;;;11903:317:0:o;10385:345::-;10460:14;10476;10521:6;-1:-1:-1;;;;;10511:16:0;:6;-1:-1:-1;;;;;10511:16:0;;;10503:64;;;;-1:-1:-1;;;10503:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10606:6;-1:-1:-1;;;;;10597:15:0;:6;-1:-1:-1;;;;;10597:15:0;;:53;;10635:6;10643;10597:53;;;10616:6;10624;10597:53;10578:72;;-1:-1:-1;10578:72:0;-1:-1:-1;;;;;;10669:20:0;;10661:61;;;;;-1:-1:-1;;;10661:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10385:345;;;;;:::o;19068:1376::-;19381:48;;;-1:-1:-1;;;19381:48:0;;-1:-1:-1;;;;;19381:48:0;;;;;;;;;;;;;;;;19286:12;;;;;;19397:7;19381:32;;;;;;:48;;;;;;;;;;;;;;;:32;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;19381:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19381:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19381:48:0;-1:-1:-1;;;;;19381:62:0;;19377:146;;;19460:51;;;-1:-1:-1;;;19460:51:0;;-1:-1:-1;;;;;19460:51:0;;;;;;;;;;;;;;;;19476:7;19460:35;;;;;;:51;;;;;;;;;;;;;;;-1:-1:-1;19460:35:0;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;19460:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19460:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;19377:146:0;19534:13;19549;19566:51;19593:7;19602:6;19610;19566:26;:51::i;:::-;19533:84;;;;19632:8;19644:1;19632:13;:30;;;;-1:-1:-1;19649:13:0;;19632:30;19628:809;;;19701:14;;-1:-1:-1;19717:14:0;;-1:-1:-1;19628:809:0;;;19765:19;19787:56;19808:14;19824:8;19834;19787:20;:56::i;:::-;19765:78;;19880:14;19862;:32;19858:568;;19941:10;19923:14;:28;;19915:77;;;;-1:-1:-1;;;19915:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20033:14;;-1:-1:-1;20049:14:0;-1:-1:-1;20049:14:0;19858:568;;;20105:19;20127:56;20148:14;20164:8;20174;20127:20;:56::i;:::-;20105:78;;20227:14;20209;:32;;20202:40;;;;20287:10;20269:14;:28;;20261:77;;;;-1:-1:-1;;;20261:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20379:14;-1:-1:-1;20395:14:0;;-1:-1:-1;19858:568:0;19628:809;;19068:1376;;;;;;;;;;;:::o;7498:142::-;7550:6;7577;;;:30;;-1:-1:-1;;7592:5:0;;;7606:1;7601;7592:5;7601:1;7587:15;;;;;:20;7577:30;7569:63;;;;;-1:-1:-1;;;7569:63:0;;;;;;;;;;;;-1:-1:-1;;;7569:63:0;;;;;;;;;;;;;;7225:128;7309:5;;;7304:16;;;;7296:49;;;;;-1:-1:-1;;;7296:49:0;;;;;;;;;;;;-1:-1:-1;;;7296:49:0;;;;;;;;;;;;;;11358:432;11451:13;11466;11493:14;11512:26;11523:6;11531;11512:10;:26::i;:::-;11492:46;;;11549:32;11557:7;11566:6;11574;11549:7;:32::i;:::-;;11593:13;11608;11639:32;11647:7;11656:6;11664;11639:7;:32::i;:::-;-1:-1:-1;;;;;11626:58:0;;:60;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11626:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11626:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11626:60:0;;;;;;;-1:-1:-1;;;;;11592:94:0;;;;-1:-1:-1;11592:94:0;;-1:-1:-1;;;;;;11720:16:0;;;;;;;:62;;11763:8;11773;11720:62;;;11740:8;11750;11720:62;11697:85;;;;-1:-1:-1;11358:432:0;-1:-1:-1;;;;;;;11358:432:0:o
Swarm Source
ipfs://9b559f038c5ceaffc78abb863c76df8a9a5ff1302f25c23a01674dd742044dd0
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
BSC | 100.00% | $0.049715 | 4 | $0.1988 |
[ 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.