Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
PancakeRouter
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at basescan.org on 2023-08-01 */ // SPDX-License-Identifier: GPL-3.0 pragma solidity =0.6.6; interface IPancakeRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IPancakeRouter02 is IPancakeRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IPancakeFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint256); 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(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); 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); } interface IPancakePair { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x + y) >= x, "ds-math-add-overflow"); } function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x - y) <= x, "ds-math-sub-underflow"); } function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow"); } } library PancakeLibrary { using SafeMath for uint256; // 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 view returns (address pair) { pair = IPancakeFactory(factory).getPair(tokenA, tokenB); } // fetches and sorts the reserves for a pair function getReserves( address factory, address tokenA, address tokenB ) internal view returns (uint256 reserveA, uint256 reserveB) { (address token0, ) = sortTokens(tokenA, tokenB); pairFor(factory, tokenA, tokenB); (uint256 reserve0, uint256 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(uint256 amountA, uint256 reserveA, uint256 reserveB) internal pure returns (uint256 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( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) internal pure returns (uint256 amountOut) { require(amountIn > 0, "PancakeLibrary: INSUFFICIENT_INPUT_AMOUNT"); require(reserveIn > 0 && reserveOut > 0, "PancakeLibrary: INSUFFICIENT_LIQUIDITY"); uint256 amountInWithFee = amountIn.mul(9975); uint256 numerator = amountInWithFee.mul(reserveOut); uint256 denominator = reserveIn.mul(10000).add(amountInWithFee); amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) internal pure returns (uint256 amountIn) { require(amountOut > 0, "PancakeLibrary: INSUFFICIENT_OUTPUT_AMOUNT"); require(reserveIn > 0 && reserveOut > 0, "PancakeLibrary: INSUFFICIENT_LIQUIDITY"); uint256 numerator = reserveIn.mul(amountOut).mul(10000); uint256 denominator = reserveOut.sub(amountOut).mul(9975); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut( address factory, uint256 amountIn, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "PancakeLibrary: INVALID_PATH"); amounts = new uint256[](path.length); amounts[0] = amountIn; for (uint256 i; i < path.length - 1; i++) { (uint256 reserveIn, uint256 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, uint256 amountOut, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "PancakeLibrary: INVALID_PATH"); amounts = new uint256[](path.length); amounts[amounts.length - 1] = amountOut; for (uint256 i = path.length - 1; i > 0; i--) { (uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i - 1], path[i]); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut); } } } // 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, uint256 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::safeApprove: approve failed" ); } function safeTransfer(address token, address to, uint256 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::safeTransfer: transfer failed" ); } function safeTransferFrom(address token, address from, address to, uint256 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::transferFrom: transferFrom failed" ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{ value: value }(new bytes(0)); require(success, "TransferHelper::safeTransferETH: ETH transfer failed"); } } interface IERC20 { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); } interface IWETH { function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; } contract PancakeRouter is IPancakeRouter02 { using SafeMath for uint256; address public immutable override factory; address public immutable override WETH; modifier ensure(uint256 deadline) { require(deadline >= block.timestamp, "PancakeRouter: 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, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin ) internal virtual returns (uint256 amountA, uint256 amountB) { // create the pair if it doesn't exist yet if (IPancakeFactory(factory).getPair(tokenA, tokenB) == address(0)) { IPancakeFactory(factory).createPair(tokenA, tokenB); } (uint256 reserveA, uint256 reserveB) = PancakeLibrary.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint256 amountBOptimal = PancakeLibrary.quote(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, "PancakeRouter: INSUFFICIENT_B_AMOUNT"); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint256 amountAOptimal = PancakeLibrary.quote(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, "PancakeRouter: INSUFFICIENT_A_AMOUNT"); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256 amountA, uint256 amountB, uint256 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, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable virtual override ensure(deadline) returns (uint256 amountToken, uint256 amountETH, uint256 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, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 amountA, uint256 amountB) { address pair = PancakeLibrary.pairFor(factory, tokenA, tokenB); IPancakePair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint256 amount0, uint256 amount1) = IPancakePair(pair).burn(to); (address token0, ) = PancakeLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, "PancakeRouter: INSUFFICIENT_A_AMOUNT"); require(amountB >= amountBMin, "PancakeRouter: INSUFFICIENT_B_AMOUNT"); } function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 amountToken, uint256 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, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint256 amountA, uint256 amountB) { address pair = PancakeLibrary.pairFor(factory, tokenA, tokenB); uint256 value = approveMax ? uint256(-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, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint256 amountToken, uint256 amountETH) { address pair = PancakeLibrary.pairFor(factory, token, WETH); uint256 value = approveMax ? uint256(-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, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 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, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint256 amountETH) { address pair = PancakeLibrary.pairFor(factory, token, WETH); uint256 value = approveMax ? uint256(-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(uint256[] memory amounts, address[] memory path, address _to) internal virtual { for (uint256 i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = PancakeLibrary.sortTokens(input, output); uint256 amountOut = amounts[i + 1]; (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOut) : (amountOut, uint256(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( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { amounts = PancakeLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, "PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT"); TransferHelper.safeTransferFrom( path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { amounts = PancakeLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, "PancakeRouter: EXCESSIVE_INPUT_AMOUNT"); TransferHelper.safeTransferFrom( path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WETH, "PancakeRouter: INVALID_PATH"); amounts = PancakeLibrary.getAmountsOut(factory, msg.value, path); require(amounts[amounts.length - 1] >= amountOutMin, "PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT"); 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( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[path.length - 1] == WETH, "PancakeRouter: INVALID_PATH"); amounts = PancakeLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, "PancakeRouter: EXCESSIVE_INPUT_AMOUNT"); TransferHelper.safeTransferFrom( path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[path.length - 1] == WETH, "PancakeRouter: INVALID_PATH"); amounts = PancakeLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, "PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT"); TransferHelper.safeTransferFrom( path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WETH, "PancakeRouter: INVALID_PATH"); amounts = PancakeLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, "PancakeRouter: 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 (uint256 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)); uint256 amountInput; uint256 amountOutput; { // scope to avoid stack too deep errors (uint256 reserve0, uint256 reserve1, ) = pair.getReserves(); (uint256 reserveInput, uint256 reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput); amountOutput = PancakeLibrary.getAmountOut(amountInput, reserveInput, reserveOutput); } (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOutput) : (amountOutput, uint256(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( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) { TransferHelper.safeTransferFrom( path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amountIn ); uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, "PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable virtual override ensure(deadline) { require(path[0] == WETH, "PancakeRouter: INVALID_PATH"); uint256 amountIn = msg.value; IWETH(WETH).deposit{ value: amountIn }(); assert(IWETH(WETH).transfer(PancakeLibrary.pairFor(factory, path[0], path[1]), amountIn)); uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, "PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) { require(path[path.length - 1] == WETH, "PancakeRouter: INVALID_PATH"); TransferHelper.safeTransferFrom( path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint256 amountOut = IERC20(WETH).balanceOf(address(this)); require(amountOut >= amountOutMin, "PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT"); IWETH(WETH).withdraw(amountOut); TransferHelper.safeTransferETH(to, amountOut); } // **** LIBRARY FUNCTIONS **** function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) public pure virtual override returns (uint256 amountB) { return PancakeLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) public pure virtual override returns (uint256 amountOut) { return PancakeLibrary.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) public pure virtual override returns (uint256 amountIn) { return PancakeLibrary.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut( uint256 amountIn, address[] memory path ) public view virtual override returns (uint256[] memory amounts) { return PancakeLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn( uint256 amountOut, address[] memory path ) public view virtual override returns (uint256[] memory amounts) { return PancakeLibrary.getAmountsIn(factory, amountOut, path); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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
60c06040523480156200001157600080fd5b506040516200572f3803806200572f833981810160405260408110156200003757600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6155a862000187600039806101ac5280610e5d5280610e985280610fd5528061129852806116f252806118d65280611e1e5280611fa252806120725280612179528061232c52806123c15280612673528061271a52806127ef52806128f452806129dc5280612a5d52806130ec5280613422528061347852806134ac528061352d528061374752806138f7528061398c5250806110c752806111c5528061136b52806113a4528061154f52806117e452806118b45280611aa1528061225f528061240052806125a95280612a9c5280612ddf5280613071528061309a52806130ca52806132a75280613456528061382d52806139cb52806143f652806144395280614799528061497a5280614ef55280614fd6528061505652506155a86000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d97565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612105565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b5080359060208101359060400135612525565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612532565b34801561096057600080fd5b50610969612671565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612695565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356126a2565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612882565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d65565b348015610b3157600080fd5b5061096961306f565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613093945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356130c0565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613218565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356133a7565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356136d3565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b610e86897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612d65565b9093509150610e96898685613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613ce9565b50965096945050505050565b6000610f44848484613e26565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6111207f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f4a92505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154446029913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166140b0565b8560008151811061124a57fe5b602002602001015161415d565b6112968287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061432d915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613ce9565b509695505050505050565b60606113917f000000000000000000000000000000000000000000000000000000000000000084846145b4565b90505b92915050565b60008060006113ca7f00000000000000000000000000000000000000000000000000000000000000008f8f6140b0565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612d65565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b6115a87f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f4a92505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154446029913960400191505060405180910390fd5b61162a868660008181106111a257fe5b6113598287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061432d915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b61183d7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145b492505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806155046025913960400191505060405180910390fd5b6000806118fa7f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006140b0565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d6126a2565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a61415d565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d6020811015611bf057600080fd5b50516040805160208881028281018201909352888252929350611c32929091899189918291850190849080828437600092019190915250889250614742915050565b86611d368288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b505afa158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b50519063ffffffff614ad516565b1015611d8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154446029913960400191505060405180910390fd5b5050505050505050565b8042811015611e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e6c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b611f1b85856000818110611a7e57fe5b611f59858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614742915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051905086811015612070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154446029913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505050611d8d8482613ce9565b6060814281101561217757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660008181106121bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6122b87f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f4a92505050565b915086826001845103815181106122cb57fe5b6020026020010151101561232a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154446029913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061237357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123a657600080fd5b505af11580156123ba573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61242c7f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b8460008151811061243957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b50516124dc57fe5b61251b8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061432d915050565b5095945050505050565b6000610f44848484614b47565b606081428110156125a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b6126027f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145b492505050565b9150868260008151811061261257fe5b6020026020010151111561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806155046025913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610f44848484614c6b565b6000814281101561271457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b612743887f00000000000000000000000000000000000000000000000000000000000000008989893089612d65565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506127ed92508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b1580156127bc57600080fd5b505afa1580156127d0573d6000803e3d6000fd5b505050506040513d60208110156127e657600080fd5b5051613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506113598483613ce9565b80428110156128f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168585600081811061293657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b60003490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a4257600080fd5b505af1158015612a56573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612ac87f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b505050506040513d6020811015612b5c57600080fd5b5051612b6457fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b9457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2d57600080fd5b505afa158015612c41573d6000803e3d6000fd5b505050506040513d6020811015612c5757600080fd5b50516040805160208981028281018201909352898252929350612c999290918a918a918291850190849080828437600092019190915250899250614742915050565b87611d368289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612ccc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b6000808242811015612dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b6000612e057f00000000000000000000000000000000000000000000000000000000000000008c8c6140b0565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612e8657600080fd5b505af1158015612e9a573d6000803e3d6000fd5b505050506040513d6020811015612eb057600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6040811015612f4d57600080fd5b50805160209091015190925090506000612f678e8e614d4b565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612fa4578183612fa7565b82825b90975095508a871015613005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806154906024913960400191505060405180910390fd5b8986101561305e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061554f6024913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484613f4a565b60008060006131107f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006140b0565b905060008761311f578c613141565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b505050506132038e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b6000806000834281101561328d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b61329b8c8c8c8c8c8c614e9e565b909450925060006132cd7f00000000000000000000000000000000000000000000000000000000000000008e8e6140b0565b90506132db8d33838861415d565b6132e78c33838761415d565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b505050506040513d602081101561339057600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561341c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b61344a8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614e9e565b9094509250600061349c7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006140b0565b90506134aa8b33838861415d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351257600080fd5b505af1158015613526573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135d257600080fd5b505af11580156135e6573d6000803e3d6000fd5b505050506040513d60208110156135fc57600080fd5b505161360457fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561368357600080fd5b505af1158015613697573d6000803e3d6000fd5b505050506040513d60208110156136ad57600080fd5b50519250348410156136c5576136c533853403613ce9565b505096509650969350505050565b6060814281101561374557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061378957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461382857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6138867f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145b492505050565b9150348260008151811061389657fe5b602002602001015111156138f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806155046025913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061393e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397157600080fd5b505af1158015613985573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6139f77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b84600081518110613a0457fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a7557600080fd5b505af1158015613a89573d6000803e3d6000fd5b505050506040513d6020811015613a9f57600080fd5b5051613aa757fe5b613ae68287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061432d915050565b81600081518110613af357fe5b602002602001015134111561251b5761251b3383600081518110613b1357fe5b60200260200101513403613ce9565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613bf857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bbb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c5a576040519150601f19603f3d011682016040523d82523d6000602084013e613c5f565b606091505b5091509150818015613c8d575080511580613c8d5750808060200190516020811015613c8a57600080fd5b50515b613ce2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001806154d7602d913960400191505060405180910390fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613d6057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613d23565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613dc2576040519150601f19603f3d011682016040523d82523d6000602084013e613dc7565b606091505b5050905080613e21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806154106034913960400191505060405180910390fd5b505050565b6000808411613e80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061538c6029913960400191505060405180910390fd5b600083118015613e905750600082115b613ee5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806155296026913960400191505060405180910390fd5b6000613ef9856126f763ffffffff61519f16565b90506000613f0d828563ffffffff61519f16565b90506000613f3383613f278861271063ffffffff61519f16565b9063ffffffff61522516565b9050808281613f3e57fe5b04979650505050505050565b6060600282511015613fbd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613fd557600080fd5b50604051908082528060200260200182016040528015613fff578160200160208202803683370190505b509050828160008151811061401057fe5b60200260200101818152505060005b60018351038110156140a8576000806140628786858151811061403e57fe5b602002602001015187866001018151811061405557fe5b6020026020010151615297565b9150915061408484848151811061407557fe5b60200260200101518383613e26565b84846001018151811061409357fe5b6020908102919091010152505060010161401f565b509392505050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152915160009286169163e6a43905916044808301926020929190829003018186803b15801561412957600080fd5b505afa15801561413d573d6000803e3d6000fd5b505050506040513d602081101561415357600080fd5b5051949350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061423b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016141fe565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461429d576040519150601f19603f3d011682016040523d82523d6000602084013e6142a2565b606091505b50915091508180156142d05750805115806142d057508080602001905160208110156142cd57600080fd5b50515b614325576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806153df6031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156145ae5760008084838151811061434b57fe5b602002602001015185846001018151811061436257fe5b602002602001015191509150600061437a8383614d4b565b509050600087856001018151811061438e57fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146143d6578260006143da565b6000835b91509150600060028a510388106143f15788614432565b6144327f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061442557fe5b60200260200101516140b0565b905061445f7f000000000000000000000000000000000000000000000000000000000000000088886140b0565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156144a9576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561453457818101518382015260200161451c565b50505050905090810190601f1680156145615780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561458357600080fd5b505af1158015614597573d6000803e3d6000fd5b505060019099019850614330975050505050505050565b50505050565b606060028251101561462757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561463f57600080fd5b50604051908082528060200260200182016040528015614669578160200160208202803683370190505b509050828160018351038151811061467d57fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b80156140a8576000806146dd878660018603815181106146c957fe5b602002602001015187868151811061405557fe5b915091506146ff8484815181106146f057fe5b60200260200101518383614b47565b84600185038151811061470e57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016146ad565b60005b6001835103811015613e215760008084838151811061476057fe5b602002602001015185846001018151811061477757fe5b602002602001015191509150600061478f8383614d4b565b50905060006147bf7f000000000000000000000000000000000000000000000000000000000000000085856140b0565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561480d57600080fd5b505afa158015614821573d6000803e3d6000fd5b505050506040513d606081101561483757600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a811690891614614881578284614884565b83835b91509150614909828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b9550614916868383613e26565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461495a5782600061495e565b6000835b91509150600060028c51038a10614975578a6149a9565b6149a97f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061442557fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614a59578181015183820152602001614a41565b50505050905090810190601f168015614a865780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614aa857600080fd5b505af1158015614abc573d6000803e3d6000fd5b50506001909b019a506147459950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411614ba1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806153b5602a913960400191505060405180910390fd5b600083118015614bb15750600082115b614c06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806155296026913960400191505060405180910390fd5b6000614c2a612710614c1e868863ffffffff61519f16565b9063ffffffff61519f16565b90506000614c446126f7614c1e868963ffffffff614ad516565b9050614c616001828481614c5457fe5b049063ffffffff61522516565b9695505050505050565b6000808411614cc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154b46023913960400191505060405180910390fd5b600083118015614cd55750600082115b614d2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806155296026913960400191505060405180910390fd5b82614d3b858463ffffffff61519f16565b81614d4257fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614dd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061546d6023913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614e0d578284614e10565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614e9757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50616e63616b654c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614f3e57600080fd5b505afa158015614f52573d6000803e3d6000fd5b505050506040513d6020811015614f6857600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16141561504e57604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561502157600080fd5b505af1158015615035573d6000803e3d6000fd5b505050506040513d602081101561504b57600080fd5b50505b60008061507c7f00000000000000000000000000000000000000000000000000000000000000008b8b615297565b9150915081600014801561508e575080155b1561509e57879350869250615192565b60006150ab898484614c6b565b9050878111615118578581101561510d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061554f6024913960400191505060405180910390fd5b889450925082615190565b6000615125898486614c6b565b90508981111561513157fe5b8781101561518a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806154906024913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806151ba575050808202828282816151b757fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006152a68585614d4b565b5090506152b48686866140b0565b506000806152c38888886140b0565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561530857600080fd5b505afa15801561531c573d6000803e3d6000fd5b505050506040513d606081101561533257600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff8781169084161461537957808261537c565b81815b9099909850965050505050505056fe50616e63616b654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c656450616e63616b65526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5450616e63616b654c6962726172793a204944454e544943414c5f41444452455353455350616e63616b65526f757465723a20494e53554646494349454e545f415f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c656450616e63616b65526f757465723a204558434553534956455f494e5055545f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f4c495155494449545950616e63616b65526f757465723a20494e53554646494349454e545f425f414d4f554e54a26469706673582212201838952e531dedee26eeaf249aee8685cb03f74ee5973241bef2af16e6f7f97f64736f6c63430006060033000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb0000000000000000000000004200000000000000000000000000000000000006
Deployed Bytecode
0x60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000420000000000000000000000000000000000000616146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d97565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612105565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b5080359060208101359060400135612525565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612532565b34801561096057600080fd5b50610969612671565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612695565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356126a2565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612882565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d65565b348015610b3157600080fd5b5061096961306f565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613093945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356130c0565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613218565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356133a7565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356136d3565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b610e86897f00000000000000000000000042000000000000000000000000000000000000068a8a8a308a612d65565b9093509150610e96898685613b22565b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613ce9565b50965096945050505050565b6000610f44848484613e26565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000042000000000000000000000000000000000000061686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6111207f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb89888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f4a92505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154446029913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb8a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166140b0565b8560008151811061124a57fe5b602002602001015161415d565b6112968287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061432d915050565b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613ce9565b509695505050505050565b60606113917f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb84846145b4565b90505b92915050565b60008060006113ca7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb8f8f6140b0565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612d65565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b6115a87f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb89888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f4a92505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154446029913960400191505060405180910390fd5b61162a868660008181106111a257fe5b6113598287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061432d915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000042000000000000000000000000000000000000061686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b61183d7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145b492505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806155046025913960400191505060405180910390fd5b6000806118fa7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb8d7f00000000000000000000000042000000000000000000000000000000000000066140b0565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d6126a2565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb89896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a61415d565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d6020811015611bf057600080fd5b50516040805160208881028281018201909352888252929350611c32929091899189918291850190849080828437600092019190915250889250614742915050565b86611d368288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b505afa158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b50519063ffffffff614ad516565b1015611d8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154446029913960400191505060405180910390fd5b5050505050505050565b8042811015611e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000042000000000000000000000000000000000000061685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e6c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b611f1b85856000818110611a7e57fe5b611f59858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614742915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000420000000000000000000000000000000000000616916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051905086811015612070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154446029913960400191505060405180910390fd5b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505050611d8d8482613ce9565b6060814281101561217757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff16868660008181106121bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6122b87f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb34888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f4a92505050565b915086826001845103815181106122cb57fe5b6020026020010151101561232a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154446029913960400191505060405180910390fd5b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061237357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123a657600080fd5b505af11580156123ba573d6000803e3d6000fd5b50505050507f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61242c7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb89896000818110611acd57fe5b8460008151811061243957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b50516124dc57fe5b61251b8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061432d915050565b5095945050505050565b6000610f44848484614b47565b606081428110156125a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b6126027f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145b492505050565b9150868260008151811061261257fe5b6020026020010151111561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806155046025913960400191505060405180910390fd5b7f000000000000000000000000420000000000000000000000000000000000000681565b6000610f44848484614c6b565b6000814281101561271457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b612743887f00000000000000000000000042000000000000000000000000000000000000068989893089612d65565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506127ed92508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b1580156127bc57600080fd5b505afa1580156127d0573d6000803e3d6000fd5b505050506040513d60208110156127e657600080fd5b5051613b22565b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506113598483613ce9565b80428110156128f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff168585600081811061293657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b60003490507f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a4257600080fd5b505af1158015612a56573d6000803e3d6000fd5b50505050507f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612ac87f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb89896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b505050506040513d6020811015612b5c57600080fd5b5051612b6457fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b9457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2d57600080fd5b505afa158015612c41573d6000803e3d6000fd5b505050506040513d6020811015612c5757600080fd5b50516040805160208981028281018201909352898252929350612c999290918a918a918291850190849080828437600092019190915250899250614742915050565b87611d368289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612ccc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b6000808242811015612dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b6000612e057f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb8c8c6140b0565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612e8657600080fd5b505af1158015612e9a573d6000803e3d6000fd5b505050506040513d6020811015612eb057600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6040811015612f4d57600080fd5b50805160209091015190925090506000612f678e8e614d4b565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612fa4578183612fa7565b82825b90975095508a871015613005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806154906024913960400191505060405180910390fd5b8986101561305e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061554f6024913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb81565b60606113917f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb8484613f4a565b60008060006131107f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb8e7f00000000000000000000000042000000000000000000000000000000000000066140b0565b905060008761311f578c613141565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b505050506132038e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b6000806000834281101561328d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b61329b8c8c8c8c8c8c614e9e565b909450925060006132cd7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb8e8e6140b0565b90506132db8d33838861415d565b6132e78c33838761415d565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b505050506040513d602081101561339057600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561341c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b61344a8a7f00000000000000000000000042000000000000000000000000000000000000068b348c8c614e9e565b9094509250600061349c7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb8c7f00000000000000000000000042000000000000000000000000000000000000066140b0565b90506134aa8b33838861415d565b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351257600080fd5b505af1158015613526573d6000803e3d6000fd5b50505050507f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135d257600080fd5b505af11580156135e6573d6000803e3d6000fd5b505050506040513d60208110156135fc57600080fd5b505161360457fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561368357600080fd5b505af1158015613697573d6000803e3d6000fd5b505050506040513d60208110156136ad57600080fd5b50519250348410156136c5576136c533853403613ce9565b505096509650969350505050565b6060814281101561374557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff168686600081811061378957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461382857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6138867f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145b492505050565b9150348260008151811061389657fe5b602002602001015111156138f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806155046025913960400191505060405180910390fd5b7f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061393e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397157600080fd5b505af1158015613985573d6000803e3d6000fd5b50505050507f000000000000000000000000420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6139f77f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb89896000818110611acd57fe5b84600081518110613a0457fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a7557600080fd5b505af1158015613a89573d6000803e3d6000fd5b505050506040513d6020811015613a9f57600080fd5b5051613aa757fe5b613ae68287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061432d915050565b81600081518110613af357fe5b602002602001015134111561251b5761251b3383600081518110613b1357fe5b60200260200101513403613ce9565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613bf857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bbb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c5a576040519150601f19603f3d011682016040523d82523d6000602084013e613c5f565b606091505b5091509150818015613c8d575080511580613c8d5750808060200190516020811015613c8a57600080fd5b50515b613ce2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001806154d7602d913960400191505060405180910390fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613d6057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613d23565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613dc2576040519150601f19603f3d011682016040523d82523d6000602084013e613dc7565b606091505b5050905080613e21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806154106034913960400191505060405180910390fd5b505050565b6000808411613e80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061538c6029913960400191505060405180910390fd5b600083118015613e905750600082115b613ee5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806155296026913960400191505060405180910390fd5b6000613ef9856126f763ffffffff61519f16565b90506000613f0d828563ffffffff61519f16565b90506000613f3383613f278861271063ffffffff61519f16565b9063ffffffff61522516565b9050808281613f3e57fe5b04979650505050505050565b6060600282511015613fbd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613fd557600080fd5b50604051908082528060200260200182016040528015613fff578160200160208202803683370190505b509050828160008151811061401057fe5b60200260200101818152505060005b60018351038110156140a8576000806140628786858151811061403e57fe5b602002602001015187866001018151811061405557fe5b6020026020010151615297565b9150915061408484848151811061407557fe5b60200260200101518383613e26565b84846001018151811061409357fe5b6020908102919091010152505060010161401f565b509392505050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152915160009286169163e6a43905916044808301926020929190829003018186803b15801561412957600080fd5b505afa15801561413d573d6000803e3d6000fd5b505050506040513d602081101561415357600080fd5b5051949350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061423b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016141fe565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461429d576040519150601f19603f3d011682016040523d82523d6000602084013e6142a2565b606091505b50915091508180156142d05750805115806142d057508080602001905160208110156142cd57600080fd5b50515b614325576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806153df6031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156145ae5760008084838151811061434b57fe5b602002602001015185846001018151811061436257fe5b602002602001015191509150600061437a8383614d4b565b509050600087856001018151811061438e57fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146143d6578260006143da565b6000835b91509150600060028a510388106143f15788614432565b6144327f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb878c8b6002018151811061442557fe5b60200260200101516140b0565b905061445f7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb88886140b0565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156144a9576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561453457818101518382015260200161451c565b50505050905090810190601f1680156145615780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561458357600080fd5b505af1158015614597573d6000803e3d6000fd5b505060019099019850614330975050505050505050565b50505050565b606060028251101561462757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561463f57600080fd5b50604051908082528060200260200182016040528015614669578160200160208202803683370190505b509050828160018351038151811061467d57fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b80156140a8576000806146dd878660018603815181106146c957fe5b602002602001015187868151811061405557fe5b915091506146ff8484815181106146f057fe5b60200260200101518383614b47565b84600185038151811061470e57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016146ad565b60005b6001835103811015613e215760008084838151811061476057fe5b602002602001015185846001018151811061477757fe5b602002602001015191509150600061478f8383614d4b565b50905060006147bf7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb85856140b0565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561480d57600080fd5b505afa158015614821573d6000803e3d6000fd5b505050506040513d606081101561483757600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a811690891614614881578284614884565b83835b91509150614909828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b9550614916868383613e26565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461495a5782600061495e565b6000835b91509150600060028c51038a10614975578a6149a9565b6149a97f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb898e8d6002018151811061442557fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614a59578181015183820152602001614a41565b50505050905090810190601f168015614a865780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614aa857600080fd5b505af1158015614abc573d6000803e3d6000fd5b50506001909b019a506147459950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411614ba1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806153b5602a913960400191505060405180910390fd5b600083118015614bb15750600082115b614c06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806155296026913960400191505060405180910390fd5b6000614c2a612710614c1e868863ffffffff61519f16565b9063ffffffff61519f16565b90506000614c446126f7614c1e868963ffffffff614ad516565b9050614c616001828481614c5457fe5b049063ffffffff61522516565b9695505050505050565b6000808411614cc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154b46023913960400191505060405180910390fd5b600083118015614cd55750600082115b614d2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806155296026913960400191505060405180910390fd5b82614d3b858463ffffffff61519f16565b81614d4257fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614dd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061546d6023913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614e0d578284614e10565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614e9757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50616e63616b654c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb9092169163e6a4390591604480820192602092909190829003018186803b158015614f3e57600080fd5b505afa158015614f52573d6000803e3d6000fd5b505050506040513d6020811015614f6857600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16141561504e57604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb9092169163c9c65396916044808201926020929091908290030181600087803b15801561502157600080fd5b505af1158015615035573d6000803e3d6000fd5b505050506040513d602081101561504b57600080fd5b50505b60008061507c7f000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb8b8b615297565b9150915081600014801561508e575080155b1561509e57879350869250615192565b60006150ab898484614c6b565b9050878111615118578581101561510d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061554f6024913960400191505060405180910390fd5b889450925082615190565b6000615125898486614c6b565b90508981111561513157fe5b8781101561518a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806154906024913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806151ba575050808202828282816151b757fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006152a68585614d4b565b5090506152b48686866140b0565b506000806152c38888886140b0565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561530857600080fd5b505afa15801561531c573d6000803e3d6000fd5b505050506040513d606081101561533257600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff8781169084161461537957808261537c565b81815b9099909850965050505050505056fe50616e63616b654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c656450616e63616b65526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5450616e63616b654c6962726172793a204944454e544943414c5f41444452455353455350616e63616b65526f757465723a20494e53554646494349454e545f415f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c656450616e63616b65526f757465723a204558434553534956455f494e5055545f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f4c495155494449545950616e63616b65526f757465723a20494e53554646494349454e545f425f414d4f554e54a26469706673582212201838952e531dedee26eeaf249aee8685cb03f74ee5973241bef2af16e6f7f97f64736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb0000000000000000000000004200000000000000000000000000000000000006
-----Decoded View---------------
Arg [0] : _factory (address): 0xFDa619b6d20975be80A10332cD39b9a4b0FAa8BB
Arg [1] : _WETH (address): 0x4200000000000000000000000000000000000006
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb
Arg [1] : 0000000000000000000000004200000000000000000000000000000000000006
Deployed ByteCode Sourcemap
16572:19139:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17052:10;:18;17066:4;17052:18;;17045:26;;;;16572:19139;;12:1:-1;9;2:12;21335:691:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21335:691:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;21335:691:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34709:256;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34709:256:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34709:256:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28792:895;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28792:895:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28792:895:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28792:895:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28792:895:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28792:895:0;;-1:-1:-1;28792:895:0;-1:-1:-1;28792:895: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;28792:895:0;;;;;;;;;;;;;;;;;35476:232;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35476:232:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35476:232:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;35476:232:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35476:232:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35476:232:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;35476:232:0;;-1:-1:-1;35476:232:0;;-1:-1:-1;;;;;35476:232:0:i;22034:724::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22034:724:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;22034:724:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25879:673::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25879:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25879:673:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25879:673:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25879:673:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25879:673:0;;-1:-1:-1;25879:673:0;-1:-1:-1;25879:673:0;;;;;;;;;:::i;27911:873::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27911:873:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27911:873:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27911:873:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27911:873:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27911:873:0;;-1:-1:-1;27911:873:0;-1:-1:-1;27911:873:0;;;;;;;;;:::i;24182:827::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24182:827:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;24182:827:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31993:761::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31993:761:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31993:761:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31993:761:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31993:761:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31993:761:0;;-1:-1:-1;31993:761:0;-1:-1:-1;31993:761:0;;;;;;;;;:::i;33578:847::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33578:847:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33578:847:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;33578:847:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33578:847:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33578:847:0;;-1:-1:-1;33578:847:0;-1:-1:-1;33578:847:0;;;;;;;;;:::i;27219:684::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27219:684:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27219:684:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27219:684:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27219:684:0;;-1:-1:-1;27219:684:0;-1:-1:-1;27219:684:0;;;;;;;;;:::i;34973:255::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34973:255:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34973:255:0;;;;;;;;;;;;:::i;26560:651::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26560:651:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26560:651:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26560:651:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26560:651:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26560:651:0;;-1:-1:-1;26560:651:0;-1:-1:-1;26560:651:0;;;;;;;;;:::i;16705:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16705:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34469:232;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34469:232:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34469:232:0;;;;;;;;;;;;:::i;23561:613::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23561:613:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;23561:613:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32762:808::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32762:808:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32762:808:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32762:808:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32762:808:0;;-1:-1:-1;32762:808:0;-1:-1:-1;32762:808:0;;;;;;;;;:::i;20449:878::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20449:878:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;20449:878:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16657:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16657:41:0;;;:::i;35236:232::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35236:232:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35236:232:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;35236:232:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35236:232:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35236:232:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;35236:232:0;;-1:-1:-1;35236:232:0;;-1:-1:-1;;;;;35236:232:0:i;22766:716::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22766:716:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;22766:716:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18588:758::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18588:758:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;18588:758:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19354:1052;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;19354:1052:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29695:797::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29695:797:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;29695:797:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29695:797:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29695:797:0;;-1:-1:-1;29695:797:0;-1:-1:-1;29695:797:0;;;;;;;;;:::i;21335:691::-;21584:19;21605:17;21565:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21662:196:::1;21692:5;21712:4;21731:9;21755:14;21784:12;21819:4;21839:8;21662:15;:196::i;:::-;21635:223:::0;;-1:-1:-1;21635:223:0;-1:-1:-1;21869:51:0::1;21897:5:::0;21904:2;21635:223;21869:27:::1;:51::i;:::-;21937:4;21931:20;;;21952:9;21931:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21931:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21931:31:0;;;;21973:45;22004:2;22008:9;21973:30;:45::i;:::-;21335:691:::0;;;;;;;;;;:::o;34709:256::-;34860:17;34897:60;34925:8;34935:9;34946:10;34897:27;:60::i;:::-;34890:67;34709:256;-1:-1:-1;;;;34709:256:0:o;28792:895::-;29022:24;29003:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29067:29:::1;29092:4;29067:29;:4:::0;;29072:15;;;29067:21;;::::1;;;;;;;;;;;;;:29;;;29059:69;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;29149:53;29178:7;29187:8;29197:4;;29149:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29149:28:0::1;::::0;-1:-1:-1;;;29149:53:0:i:1;:::-;29139:63;;29252:12;29221:7;29246:1;29229:7;:14;:18;29221:27;;;;;;;;;;;;;;:43;;29213:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29321:178;29367:4;;29372:1;29367:7;;;;;;;;;;;;;;;29389:10;29414:49;29437:7;29446:4;;29451:1;29446:7;;;;;;;;;;;;;;;29455:4;;29460:1;29455:7;;;;;;;;;;;;;;;29414:22;:49::i;:::-;29478:7;29486:1;29478:10;;;;;;;;;;;;;;29321:31;:178::i;:::-;29510:35;29516:7;29525:4;;29510:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29539:4:0::1;::::0;-1:-1:-1;29510:5:0::1;::::0;-1:-1:-1;;29510:35:0:i:1;:::-;29562:4;29556:20;;;29577:7;29602:1;29585:7;:14;:18;29577:27;;;;;;;;;;;;;;29556:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29556:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29556:49:0;;;;29616:63;29647:2;29651:7;29676:1;29659:7;:14;:18;29651:27;;;;;;;;;;;;;;29616:30;:63::i;:::-;28792:895:::0;;;;;;;;;:::o;35476:232::-;35603:24;35647:53;35675:7;35684:9;35695:4;35647:27;:53::i;:::-;35640:60;;35476:232;;;;;:::o;22034:724::-;22379:15;22396;22424:12;22439:47;22462:7;22471:6;22479;22439:22;:47::i;:::-;22424:62;;22497:13;22513:10;:36;;22540:9;22513:36;;;22534:2;22513:36;22560:78;;;;;;22586:10;22560:78;;;;22606:4;22560:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22497:52;;-1:-1:-1;22560:25:0;;;;;;:78;;;;;-1:-1:-1;;22560:78:0;;;;;;;;-1:-1:-1;22560:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;22560:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22560:78:0;;;;22670:80;22686:6;22694;22702:9;22713:10;22725;22737:2;22741:8;22670:15;:80::i;:::-;22649:101;;;;;;;;22034:724;;;;;;;;;;;;;;;;:::o;25879:673::-;26112:24;26093:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26159:53:::1;26188:7;26197:8;26207:4;;26159:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26159:28:0::1;::::0;-1:-1:-1;;;26159:53:0:i:1;:::-;26149:63;;26262:12;26231:7;26256:1;26239:7;:14;:18;26231:27;;;;;;;;;;;;;;:43;;26223:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26331:178;26377:4;;26382:1;26377:7;;;;;;26331:178;26520:24;26526:7;26535:4;;26520:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26541:2:0;;-1:-1:-1;26520:5:0::1;::::0;-1:-1:-1;;26520:24:0:i:1;27911:873::-:0;28141:24;28122:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28186:29:::1;28211:4;28186:29;:4:::0;;28191:15;;;28186:21;;::::1;;;;;;;;;;;;;:29;;;28178:69;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28268:53;28296:7;28305:9;28316:4;;28268:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28268:27:0::1;::::0;-1:-1:-1;;;28268:53:0:i:1;:::-;28258:63;;28354:11;28340:7;28348:1;28340:10;;;;;;;;;;;;;;:25;;28332:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24182:827:::0;24539:17;24569:12;24584:44;24607:7;24616:5;24623:4;24584:22;:44::i;:::-;24569:59;;24639:13;24655:10;:36;;24682:9;24655:36;;;24676:2;24655:36;24702:78;;;;;;24728:10;24702:78;;;;24748:4;24702:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24639:52;;-1:-1:-1;24702:25:0;;;;;;:78;;;;;-1:-1:-1;;24702:78:0;;;;;;;;-1:-1:-1;24702:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;24702:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24702:78:0;;;;24803:198;24865:5;24885:9;24909:14;24938:12;24965:2;24982:8;24803:47;:198::i;:::-;24791:210;24182:827;-1:-1:-1;;;;;;;;;;;;;24182:827:0:o;31993:761::-;32236:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32257:176:::1;32303:4;;32308:1;32303:7;;;;;;;;;;;;;;;32325:10;32350:49;32373:7;32382:4;;32387:1;32382:7;;;;;;;;;;;;;;;32391:4;;32396:1;32391:7;;;;;;32350:49;32414:8;32257:31;:176::i;:::-;32444:21;32475:4:::0;;32480:15;;;32475:21;;::::1;;;;;;;;;;;;;32468:39;;;32508:2;32468:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32468:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32468:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32468:43:0;32522:44:::1;::::0;;32468:43:::1;32522:44:::0;;::::1;::::0;;;;;;;;;;;32468:43;;-1:-1:-1;32522:44:0::1;::::0;;;32557:4;;;;;;32522:44;::::1;::::0;32557:4;;32522:44;32557:4;32522:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32563:2:0;;-1:-1:-1;32522:34:0::1;::::0;-1:-1:-1;;32522:44:0:i:1;:::-;32665:12:::0;32599:62:::1;32647:13:::0;32606:4;;32611:15;;;32606:21;;::::1;;;;;;;;;;;;;32599:39;;;32639:2;32599:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32599:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32599:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32599:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;32577:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16870:1;31993:761:::0;;;;;;;:::o;33578:847::-;33818:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33847:29:::1;33872:4;33847:29;:4:::0;;33852:15;;;33847:21;;::::1;;;;;;;;;;;;;:29;;;33839:69;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;33919:176;33965:4;;33970:1;33965:7;;;;;;33919:176;34106:55;34141:4;;34106:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34155:4:0::1;::::0;-1:-1:-1;34106:34:0::1;::::0;-1:-1:-1;;34106:55:0:i:1;:::-;34192:37;::::0;;;;;34223:4:::1;34192:37;::::0;::::1;::::0;;;34172:17:::1;::::0;34192:22:::1;34199:4;34192:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;34192:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34192:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34192:37:0;;-1:-1:-1;34248:25:0;;::::1;;34240:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34336:4;34330:20;;;34351:9;34330:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34330:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34330:31:0;;;;34372:45;34403:2;34407:9;34372:30;:45::i;27219:684::-:0;27430:24;27411:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27486:4:::1;27475:15;;:4;;27480:1;27475:7;;;;;;;;;;;;;;;:15;;;27467:55;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27543:54;27572:7;27581:9;27592:4;;27543:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27543:28:0::1;::::0;-1:-1:-1;;;27543:54:0:i:1;:::-;27533:64;;27647:12;27616:7;27641:1;27624:7;:14;:18;27616:27;;;;;;;;;;;;;;:43;;27608:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27722:4;27716:19;;;27744:7;27752:1;27744:10;;;;;;;;;;;;;;27716:42;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27716:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27716:42:0;;;;;27782:4;27776:20;;;27797:49;27820:7;27829:4;;27834:1;27829:7;;;;;;27797:49;27848:7;27856:1;27848:10;;;;;;;;;;;;;;27776:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27776:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27776:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27776:83:0;27769:91:::1;;;;27871:24;27877:7;27886:4;;27871:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27892:2:0;;-1:-1:-1;27871:5:0::1;::::0;-1:-1:-1;;27871:24:0:i:1;:::-;27219:684:::0;;;;;;;;:::o;34973:255::-;35124:16;35160:60;35187:9;35198;35209:10;35160:26;:60::i;26560:651::-;26793:24;26774:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26840:53:::1;26868:7;26877:9;26888:4;;26840:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26840:27:0::1;::::0;-1:-1:-1;;;26840:53:0:i:1;:::-;26830:63;;26926:11;26912:7;26920:1;26912:10;;;;;;;;;;;;;;:25;;26904:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16705:38:::0;;;:::o;34469:232::-;34609:15;34644:49;34665:7;34674:8;34684;34644:20;:49::i;23561:613::-;23839:17;23820:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23885:94:::1;23901:5;23908:4;23914:9;23925:14;23941:12;23963:4;23970:8;23885:15;:94::i;:::-;24029:38;::::0;;;;;24061:4:::1;24029:38;::::0;::::1;::::0;;;23869:110;;-1:-1:-1;23990:78:0::1;::::0;-1:-1:-1;24018:5:0;;24025:2;;24029:23:::1;::::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;24029:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24029:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24029:38:0;23990:27:::1;:78::i;:::-;24085:4;24079:20;;;24100:9;24079:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24079:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24079:31:0;;;;24121:45;24152:2;24156:9;24121:30;:45::i;32762:808::-:0;32983:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33023:4:::1;33012:15;;:4;;33017:1;33012:7;;;;;;;;;;;;;;;:15;;;33004:55;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;33070:16;33089:9;33070:28;;33115:4;33109:19;;;33137:8;33109:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33109:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33109:40:0;;;;;33173:4;33167:20;;;33188:49;33211:7;33220:4;;33225:1;33220:7;;;;;;33188:49;33239:8;33167:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33167:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33167:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33167:81:0;33160:89:::1;;;;33260:21;33291:4:::0;;33296:15;;;33291:21;;::::1;;;;;;;;;;;;;33284:39;;;33324:2;33284:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33284:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33284:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33284:43:0;33338:44:::1;::::0;;33284:43:::1;33338:44:::0;;::::1;::::0;;;;;;;;;;;33284:43;;-1:-1:-1;33338:44:0::1;::::0;;;33373:4;;;;;;33338:44;::::1;::::0;33373:4;;33338:44;33373:4;33338:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33379:2:0;;-1:-1:-1;33338:34:0::1;::::0;-1:-1:-1;;33338:44:0:i:1;:::-;33481:12:::0;33415:62:::1;33463:13:::0;33422:4;;33427:15;;;33422:21;;::::1;;;;;;;;;;;;;33415:39;;;33455:2;33415:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;20449:878:0::0;20715:15;20732;20696:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20760:12:::1;20775:47;20798:7;20807:6;20815;20775:22;:47::i;:::-;20833:60;::::0;;;;;20865:10:::1;20833:60;::::0;::::1;::::0;:31:::1;::::0;::::1;:60:::0;;;;;;;;;;;;;;20760:62;;-1:-1:-1;20833:31:0;;::::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20833:31:0;:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20833:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20833:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20967:27:0::1;::::0;;;;;:23:::1;:27:::0;;::::1;;::::0;::::1;::::0;;;20931:15:::1;::::0;;;20967:23;;::::1;::::0;::::1;::::0;:27;;;;;;;;;;;20931:15;20967:23;:27;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20967:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20967:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20967:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20967:27:0;-1:-1:-1;21006:14:0::1;21026:41;21052:6:::0;21060;21026:25:::1;:41::i;:::-;21005:62;;;21109:6;21099:16;;:6;:16;;;:58;;21140:7;21149;21099:58;;;21119:7;21128;21099:58;21078:79:::0;;-1:-1:-1;21078:79:0;-1:-1:-1;21176:21:0;;::::1;;21168:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21268:10;21257:7;:21;;21249:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16870:1;;;;20449:878:::0;;;;;;;;;;;:::o;16657:41::-;;;:::o;35236:232::-;35363:24;35407:53;35436:7;35445:8;35455:4;35407:28;:53::i;22766:716::-;23094:19;23115:17;23145:12;23160:44;23183:7;23192:5;23199:4;23160:22;:44::i;:::-;23145:59;;23215:13;23231:10;:36;;23258:9;23231:36;;;23252:2;23231:36;23278:78;;;;;;23304:10;23278:78;;;;23324:4;23278:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23215:52;;-1:-1:-1;23278:25:0;;;;;;:78;;;;;-1:-1:-1;;23278:78:0;;;;;;;;-1:-1:-1;23278:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;23278:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23278:78:0;;;;23394:80;23413:5;23420:9;23431:14;23447:12;23461:2;23465:8;23394:18;:80::i;:::-;23367:107;;;;-1:-1:-1;22766:716:0;-1:-1:-1;;;;;;;;;;;;;22766:716:0:o;18588:758::-;18891:15;18908;18925:17;18872:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18976:85:::1;18990:6;18998;19006:14;19022;19038:10;19050;18976:13;:85::i;:::-;18955:106:::0;;-1:-1:-1;18955:106:0;-1:-1:-1;19072:12:0::1;19087:47;19110:7;19119:6:::0;19127;19087:22:::1;:47::i;:::-;19072:62;;19145:66;19177:6;19185:10;19197:4;19203:7;19145:31;:66::i;:::-;19222;19254:6;19262:10;19274:4;19280:7;19222:31;:66::i;:::-;19324:4;19311:23;;;19335:2;19311:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19311:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19311:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19311:27:0;18588:758;;;;-1:-1:-1;19311:27:0;;-1:-1:-1;18588:758:0;;-1:-1:-1;;;;;;;;;18588:758:0:o;19354:1052::-;19673:19;19694:17;19713;19645:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19775:176:::1;19803:5;19823:4;19842:18;19875:9;19899:14;19928:12;19775:13;:176::i;:::-;19748:203:::0;;-1:-1:-1;19748:203:0;-1:-1:-1;19962:12:0::1;19977:44;20000:7;20009:5:::0;20016:4:::1;19977:22;:44::i;:::-;19962:59;;20032:69;20064:5;20071:10;20083:4;20089:11;20032:31;:69::i;:::-;20118:4;20112:19;;;20140:9;20112:41;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20112:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20112:41:0;;;;;20177:4;20171:20;;;20192:4;20198:9;20171:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20171:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20171:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20171:37:0;20164:45:::1;;;;20245:4;20232:23;;;20256:2;20232:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20232:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20232:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20232:27:0;;-1:-1:-1;20310:9:0::1;:21:::0;-1:-1:-1;20306:92:0::1;;;20333:65;20364:10;20388:9;20376;:21;20333:30;:65::i;:::-;16870:1;19354:1052:::0;;;;;;;;;;;:::o;29695:797::-;29903:24;29884:8;16817:15;16805:8;:27;;16797:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29959:4:::1;29948:15;;:4;;29953:1;29948:7;;;;;;;;;;;;;;;:15;;;29940:55;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;30016:53;30044:7;30053:9;30064:4;;30016:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30016:27:0::1;::::0;-1:-1:-1;;;30016:53:0:i:1;:::-;30006:63;;30102:9;30088:7;30096:1;30088:10;;;;;;;;;;;;;;:23;;30080:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30170:4;30164:19;;;30192:7;30200:1;30192:10;;;;;;;;;;;;;;30164:42;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30164:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30164:42:0;;;;;30230:4;30224:20;;;30245:49;30268:7;30277:4;;30282:1;30277:7;;;;;;30245:49;30296:7;30304:1;30296:10;;;;;;;;;;;;;;30224:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30224:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30224:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30224:83:0;30217:91:::1;;;;30319:24;30325:7;30334:4;;30319:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30340:2:0;;-1:-1:-1;30319:5:0::1;::::0;-1:-1:-1;;30319:24:0:i:1;:::-;30406:7;30414:1;30406:10;;;;;;;;;;;;;;30394:9;:22;30390:94;;;30418:66;30449:10;30473:7;30481:1;30473:10;;;;;;;;;;;;;;30461:9;:22;30418:30;:66::i;14421:415::-:0;14619:45;;;14608:10;14619:45;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;14619:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;14619:45:0;179:29:-1;160:49;;14608:57:0;;;;14573:12;;14587:17;;14608:10;;;;14619:45;14608:57;;;25:18:-1;14608:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;14608:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;14572:93:0;;;;14698:7;:57;;;;-1:-1:-1;14710:11:0;;:16;;:44;;;14741:4;14730:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14730:24:0;14710:44;14676:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14421:415;;;;;:::o;15307:219::-;15422:12;;;15380;15422;;;;;;;;;15398:7;;;;15414:5;;15398:37;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;15398:37: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;;15379:56:0;;;15454:7;15446:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15307:219;;;:::o;11334:570::-;11470:17;11519:1;11508:8;:12;11500:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11597:1;11585:9;:13;:31;;;;;11615:1;11602:10;:14;11585:31;11577:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11670:23;11696:18;:8;11709:4;11696:18;:12;:18;:::i;:::-;11670:44;-1:-1:-1;11725:17:0;11745:31;11670:44;11765:10;11745:31;:19;:31;:::i;:::-;11725:51;-1:-1:-1;11787:19:0;11809:41;11834:15;11809:20;:9;11823:5;11809:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;11787:63;;11885:11;11873:9;:23;;;;;;;11334:570;-1:-1:-1;;;;;;;11334:570:0:o;12629:561::-;12767:24;12827:1;12812:4;:11;:16;;12804:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12896:4;:11;12882:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12882:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;12882:26:0;;12872:36;;12932:8;12919:7;12927:1;12919:10;;;;;;;;;;;;;:21;;;;;12956:9;12951:232;12985:1;12971:4;:11;:15;12967:1;:19;12951:232;;;13009:17;13028:18;13050:42;13062:7;13071:4;13076:1;13071:7;;;;;;;;;;;;;;13080:4;13085:1;13089;13085:5;13080:11;;;;;;;;;;;;;;13050;:42::i;:::-;13008:84;;;;13124:47;13137:7;13145:1;13137:10;;;;;;;;;;;;;;13149:9;13160:10;13124:12;:47::i;:::-;13107:7;13115:1;13119;13115:5;13107:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;12988:3:0;;12951:232;;;;12629:561;;;;;:::o;10055:177::-;10176:48;;;;;;:32;:48;;;;;;;;;;;;;;;;10144:12;;10176:32;;;;;:48;;;;;;;;;;;;;;:32;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;10176:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10176:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10176:48:0;;10055:177;-1:-1:-1;;;;10055:177:0:o;14844:455::-;15072:51;;;15061:10;15072:51;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15072:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;15072:51:0;179:29:-1;160:49;;15061:63:0;;;;15026:12;;15040:17;;15061:10;;;;15072:51;15061:63;;;25:18:-1;15061:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;15061:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;15025:99:0;;;;15157:7;:57;;;;-1:-1:-1;15169:11:0;;:16;;:44;;;15200:4;15189:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15189:24:0;15169:44;15135:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14844:455;;;;;;:::o;25120:751::-;25230:9;25225:639;25259:1;25245:4;:11;:15;25241:1;:19;25225:639;;;25283:13;25298:14;25317:4;25322:1;25317:7;;;;;;;;;;;;;;25326:4;25331:1;25335;25331:5;25326:11;;;;;;;;;;;;;;25282:56;;;;25354:14;25374:40;25400:5;25407:6;25374:25;:40::i;:::-;25353:61;;;25429:17;25449:7;25457:1;25461;25457:5;25449:14;;;;;;;;;;;;;;25429:34;;25479:18;25499;25530:6;25521:15;;:5;:15;;;:101;;25600:9;25619:1;25521:101;;;25565:1;25569:9;25521:101;25478:144;;;;25637:10;25668:1;25654:4;:11;:15;25650:1;:19;:80;;25727:3;25650:80;;;25672:52;25695:7;25704:6;25712:4;25717:1;25721;25717:5;25712:11;;;;;;;;;;;;;;25672:22;:52::i;:::-;25637:93;;25758:46;25781:7;25790:5;25797:6;25758:22;:46::i;:::-;25745:65;;;25811:10;25823;25835:2;25849:1;25839:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25839:12:0;87:42:-1;143:17;;-1:-1;25839:12:0;;25745:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;25745:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25745:107:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25262:3:0;;;;;-1:-1:-1;25225:639:0;;-1:-1:-1;;;;;;;;25225:639:0;;;25120:751;;;:::o;13271:582::-;13409:24;13469:1;13454:4;:11;:16;;13446:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13538:4;:11;13524:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13524:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13524:26:0;;13514:36;;13591:9;13561:7;13586:1;13569:7;:14;:18;13561:27;;;;;;;;;;;;;;;;;:39;13628:11;;:15;;13611:235;13645:5;;13611:235;;13673:17;13692:18;13714:42;13726:7;13735:4;13744:1;13740;:5;13735:11;;;;;;;;;;;;;;13748:4;13753:1;13748:7;;;;;;;13714:42;13672:84;;;;13788:46;13800:7;13808:1;13800:10;;;;;;;;;;;;;;13812:9;13823:10;13788:11;:46::i;:::-;13771:7;13783:1;13779;:5;13771:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;13652:3:0;;13611:235;;30639:1346;30752:9;30747:1231;30781:1;30767:4;:11;:15;30763:1;:19;30747:1231;;;30805:13;30820:14;30839:4;30844:1;30839:7;;;;;;;;;;;;;;30848:4;30853:1;30857;30853:5;30848:11;;;;;;;;;;;;;;30804:56;;;;30876:14;30896:40;30922:5;30929:6;30896:25;:40::i;:::-;30875:61;;;30951:17;30984:46;31007:7;31016:5;31023:6;30984:22;:46::i;:::-;30951:80;;31046:19;31080:20;31192:16;31210;31232:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31232:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31232:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31232:18:0;;;;;;;31191:59;;;;;-1:-1:-1;31191:59:0;;-1:-1:-1;31270:20:0;;31317:15;;;;;;;;:103;;31401:8;31411;31317:103;;;31357:8;31367;31317:103;31269:151;;;;31453:56;31496:12;31460:5;31453:23;;;31485:4;31453:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;31453:56:0;31439:70;;31543:69;31571:11;31584:12;31598:13;31543:27;:69::i;:::-;31528:84;;30747:1231;;;;31643:18;31663;31694:6;31685:15;;:5;:15;;;:107;;31767:12;31789:1;31685:107;;;31729:1;31733:12;31685:107;31642:150;;;;31807:10;31838:1;31824:4;:11;:15;31820:1;:19;:80;;31897:3;31820:80;;;31842:52;31865:7;31874:6;31882:4;31887:1;31891;31887:5;31882:11;;;;;;;31842:52;31953:12;;;31963:1;31953:12;;;;;;;;;;31915:51;;;;;;;;;;;;;;;:9;:51;;;;;;;;;;;;;;;;;;;;;;31807:93;;-1:-1:-1;31915:9:0;;;;;;31925:10;;31937;;31807:93;;31953:12;;31915:51;;;;;;;;31953:12;;31915:51;;;;31953: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;31915:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31915:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;30784:3:0;;;;;-1:-1:-1;30747:1231:0;;-1:-1:-1;;;;;;;;;;30747:1231:0;9148:138;9241:5;;;9236:16;;;;9228:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12025:522;12161:16;12210:1;12198:9;:13;12190:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12289:1;12277:9;:13;:31;;;;;12307:1;12294:10;:14;12277:31;12269:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12362:17;12382:35;12411:5;12382:24;:9;12396;12382:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;12362:55;-1:-1:-1;12428:19:0;12450:35;12480:4;12450:25;:10;12465:9;12450:25;:14;:25;:::i;:35::-;12428:57;;12507:32;12537:1;12520:11;12508:9;:23;;;;;;;12507:32;:29;:32;:::i;:::-;12496:43;12025:522;-1:-1:-1;;;;;;12025:522:0:o;10883:329::-;10974:15;11020:1;11010:7;:11;11002:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11091:1;11080:8;:12;:28;;;;;11107:1;11096:8;:12;11080:28;11072:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11196:8;11172:21;:7;11184:8;11172:21;:11;:21;:::i;:::-;:32;;;;;;;10883:329;-1:-1:-1;;;;10883:329:0:o;9618:345::-;9693:14;9709;9754:6;9744:16;;:6;:16;;;;9736:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9839:6;9830:15;;:6;:15;;;:53;;9868:6;9876;9830:53;;;9849:6;9857;9830:53;9811:72;;-1:-1:-1;9811:72:0;-1:-1:-1;9902:20:0;;;9894:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9618:345;;;;;:::o;17174:1406::-;17505:48;;;;;;:62;:48;;;;;;;;;;;;;;;;17404:15;;;;;;17521:7;17505:32;;;;;;:48;;;;;;;;;;;;;;;:32;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;17505:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17505:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17505:48:0;:62;;;17501:146;;;17584:51;;;;;;:35;:51;;;;;;;;;;;;;;;;17600:7;17584:35;;;;;;:51;;;;;;;;;;;;;;;-1:-1:-1;17584:35:0;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;17584:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17584:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17501:146:0;17658:16;17676;17696:51;17723:7;17732:6;17740;17696:26;:51::i;:::-;17657:90;;;;17762:8;17774:1;17762:13;:30;;;;-1:-1:-1;17779:13:0;;17762:30;17758:815;;;17831:14;;-1:-1:-1;17847:14:0;;-1:-1:-1;17758:815:0;;;17895:22;17920:56;17941:14;17957:8;17967;17920:20;:56::i;:::-;17895:81;;18013:14;17995;:32;17991:571;;18074:10;18056:14;:28;;18048:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18166:14;;-1:-1:-1;18182:14:0;-1:-1:-1;18182:14:0;17991:571;;;18238:22;18263:56;18284:14;18300:8;18310;18263:20;:56::i;:::-;18238:81;;18363:14;18345;:32;;18338:40;;;;18423:10;18405:14;:28;;18397:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18515:14;-1:-1:-1;18531:14:0;;-1:-1:-1;17991:571:0;17758:815;;17174:1406;;;;;;;;;;;:::o;9294:151::-;9352:9;9382:6;;;:30;;-1:-1:-1;;9397:5:0;;;9411:1;9406;9397:5;9406:1;9392:15;;;;;:20;9382:30;9374:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9003:137;9096:5;;;9091:16;;;;9083:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10290:480;10417:16;10435;10465:14;10485:26;10496:6;10504;10485:10;:26::i;:::-;10464:47;;;10522:32;10530:7;10539:6;10547;10522:7;:32::i;:::-;;10566:16;10584;10619:32;10627:7;10636:6;10644;10619:7;:32::i;:::-;10606:58;;;:60;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10606:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10606:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10606:60:0;;;;;;;10565:101;;;;;-1:-1:-1;10565:101:0;;-1:-1:-1;10700:16:0;;;;;;;;:62;;10743:8;10753;10700:62;;;10720:8;10730;10700:62;10677:85;;;;-1:-1:-1;10290:480:0;-1:-1:-1;;;;;;;10290:480:0:o
Swarm Source
ipfs://1838952e531dedee26eeaf249aee8685cb03f74ee5973241bef2af16e6f7f97f
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.