Contract Overview
Balance:
0 BTT
BTT Value:
$0.00
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
TorrRouter
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at bttcscan.com on 2022-11-23 */ /** *Submitted for verification at bttcscan.com on 2022-11-15 */ /** *Submitted for verification at BTTCScan.com on 2021-12-15 */ // File: @uniswap\lib\contracts\libraries\TransferHelper.sol 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"); } } // File: contracts\interfaces\ITorrRouter01.sol pragma solidity >=0.6.2; interface ITorrRouter01 { 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); } // File: contracts\interfaces\ITorrRouter02.sol pragma solidity >=0.6.2; interface ITorrRouter02 is ITorrRouter01 { 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; } // File: contracts\interfaces\IPancakeFactory.sol pragma solidity >=0.5.0; 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); } // File: contracts\libraries\SafeMath.sol pragma solidity =0.6.6; // 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 pragma solidity >=0.5.0; 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"28cd5a77358a379fabb988e35bf44058d364701c35a40a0dfaf2444446794a04" // 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(997); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(1000).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(1000); uint denominator = reserveOut.sub(amountOut).mul(997); amountIn = (numerator / denominator).add(1); } // 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] ); 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); } } } // 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\TorrRouter.sol pragma solidity =0.6.6; contract TorrRouter is ITorrRouter02 { using SafeMath for uint; address public immutable override factory; address public immutable override WETH; modifier ensure(uint deadline) { require(deadline >= block.timestamp, "TorrRouter: EXPIRED"); _; } constructor(address _factory, address _WETH) public { factory = _factory; WETH = _WETH; } receive() external payable { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } // **** 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, "TorrRouter: INSUFFICIENT_B_AMOUNT" ); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = PancakeLibrary.quote( amountBDesired, reserveB, reserveA ); assert(amountAOptimal <= amountADesired); require( amountAOptimal >= amountAMin, "TorrRouter: 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 payable virtual override 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, "TorrRouter: INSUFFICIENT_A_AMOUNT"); require(amountB >= amountBMin, "TorrRouter: 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, "TorrRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, 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, "TorrRouter: EXCESSIVE_INPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactETHForTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, "TorrRouter: INVALID_PATH"); amounts = PancakeLibrary.getAmountsOut(factory, msg.value, path); require( amounts[amounts.length - 1] >= amountOutMin, "TorrRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); 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, "TorrRouter: INVALID_PATH"); amounts = PancakeLibrary.getAmountsIn(factory, amountOut, path); require( amounts[0] <= amountInMax, "TorrRouter: EXCESSIVE_INPUT_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]); } 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, "TorrRouter: INVALID_PATH"); amounts = PancakeLibrary.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "TorrRouter: 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]); } function swapETHForExactTokens( uint amountOut, address[] calldata path, address to, uint deadline ) external payable virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, "TorrRouter: INVALID_PATH"); amounts = PancakeLibrary.getAmountsIn(factory, amountOut, path); require( amounts[0] <= msg.value, "TorrRouter: EXCESSIVE_INPUT_AMOUNT" ); 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 > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]); } // **** 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) { TransferHelper.safeTransferFrom( path[0], msg.sender, 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, "TorrRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable virtual override ensure(deadline) { require(path[0] == WETH, "TorrRouter: INVALID_PATH"); uint amountIn = msg.value; 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, "TorrRouter: 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, "TorrRouter: 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, "TorrRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); IWETH(WETH).withdraw(amountOut); 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); } }
[{"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":[{"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":[{"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":"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
60c060405234801561001057600080fd5b5060405162004756380380620047568339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145d1620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372e52806137715280613a545280613bd3528061400352806140b1528061413152506145d16000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b81526020600482015260136024820152600080516020614467833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b81526020600482015260136024820152600080516020614467833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b8152602060048201526018602482015260008051602061457c833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602681526020018061441f6026913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b81526020600482015260136024820152600080516020614467833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602681526020018061441f6026913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b81526020600482015260136024820152600080516020614467833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b8152602060048201526018602482015260008051602061457c833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260228152602001806144456022913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b81526020600482015260136024820152600080516020614467833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b815260040180806020018281038252602681526020018061441f6026913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b81526020600482015260136024820152600080516020614467833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b8152602060048201526018602482015260008051602061457c833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b815260040180806020018281038252602681526020018061441f6026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b81526020600482015260136024820152600080516020614467833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b8152602060048201526018602482015260008051602061457c833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b815260040180806020018281038252602681526020018061441f6026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b81526020600482015260136024820152600080516020614467833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260228152602001806144456022913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b81526020600482015260136024820152600080516020614467833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b81526020600482015260136024820152600080516020614467833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b8152602060048201526018602482015260008051602061457c833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b81526020600482015260136024820152600080516020614467833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260218152602001806144cb6021913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260218152602001806144aa6021913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b81526020600482015260136024820152600080516020614467833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b81526020600482015260136024820152600080516020614467833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050612a748b338388613522565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b81526020600482015260136024820152600080516020614467833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b8152602060048201526018602482015260008051602061457c833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b81526004018080602001828103825260228152602001806144456022913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b815260040180806020018281038252602381526020018061450f6023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b81526004018080602001828103825260298152602001806143cc6029913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260268152602001806145326026913960400191505060405180910390fd5b60006132c5856103e563ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f3886103e863ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f28cd5a77358a379fabb988e35bf44058d364701c35a40a0dfaf2444446794a04609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b81526004018080602001828103825260248152602001806145586024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000000000000000000000000000000000000000000008888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000000000000000000000000000000000000000000008585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b815260040180806020018281038252602a8152602001806143f5602a913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b81526004018080602001828103825260268152602001806145326026913960400191505060405180910390fd5b6000613e076103e8613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216103e5613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b81526004018080602001828103825260238152602001806144ec6023913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b81526004018080602001828103825260268152602001806145326026913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b81526004018080602001828103825260238152602001806144876023913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260218152602001806144aa6021913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260218152602001806144cb6021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050614315868686613462565b50600080614324888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435c57600080fd5b505afa158015614370573d6000803e3d6000fd5b505050506040513d606081101561438657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143b95780826143bc565b81815b9099909850965050505050505056fe50616e63616b654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54546f7272526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54546f7272526f757465723a204558434553534956455f494e5055545f414d4f554e54546f7272526f757465723a20455850495245440000000000000000000000000050616e63616b654c6962726172793a204944454e544943414c5f414444524553534553546f7272526f757465723a20494e53554646494349454e545f425f414d4f554e54546f7272526f757465723a20494e53554646494349454e545f415f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454450616e63616b654c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544546f7272526f757465723a20494e56414c49445f504154480000000000000000a264697066735822122088c4d7c3667b93474bafdf021acc565e4c4c0fadd9b7dff5d12e2357c858929464736f6c63430006060033000000000000000000000000ea34610f4373c8d75ed1810a6096197f297f27860000000000000000000000008d193c6efa90bcff940a98785d1ce9d093d3dc8a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ea34610f4373c8d75ed1810a6096197f297f27860000000000000000000000008d193c6efa90bcff940a98785d1ce9d093d3dc8a
-----Decoded View---------------
Arg [0] : _factory (address): 0xea34610f4373c8d75ed1810a6096197f297f2786
Arg [1] : _WETH (address): 0x8d193c6efa90bcff940a98785d1ce9d093d3dc8a
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000ea34610f4373c8d75ed1810a6096197f297f2786
Arg [1] : 0000000000000000000000008d193c6efa90bcff940a98785d1ce9d093d3dc8a
Deployed ByteCode Sourcemap
18442:21258:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18907:10;-1:-1:-1;;;;;18921:4:0;18907:18;;18900:26;;;;18442:21258;;12:1:-1;9;2:12;23725:723:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23725:723:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23725:723:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;38684:244;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38684:244:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38684:244:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;32274:964;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32274:964:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32274:964:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32274:964:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32274:964: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;32274:964:0;;-1:-1:-1;32274:964:0;-1:-1:-1;;;;;;32274:964: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;32274:964:0;;;;;;;;;;;;;;;;;39446:251;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39446:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;39446:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;39446:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;39446: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;39446:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;39446:251:0;;-1:-1:-1;39446:251:0;;-1:-1:-1;;;;;39446:251:0:i;24456:904::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24456:904:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;24456:904:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28996:745::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28996:745:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28996:745:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28996:745:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28996:745: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;28996:745:0;;-1:-1:-1;28996:745:0;-1:-1:-1;;;;;;28996:745:0;;;;;;;;:::i;31324:942::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31324:942:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31324:942:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31324:942:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31324:942: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;31324:942:0;;-1:-1:-1;31324:942:0;-1:-1:-1;;;;;;31324:942:0;;;;;;;;:::i;27088:908::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27088:908:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;27088:908:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35889:763::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35889:763:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;35889:763:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;35889:763:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35889:763: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;35889:763:0;;-1:-1:-1;35889:763:0;-1:-1:-1;;;;;;35889:763:0;;;;;;;;:::i;37546:866::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37546:866:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;37546:866:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;37546:866:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;37546:866: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;37546:866:0;;-1:-1:-1;37546:866:0;-1:-1:-1;;;;;;37546:866:0;;;;;;;;:::i;30480:836::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30480:836:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30480:836:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30480:836: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;30480:836:0;;-1:-1:-1;30480:836:0;-1:-1:-1;;;;;;30480:836:0;;;;;;;;:::i;38936:243::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38936:243:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38936:243:0;;;;;;;;;;;;:::i;29749:723::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29749:723:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29749:723:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29749:723:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29749:723: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;29749:723:0;;-1:-1:-1;29749:723:0;-1:-1:-1;;;;;;29749:723:0;;;;;;;;:::i;18566:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18566:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;18566:38:0;;;;;;;;;;;;;;38456:220;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38456:220:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38456:220:0;;;;;;;;;;;;:::i;26330:750::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26330:750:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;26330:750:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;36660:878::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;36660:878:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;36660:878:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36660:878: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;36660:878:0;;-1:-1:-1;36660:878:0;-1:-1:-1;;;;;;36660:878:0;;;;;;;;:::i;22793:924::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22793:924:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22793:924:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18518:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18518:41:0;;;:::i;39187:251::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39187:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;39187:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;39187:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;39187: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;39187:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;39187:251:0;;-1:-1:-1;39187:251:0;;-1:-1:-1;;;;;39187:251:0:i;25368:883::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25368:883:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;25368:883:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20727:923::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20727:923:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20727:923:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;21658:1092;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21658:1092:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33246:962::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33246:962:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33246:962:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33246:962: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;33246:962:0;;-1:-1:-1;33246:962:0;-1:-1:-1;;;;;;33246:962:0;;;;;;;;:::i;23725:723::-;24007:16;24025:14;23979:8;18675:15;18663:8;:27;;18655:59;;;;;-1:-1:-1;;;18655:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18655:59:0;;;;;;;;;;;;;;;24084:196:::1;24114:5;24134:4;24153:9;24177:14;24206:12;24241:4;24261:8;24084:15;:196::i;:::-;24057:223:::0;;-1:-1:-1;24057:223:0;-1:-1:-1;24291:51:0::1;24319:5:::0;24326:2;24057:223;24291:27:::1;:51::i;:::-;24359:4;-1:-1:-1::0;;;;;24353:20:0::1;;24374:9;24353:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24353:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24353:31:0;;;;24395:45;24426:2;24430:9;24395:30;:45::i;:::-;23725:723:::0;;;;;;;;;;:::o;38684:244::-;38826:14;38860:60;38888:8;38898:9;38909:10;38860:27;:60::i;:::-;38853:67;38684:244;-1:-1:-1;;;;38684:244:0:o;32274:964::-;32540:21;32512:8;18675:15;18663:8;:27;;18655:59;;;;;-1:-1:-1;;;18655:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18655:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32612:4:0::1;32587:29;:4:::0;;-1:-1:-1;;32592:15:0;;32587:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32587:21:0::1;-1:-1:-1::0;;;;;32587:29:0::1;;32579:66;;;::::0;;-1:-1:-1;;;32579:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32579:66:0;;;;;;;;;;;;;::::1;;32666:53;32695:7;32704:8;32714:4;;32666:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32666:28:0::1;::::0;-1:-1:-1;;;32666:53:0:i:1;:::-;32656:63;;32783:12;32752:7;32777:1;32760:7;:14;:18;32752:27;;;;;;;;;;;;;;:43;;32730:131;;;;-1:-1:-1::0;;;32730:131:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32872:178;32918:4;;32923:1;32918:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32918:7:0::1;32940:10;32965:49;32988:7;32997:4;;33002:1;32997:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32997:7:0::1;33006:4;;33011:1;33006:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33006:7:0::1;32965:22;:49::i;:::-;33029:7;33037:1;33029:10;;;;;;;;;;;;;;32872:31;:178::i;:::-;33061:35;33067:7;33076:4;;33061:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33090:4:0::1;::::0;-1:-1:-1;33061:5:0::1;::::0;-1:-1:-1;;33061:35:0:i:1;:::-;33113:4;-1:-1:-1::0;;;;;33107:20:0::1;;33128:7;33153:1;33136:7;:14;:18;33128:27;;;;;;;;;;;;;;33107:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33107:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33107:49:0;;;;33167:63;33198:2;33202:7;33227:1;33210:7;:14;:18;33202:27;;;;;;;;;;;;;;33167:30;:63::i;:::-;32274:964:::0;;;;;;;;;:::o;39446:251::-;39590:21;39636:53;39664:7;39673:9;39684:4;39636:27;:53::i;:::-;39629:60;;39446:251;;;;;:::o;24456:904::-;24789:12;24803;24828;24843:47;24866:7;24875:6;24883;24843:22;:47::i;:::-;24828:62;;24901:10;24914;:33;;24938:9;24914:33;;;-1:-1:-1;;24914:33:0;24958:180;;;-1:-1:-1;;;24958:180:0;;24998:10;24958:180;;;;25031:4;24958:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24901:46;;-1:-1:-1;;;;;;24958:25:0;;;;;:180;;;;;-1:-1:-1;;24958:180:0;;;;;;;;-1:-1:-1;24958:25:0;:180;;;2:2:-1;;;;27:1;24;17:12;2:2;24958:180:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24958:180:0;;;;25170:182;25200:6;25221;25242:9;25266:10;25291;25316:2;25333:8;25170:15;:182::i;:::-;25149:203;;;;;;;;24456:904;;;;;;;;;;;;;;;;:::o;28996:745::-;29265:21;29237:8;18675:15;18663:8;:27;;18655:59;;;;;-1:-1:-1;;;18655:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18655:59:0;;;;;;;;;;;;;;;29314:53:::1;29343:7;29352:8;29362:4;;29314:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29314:28:0::1;::::0;-1:-1:-1;;;29314:53:0:i:1;:::-;29304:63;;29431:12;29400:7;29425:1;29408:7;:14;:18;29400:27;;;;;;;;;;;;;;:43;;29378:131;;;;-1:-1:-1::0;;;29378:131:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29520:178;29566:4;;29571:1;29566:7;;;;;;29520:178;29709:24;29715:7;29724:4;;29709:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29730:2:0;;-1:-1:-1;29709:5:0::1;::::0;-1:-1:-1;;29709:24:0:i:1;31324:942::-:0;31590:21;31562:8;18675:15;18663:8;:27;;18655:59;;;;;-1:-1:-1;;;18655:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18655:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31662:4:0::1;31637:29;:4:::0;;-1:-1:-1;;31642:15:0;;31637:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31637:21:0::1;-1:-1:-1::0;;;;;31637:29:0::1;;31629:66;;;::::0;;-1:-1:-1;;;31629:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31629:66:0;;;;;;;;;;;;;::::1;;31716:53;31744:7;31753:9;31764:4;;31716:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31716:27:0::1;::::0;-1:-1:-1;;;31716:53:0:i:1;:::-;31706:63;;31816:11;31802:7;31810:1;31802:10;;;;;;;;;;;;;;:25;;31780:109;;;;-1:-1:-1::0;;;31780:109:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27088:908:::0;27433:14;27460:12;27475:44;27498:7;27507:5;27514:4;27475:22;:44::i;:::-;27460:59;;27530:10;27543;:33;;27567:9;27543:33;;;-1:-1:-1;;27543:33:0;27587:180;;;-1:-1:-1;;;27587:180:0;;27627:10;27587:180;;;;27660:4;27587:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27530:46;;-1:-1:-1;;;;;;27587:25:0;;;;;:180;;;;;-1:-1:-1;;27587:180:0;;;;;;;;-1:-1:-1;27587:25:0;:180;;;2:2:-1;;;;27:1;24;17:12;2:2;27587:180:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27587:180:0;;;;27790:198;27852:5;27872:9;27896:14;27925:12;27952:2;27969:8;27790:47;:198::i;:::-;27778:210;27088:908;-1:-1:-1;;;;;;;;;;;;;27088:908:0:o;35889:763::-;36123:8;18675:15;18663:8;:27;;18655:59;;;;;-1:-1:-1;;;18655:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18655:59:0;;;;;;;;;;;;;;;36144:176:::1;36190:4;;36195:1;36190:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;36190:7:0::1;36212:10;36237:49;36260:7;36269:4;;36274:1;36269:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;36269:7:0::1;36278:4;;36283:1;36278:7;;;;;;36237:49;36301:8;36144:31;:176::i;:::-;36331:18;36359:4:::0;;-1:-1:-1;;36364:15:0;;36359:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;36359:21:0::1;-1:-1:-1::0;;;;;36352:39:0::1;;36392:2;36352:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;36352:43:0::1;-1:-1:-1::0;;;;;36352:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36352:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36352:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36352:43:0;36406:44:::1;::::0;;36352:43:::1;36406:44:::0;;::::1;::::0;;;;;;;;;;;36352:43;;-1:-1:-1;36406:44:0::1;::::0;;;36441:4;;;;;;36406:44;::::1;::::0;36441:4;;36406:44;36441:4;36406:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;36447:2:0;;-1:-1:-1;36406:34:0::1;::::0;-1:-1:-1;;36406:44:0:i:1;:::-;36566:12:::0;36483:62:::1;36531:13:::0;36490:4;;-1:-1:-1;;36495:15:0;;36490:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;36490:21:0::1;-1:-1:-1::0;;;;;36483:39:0::1;;36523:2;36483:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;36483:43:0::1;-1:-1:-1::0;;;;;36483:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36483:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36483:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36483:43:0;;:62:::1;:47;:62;:::i;:::-;:95;;36461:183;;;;-1:-1:-1::0;;;36461:183:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18725:1;35889:763:::0;;;;;;;:::o;37546:866::-;37777:8;18675:15;18663:8;:27;;18655:59;;;;;-1:-1:-1;;;18655:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18655:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;37831:4:0::1;37806:29;:4:::0;;-1:-1:-1;;37811:15:0;;37806:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37806:21:0::1;-1:-1:-1::0;;;;;37806:29:0::1;;37798:66;;;::::0;;-1:-1:-1;;;37798:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;37798:66:0;;;;;;;;;;;;;::::1;;37875:176;37921:4;;37926:1;37921:7;;;;;;37875:176;38062:55;38097:4;;38062:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;38111:4:0::1;::::0;-1:-1:-1;38062:34:0::1;::::0;-1:-1:-1;;38062:55:0:i:1;:::-;38145:37;::::0;;-1:-1:-1;;;38145:37:0;;38176:4:::1;38145:37;::::0;::::1;::::0;;;38128:14:::1;::::0;-1:-1:-1;;;;;38152:4:0::1;38145:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;38145:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38145:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;38145:37:0;;-1:-1:-1;38215:25:0;;::::1;;38193:113;;;;-1:-1:-1::0;;;38193:113:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38323:4;-1:-1:-1::0;;;;;38317:20:0::1;;38338:9;38317:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38317:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38317:31:0;;;;38359:45;38390:2;38394:9;38359:30;:45::i;30480:836::-:0;30739:21;30711:8;18675:15;18663:8;:27;;18655:59;;;;;-1:-1:-1;;;18655:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18655:59:0;;;;;;;;;;;;;;;30797:4:::1;-1:-1:-1::0;;;;;30786:15:0::1;:4;;30791:1;30786:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30786:7:0::1;-1:-1:-1::0;;;;;30786:15:0::1;;30778:52;;;::::0;;-1:-1:-1;;;30778:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;30778:52:0;;;;;;;;;;;;;::::1;;30851:54;30880:7;30889:9;30900:4;;30851:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30851:28:0::1;::::0;-1:-1:-1;;;30851:54:0:i:1;:::-;30841:64;;30969:12;30938:7;30963:1;30946:7;:14;:18;30938:27;;;;;;;;;;;;;;:43;;30916:131;;;;-1:-1:-1::0;;;30916:131:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31064:4;-1:-1:-1::0;;;;;31058:19:0::1;;31085:7;31093:1;31085:10;;;;;;;;;;;;;;31058:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31058:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31058:40:0;;;;;31136:4;-1:-1:-1::0;;;;;31130:20:0::1;;31169:49;31192:7;31201:4;;31206:1;31201:7;;;;;;31169:49;31237:7;31245:1;31237:10;;;;;;;;;;;;;;31130:132;;;;;;;;;;;;;-1:-1:-1::0;;;;;31130:132:0::1;-1:-1:-1::0;;;;;31130:132:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31130:132:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31130:132:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31130:132:0;31109:164:::1;;;;31284:24;31290:7;31299:4;;31284:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31305:2:0;;-1:-1:-1;31284:5:0::1;::::0;-1:-1:-1;;31284:24:0:i:1;:::-;30480:836:::0;;;;;;;;:::o;38936:243::-;39078:13;39111:60;39138:9;39149;39160:10;39111:26;:60::i;29749:723::-;30018:21;29990:8;18675:15;18663:8;:27;;18655:59;;;;;-1:-1:-1;;;18655:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18655:59:0;;;;;;;;;;;;;;;30067:53:::1;30095:7;30104:9;30115:4;;30067:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30067:27:0::1;::::0;-1:-1:-1;;;30067:53:0:i:1;:::-;30057:63;;30167:11;30153:7;30161:1;30153:10;;;;;;;;;;;;;;:25;;30131:109;;;;-1:-1:-1::0;;;30131:109:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18566:38:::0;;;:::o;38456:220::-;38587:12;38619:49;38640:7;38649:8;38659;38619:20;:49::i;26330:750::-;26596:14;26577:8;18675:15;18663:8;:27;;18655:59;;;;;-1:-1:-1;;;18655:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18655:59:0;;;;;;;;;;;;;;;26639:196:::1;26669:5;26689:4;26708:9;26732:14;26761:12;26796:4;26816:8;26639:15;:196::i;:::-;26925:38;::::0;;-1:-1:-1;;;26925:38:0;;26957:4:::1;26925:38;::::0;::::1;::::0;;;26623:212;;-1:-1:-1;26846:128:0::1;::::0;-1:-1:-1;26888:5:0;;26908:2;;-1:-1:-1;;;;;26925: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;26925:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26925:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26925:38:0;26846:27:::1;:128::i;:::-;26991:4;-1:-1:-1::0;;;;;26985:20:0::1;;27006:9;26985:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26985:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26985:31:0;;;;27027:45;27058:2;27062:9;27027:30;:45::i;36660:878::-:0;36875:8;18675:15;18663:8;:27;;18655:59;;;;;-1:-1:-1;;;18655:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18655:59:0;;;;;;;;;;;;;;;36915:4:::1;-1:-1:-1::0;;;;;36904:15:0::1;:4;;36909:1;36904:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;36904:7:0::1;-1:-1:-1::0;;;;;36904:15:0::1;;36896:52;;;::::0;;-1:-1:-1;;;36896:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;36896:52:0;;;;;;;;;;;;;::::1;;36959:13;36975:9;36959:25;;37001:4;-1:-1:-1::0;;;;;36995:19:0::1;;37022:8;36995:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36995:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36995:38:0;;;;;37071:4;-1:-1:-1::0;;;;;37065:20:0::1;;37104:49;37127:7;37136:4;;37141:1;37136:7;;;;;;37104:49;37172:8;37065:130;;;;;;;;;;;;;-1:-1:-1::0;;;;;37065:130:0::1;-1:-1:-1::0;;;;;37065:130:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;37065:130:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37065:130:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;37065:130:0;37044:162:::1;;;;37217:18;37245:4:::0;;-1:-1:-1;;37250:15:0;;37245:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37245:21:0::1;-1:-1:-1::0;;;;;37238:39:0::1;;37278:2;37238:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;37238:43:0::1;-1:-1:-1::0;;;;;37238:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;37238:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37238:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;37238:43:0;37292:44:::1;::::0;;37238:43:::1;37292:44:::0;;::::1;::::0;;;;;;;;;;;37238:43;;-1:-1:-1;37292:44:0::1;::::0;;;37327:4;;;;;;37292:44;::::1;::::0;37327:4;;37292:44;37327:4;37292:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;37333:2:0;;-1:-1:-1;37292:34:0::1;::::0;-1:-1:-1;;37292:44:0:i:1;:::-;37452:12:::0;37369:62:::1;37417:13:::0;37376:4;;-1:-1:-1;;37381:15:0;;37376:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37376:21:0::1;-1:-1:-1::0;;;;;37369:39:0::1;;37409:2;37369:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;37369:43:0::1;-1:-1:-1::0;;;;;37369:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;22793:924:0::0;23092:12;23106;23064:8;18675:15;18663:8;:27;;18655:59;;;;;-1:-1:-1;;;18655:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18655:59:0;;;;;;;;;;;;;;;23136:12:::1;23151:47;23174:7;23183:6;23191;23151:22;:47::i;:::-;23209:60;::::0;;-1:-1:-1;;;23209:60:0;;23241:10:::1;23209:60;::::0;::::1;::::0;-1:-1:-1;;;;;23209:31:0;::::1;:60:::0;;;;;;;;;;;;;;23136:62;;-1:-1:-1;23209:31:0;;::::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;23209:31:0;:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;23209:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23209:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;23337:27:0::1;::::0;;-1:-1:-1;;;23337:27:0;;-1:-1:-1;;;;;23337:27:0;;::::1;;::::0;::::1;::::0;;;23307:12:::1;::::0;;;23337:23;;::::1;::::0;::::1;::::0;:27;;;;;;;;;;;23307:12;23337:23;:27;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;23337:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23337:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23337:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;23337:27:0;-1:-1:-1;23376:14:0::1;23396:41;23422:6:::0;23430;23396:25:::1;:41::i;:::-;23375:62;;;23479:6;-1:-1:-1::0;;;;;23469:16:0::1;:6;-1:-1:-1::0;;;;;23469:16:0::1;;:84;;23536:7;23545;23469:84;;;23502:7;23511;23469:84;23448:105:::0;;-1:-1:-1;23448:105:0;-1:-1:-1;23572:21:0;;::::1;;23564:67;;;;-1:-1:-1::0;;;23564:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23661:10;23650:7;:21;;23642:67;;;;-1:-1:-1::0;;;23642:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18725:1;;;;22793:924:::0;;;;;;;;;;;:::o;18518:41::-;;;:::o;39187:251::-;39331:21;39377:53;39406:7;39415:8;39425:4;39377:28;:53::i;25368:883::-;25684:16;25702:14;25729:12;25744:44;25767:7;25776:5;25783:4;25744:22;:44::i;:::-;25729:59;;25799:10;25812;:33;;25836:9;25812:33;;;-1:-1:-1;;25812:33:0;25856:180;;;-1:-1:-1;;;25856:180:0;;25896:10;25856:180;;;;25929:4;25856:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25799:46;;-1:-1:-1;;;;;;25856:25:0;;;;;:180;;;;;-1:-1:-1;;25856:180:0;;;;;;;;-1:-1:-1;25856:25:0;:180;;;2:2:-1;;;;27:1;24;17:12;2:2;25856:180:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25856:180:0;;;;26074:169;26107:5;26127:9;26151:14;26180:12;26207:2;26224:8;26074:18;:169::i;:::-;26047:196;;;;-1:-1:-1;25368:883:0;-1:-1:-1;;;;;;;;;;;;;25368:883:0:o;20727:923::-;21074:12;21101;21128:14;21032:8;18675:15;18663:8;:27;;18655:59;;;;;-1:-1:-1;;;18655:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18655:59:0;;;;;;;;;;;;;;;21191:174:::1;21219:6;21240;21261:14;21290;21319:10;21344;21191:13;:174::i;:::-;21170:195:::0;;-1:-1:-1;21170:195:0;-1:-1:-1;21376:12:0::1;21391:47;21414:7;21423:6:::0;21431;21391:22:::1;:47::i;:::-;21376:62;;21449:66;21481:6;21489:10;21501:4;21507:7;21449:31;:66::i;:::-;21526;21558:6;21566:10;21578:4;21584:7;21526:31;:66::i;:::-;21628:4;-1:-1:-1::0;;;;;21615:23:0::1;;21639:2;21615:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;21615:27:0::1;-1:-1:-1::0;;;;;21615:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21615:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21615:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21615:27:0;20727:923;;;;-1:-1:-1;21615:27:0;;-1:-1:-1;20727:923:0;;-1:-1:-1;;;;;;;;;20727:923:0:o;21658:1092::-;21979:16;22010:14;22039;21937:8;18675:15;18663:8;:27;;18655:59;;;;;-1:-1:-1;;;18655:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18655:59:0;;;;;;;;;;;;;;;22108:176:::1;22136:5;22156:4;22175:18;22208:9;22232:14;22261:12;22108:13;:176::i;:::-;22081:203:::0;;-1:-1:-1;22081:203:0;-1:-1:-1;22295:12:0::1;22310:44;22333:7;22342:5:::0;22349:4:::1;22310:22;:44::i;:::-;22295:59;;22365:69;22397:5;22404:10;22416:4;22422:11;22365:31;:69::i;:::-;22451:4;-1:-1:-1::0;;;;;22445:19:0::1;;22472:9;22445:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22445:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22445:39:0;;;;;22508:4;-1:-1:-1::0;;;;;22502:20:0::1;;22523:4;22529:9;22502:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;22502:37:0::1;-1:-1:-1::0;;;;;22502:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22502:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22502:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22502:37:0;22495:45:::1;;;;22576:4;-1:-1:-1::0;;;;;22563:23:0::1;;22587:2;22563:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;22563:27:0::1;-1:-1:-1::0;;;;;22563:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22563:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22563:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22563:27:0;;-1:-1:-1;22641:9:0::1;:21:::0;-1:-1:-1;22637:105:0::1;;;22677:65;22708:10;22732:9;22720;:21;22677:30;:65::i;:::-;18725:1;21658:1092:::0;;;;;;;;;;;:::o;33246:962::-;33502:21;33474:8;18675:15;18663:8;:27;;18655:59;;;;;-1:-1:-1;;;18655:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18655:59:0;;;;;;;;;;;;;;;33560:4:::1;-1:-1:-1::0;;;;;33549:15:0::1;:4;;33554:1;33549:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33549:7:0::1;-1:-1:-1::0;;;;;33549:15:0::1;;33541:52;;;::::0;;-1:-1:-1;;;33541:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33541:52:0;;;;;;;;;;;;;::::1;;33614:53;33642:7;33651:9;33662:4;;33614:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33614:27:0::1;::::0;-1:-1:-1;;;33614:53:0:i:1;:::-;33604:63;;33714:9;33700:7;33708:1;33700:10;;;;;;;;;;;;;;:23;;33678:107;;;;-1:-1:-1::0;;;33678:107:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33802:4;-1:-1:-1::0;;;;;33796:19:0::1;;33823:7;33831:1;33823:10;;;;;;;;;;;;;;33796:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33796:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33796:40:0;;;;;33874:4;-1:-1:-1::0;;;;;33868:20:0::1;;33907:49;33930:7;33939:4;;33944:1;33939:7;;;;;;33907:49;33975:7;33983:1;33975:10;;;;;;;;;;;;;;33868:132;;;;;;;;;;;;;-1:-1:-1::0;;;;;33868:132:0::1;-1:-1:-1::0;;;;;33868:132:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33868:132:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33868:132:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33868:132:0;33847:164:::1;;;;34022:24;34028:7;34037:4;;34022:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34043:2:0;;-1:-1:-1;34022:5:0::1;::::0;-1:-1:-1;;34022:24:0:i:1;:::-;34109:7;34117:1;34109:10;;;;;;;;;;;;;;34097:9;:22;34093:107;;;34134:66;34165:10;34189:7;34197:1;34189:10;;;;;;;;;;;;;;34177:9;:22;34134:30;:66::i;838:456::-:0;1081:45;;;-1:-1:-1;;;;;1081:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1081:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1056:81:0;;;;1021:12;;1035:17;;1056:10;;;;1081:45;1056:81;;;25:18:-1;1056:81: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;;;1056:81: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;;1020:117:0;;;;1170:7;:57;;;;-1:-1:-1;1182:11:0;;:16;;:44;;;1213:4;1202:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1202:24:0;1182:44;1148:138;;;;;-1:-1:-1;;;1148:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;838:456;;;;;:::o;1816:197::-;1926:12;;;1886;1926;;;;;;;;;-1:-1:-1;;;;;1904:7:0;;;1919:5;;1904:35;;;;;;;;;;;;;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;;;1904:35: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;;1885:54:0;;;1958:7;1950:55;;;;-1:-1:-1;;;1950:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1816:197;;;:::o;14512:584::-;14639:14;14685:1;14674:8;:12;14666:66;;;;-1:-1:-1;;;14666:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14777:1;14765:9;:13;:31;;;;;14795:1;14782:10;:14;14765:31;14743:119;;;;-1:-1:-1;;;14743:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14873:20;14896:17;:8;14909:3;14896:17;:12;:17;:::i;:::-;14873:40;-1:-1:-1;14924:14:0;14941:31;14873:40;14961:10;14941:31;:19;:31;:::i;:::-;14924:48;-1:-1:-1;14983:16:0;15002:40;15026:15;15002:19;:9;15016:4;15002:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;14983:59;;15077:11;15065:9;:23;;;;;;;14512:584;-1:-1:-1;;;;;;;14512:584:0:o;15838:609::-;15973:21;16030:1;16015:4;:11;:16;;16007:57;;;;;-1:-1:-1;;;16007:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16096:4;:11;16085:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16085:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;16085:23:0;;16075:33;;16132:8;16119:7;16127:1;16119:10;;;;;;;;;;;;;:21;;;;;16156:6;16151:289;16182:1;16168:4;:11;:15;16164:1;:19;16151:289;;;16206:14;16222:15;16241:108;16271:7;16297:4;16302:1;16297:7;;;;;;;;;;;;;;16323:4;16328:1;16332;16328:5;16323:11;;;;;;;;;;;;;;16241;:108::i;:::-;16205:144;;;;16381:47;16394:7;16402:1;16394:10;;;;;;;;;;;;;;16406:9;16417:10;16381:12;:47::i;:::-;16364:7;16372:1;16376;16372:5;16364:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;16185:3:0;;16151:289;;;;15838:609;;;;;:::o;12665:648::-;12788:12;12814:14;12830;12848:26;12859:6;12867;12848:10;:26::i;:::-;13090:32;;;-1:-1:-1;;13090:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;13090:32:0;;;;;13080:43;;;;;;-1:-1:-1;;;;;;12969:291:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12969:291:0;;;;;;;12937:342;;;;;;;;;12665:648;-1:-1:-1;;;;;12665:648:0:o;1302:506::-;1584:51;;;-1:-1:-1;;;;;1584:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1584:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1559:87:0;;;;1524:12;;1538:17;;1559:10;;;;1584:51;1559:87;;;25:18:-1;1559:87: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;;;1559:87: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;;1523:123:0;;;;1679:7;:57;;;;-1:-1:-1;1691:11:0;;:16;;:44;;;1722:4;1711:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1711:24:0;1691:44;1657:143;;;;-1:-1:-1;;;1657:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1302:506;;;;;;:::o;28107:881::-;28248:6;28243:738;28274:1;28260:4;:11;:15;28256:1;:19;28243:738;;;28298:13;28313:14;28332:4;28337:1;28332:7;;;;;;;;;;;;;;28341:4;28346:1;28350;28346:5;28341:11;;;;;;;;;;;;;;28297:56;;;;28369:14;28389:40;28415:5;28422:6;28389:25;:40::i;:::-;28368:61;;;28444:14;28461:7;28469:1;28473;28469:5;28461:14;;;;;;;;;;;;;;28444:31;;28491:15;28508;28536:6;-1:-1:-1;;;;;28527:15:0;:5;-1:-1:-1;;;;;28527:15:0;;:95;;28603:9;28619:1;28527:95;;;28568:1;28572:9;28527:95;28490:132;;;;28637:10;28668:1;28654:4;:11;:15;28650:1;:19;:114;;28761:3;28650:114;;;28689:52;28712:7;28721:6;28729:4;28734:1;28738;28734:5;28729:11;;;;;;;;;;;;;;28689:22;:52::i;:::-;28637:127;;28792:46;28815:7;28824:5;28831:6;28792:22;:46::i;:::-;-1:-1:-1;;;;;28779:65:0;;28863:10;28892;28921:2;28952:1;28942:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;28942:12:0;87:42:-1;143:17;;-1:-1;28942:12:0;;28779:190;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28779:190:0;-1:-1:-1;;;;;28779:190: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;28779:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28779:190:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;28277:3:0;;;;;-1:-1:-1;28243:738:0;;-1:-1:-1;;;;;;;;28243:738:0;;;28107:881;;;:::o;16528:630::-;16663:21;16720:1;16705:4;:11;:16;;16697:57;;;;;-1:-1:-1;;;16697:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16786:4;:11;16775:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16775:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;16775:23:0;;16765:33;;16839:9;16809:7;16834:1;16817:7;:14;:18;16809:27;;;;;;;;;;;;;;;;;:39;16873:11;;-1:-1:-1;;16873:15:0;16859:292;16890:5;;16859:292;;16918:14;16934:15;16953:108;16983:7;17009:4;17018:1;17014;:5;17009:11;;;;;;;;;;;;;;17039:4;17044:1;17039:7;;;;;;;16953:108;16917:144;;;;17093:46;17105:7;17113:1;17105:10;;;;;;;;;;;;;;17117:9;17128:10;17093:11;:46::i;:::-;17076:7;17088:1;17084;:5;17076:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;16897:3:0;16859:292;;34355:1526;34493:6;34488:1386;34519:1;34505:4;:11;:15;34501:1;:19;34488:1386;;;34543:13;34558:14;34577:4;34582:1;34577:7;;;;;;;;;;;;;;34586:4;34591:1;34595;34591:5;34586:11;;;;;;;;;;;;;;34542:56;;;;34614:14;34634:40;34660:5;34667:6;34634:25;:40::i;:::-;34613:61;;;34689:17;34740:46;34763:7;34772:5;34779:6;34740:22;:46::i;:::-;34689:112;;34816:16;34847:17;34956:13;34971;34990:4;-1:-1:-1;;;;;34990:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34990:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34990:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34990:18:0;;;;;;;-1:-1:-1;;;;;34955:53:0;;;;-1:-1:-1;34955:53:0;;-1:-1:-1;35028:17:0;;-1:-1:-1;;;;;35069:15:0;;;;;;;:103;;35153:8;35163;35069:103;;;35109:8;35119;35069:103;35027:145;;;;35205:96;35270:12;35212:5;-1:-1:-1;;;;;35205:23:0;;35237:4;35205:38;;;;;;;;;;;;;-1:-1:-1;;;;;35205:38:0;-1:-1:-1;;;;;35205:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;35205:96:0;35191:110;;35335:151;35385:11;35419:12;35454:13;35335:27;:151::i;:::-;35320:166;;34488:1386;;;;35517:15;35534;35562:6;-1:-1:-1;;;;;35553:15:0;:5;-1:-1:-1;;;;;35553:15:0;;:101;;35632:12;35651:1;35553:101;;;35594:1;35598:12;35553:101;35516:138;;;;35669:10;35700:1;35686:4;:11;:15;35682:1;:19;:114;;35793:3;35682:114;;;35721:52;35744:7;35753:6;35761:4;35766:1;35770;35766:5;35761:11;;;;;;;35721:52;35849:12;;;35859:1;35849:12;;;;;;;;;;-1:-1:-1;;;35811:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;35811:51:0;;;;;;;;;;;;;;;;;;;;;;35669:127;;-1:-1:-1;35811:9:0;;;;;;35821:10;;35833;;35669:127;;35849:12;;35811:51;;;;;;;;35849:12;;35811:51;;;;35849: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;35811:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35811:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;34522:3:0;;;;;-1:-1:-1;34488:1386:0;;-1:-1:-1;;;;;;;;;;34488:1386:0;8782:129;8866:5;;;8861:16;;;;8853:50;;;;;-1:-1:-1;;;8853:50:0;;;;;;;;;;;;-1:-1:-1;;;8853:50:0;;;;;;;;;;;;;;15217:539;15344:13;15390:1;15378:9;:13;15370:68;;;;-1:-1:-1;;;15370:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15483:1;15471:9;:13;:31;;;;;15501:1;15488:10;:14;15471:31;15449:119;;;;-1:-1:-1;;;15449:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15579:14;15596:34;15625:4;15596:24;:9;15610;15596:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;15579:51;-1:-1:-1;15641:16:0;15660:34;15690:3;15660:25;:10;15675:9;15660:25;:14;:25;:::i;:34::-;15641:53;;15716:32;15746:1;15729:11;15717:9;:23;;;;;;;15716:32;:29;:32;:::i;:::-;15705:43;15217:539;-1:-1:-1;;;;;;15217:539:0:o;14002:388::-;14118:12;14161:1;14151:7;:11;14143:59;;;;-1:-1:-1;;;14143:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14246:1;14235:8;:12;:28;;;;;14262:1;14251:8;:12;14235:28;14213:116;;;;-1:-1:-1;;;14213:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14374:8;14350:21;:7;14362:8;14350:21;:11;:21;:::i;:::-;:32;;;;;;;14002:388;-1:-1:-1;;;;14002:388:0:o;12170:403::-;12272:14;12288;12338:6;-1:-1:-1;;;;;12328:16:0;:6;-1:-1:-1;;;;;12328:16:0;;;12320:64;;;;-1:-1:-1;;;12320:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12423:6;-1:-1:-1;;;;;12414:15:0;:6;-1:-1:-1;;;;;12414:15:0;;:79;;12478:6;12486;12414:79;;;12446:6;12454;12414:79;12395:98;;-1:-1:-1;12395:98:0;-1:-1:-1;;;;;;12512:20:0;;12504:61;;;;;-1:-1:-1;;;12504:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12170:403;;;;;:::o;19029:1690::-;19342:48;;;-1:-1:-1;;;19342:48:0;;-1:-1:-1;;;;;19342:48:0;;;;;;;;;;;;;;;;19247:12;;;;;;19358:7;19342:32;;;;;;:48;;;;;;;;;;;;;;;:32;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;19342:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19342:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19342:48:0;-1:-1:-1;;;;;19342:62:0;;19338:146;;;19421:51;;;-1:-1:-1;;;19421:51:0;;-1:-1:-1;;;;;19421:51:0;;;;;;;;;;;;;;;;19437:7;19421:35;;;;;;:51;;;;;;;;;;;;;;;-1:-1:-1;19421:35:0;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;19421:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19421:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;19338:146:0;19495:13;19510;19527:101;19568:7;19590:6;19611;19527:26;:101::i;:::-;19494:134;;;;19643:8;19655:1;19643:13;:30;;;;-1:-1:-1;19660:13:0;;19643:30;19639:1073;;;19712:14;;-1:-1:-1;19728:14:0;;-1:-1:-1;19639:1073:0;;;19776:19;19798:122;19837:14;19870:8;19897;19798:20;:122::i;:::-;19776:144;;19957:14;19939;:32;19935:766;;20040:10;20022:14;:28;;19992:135;;;;-1:-1:-1;;;19992:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20168:14;;-1:-1:-1;20184:14:0;-1:-1:-1;20184:14:0;19935:766;;;20240:19;20262:138;20305:14;20342:8;20373;20262:20;:138::i;:::-;20240:160;;20444:14;20426;:32;;20419:40;;;;20526:10;20508:14;:28;;20478:135;;;;-1:-1:-1;;;20478:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20654:14;-1:-1:-1;20670:14:0;;-1:-1:-1;19935:766:0;19639:1073;;19029:1690;;;;;;;;;;;:::o;8919:142::-;8971:6;8998;;;:30;;-1:-1:-1;;9013:5:0;;;9027:1;9022;9013:5;9022:1;9008:15;;;;;:20;8998:30;8990:63;;;;;-1:-1:-1;;;8990:63:0;;;;;;;;;;;;-1:-1:-1;;;8990:63:0;;;;;;;;;;;;;;8646:128;8730:5;;;8725:16;;;;8717:49;;;;;-1:-1:-1;;;8717:49:0;;;;;;;;;;;;-1:-1:-1;;;8717:49:0;;;;;;;;;;;;;;13371:518;13498:13;13513;13540:14;13560:26;13571:6;13579;13560:10;:26::i;:::-;13539:47;;;13597:32;13605:7;13614:6;13622;13597:7;:32::i;:::-;;13641:13;13656;13702:32;13710:7;13719:6;13727;13702:7;:32::i;:::-;-1:-1:-1;;;;;13675:82:0;;:84;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13675:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13675:84:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13675:84:0;;;;;;;-1:-1:-1;;;;;13640:119:0;;;;-1:-1:-1;13640:119:0;;-1:-1:-1;;;;;;13793:16:0;;;;;;;:88;;13862:8;13872;13793:88;;;13826:8;13836;13793:88;13770:111;;;;-1:-1:-1;13371:518:0;-1:-1:-1;;;;;;;13371:518:0:o
Swarm Source
ipfs://88c4d7c3667b93474bafdf021acc565e4c4c0fadd9b7dff5d12e2357c8589294
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.