Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 20 from a total of 20 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Add Liquidity | 5493882 | 60 days ago | IN | 0 S | 0.00855598 | ||||
Add Liquidity | 5489734 | 60 days ago | IN | 0 S | 0.0105651 | ||||
Add Liquidity | 5489609 | 60 days ago | IN | 0 S | 0.01197969 | ||||
Swap Exact Token... | 5488188 | 60 days ago | IN | 0 S | 0.00745099 | ||||
Add Liquidity | 5479159 | 60 days ago | IN | 0 S | 0.00815325 | ||||
Add Liquidity | 5470814 | 60 days ago | IN | 0 S | 0.00822894 | ||||
Add Liquidity | 5469095 | 60 days ago | IN | 0 S | 0.00960888 | ||||
Add Liquidity | 5467451 | 60 days ago | IN | 0 S | 0.01053639 | ||||
Add Liquidity | 5467413 | 60 days ago | IN | 0 S | 0.01010891 | ||||
Add Liquidity | 5467379 | 60 days ago | IN | 0 S | 0.01053435 | ||||
Add Liquidity | 5452635 | 60 days ago | IN | 0 S | 0.00867881 | ||||
Add Liquidity | 5452292 | 60 days ago | IN | 0 S | 0.01065301 | ||||
Add Liquidity | 5400193 | 61 days ago | IN | 0 S | 0.15112688 | ||||
Add Liquidity | 5400050 | 61 days ago | IN | 0 S | 0.15192964 | ||||
Add Liquidity | 5399619 | 61 days ago | IN | 0 S | 0.15053668 | ||||
Add Liquidity | 5398513 | 61 days ago | IN | 0 S | 0.18071453 | ||||
Add Liquidity | 5397588 | 61 days ago | IN | 0 S | 0.15056891 | ||||
Add Liquidity | 5397378 | 61 days ago | IN | 0 S | 0.15061462 | ||||
Add Liquidity | 5397212 | 61 days ago | IN | 0 S | 0.15056842 | ||||
Add Liquidity | 5390462 | 61 days ago | IN | 0 S | 0.15171235 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
OnlyMemesRouter
Compiler Version
v0.8.27+commit.40a35a09
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-01-25 */ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.4; interface IOnlyMemesFactory { 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; } pragma solidity ^0.8.4; //solhint-disable func-name-mixedcase interface IOnlyMemesRouter01 { function factory() external view returns (address); function WS() external view 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); } pragma solidity ^0.8.4; interface IOnlyMemesRouter is IOnlyMemesRouter01 { 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; } pragma solidity ^0.8.4; interface IOnlyMemesERC20 { 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; } pragma solidity ^0.8.4; interface IVoter { function isBribeWhitelisted(address token) external view returns (bool); function setWhitelistedBribe(address token, bool status) external; function bribe(uint256 pid, address reward, uint256 amount) external; function _lastEpoch() external view returns (uint256); function _epochLength() external view returns(uint256); function _unlockTokens(address owner) external; } pragma solidity ^0.8.4; interface IOnlyMemesPair is IOnlyMemesERC20 { 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; function setPID(uint256 pid) external; function setFeeAddresses(IVoter, address, address) external; } pragma solidity ^0.8.4; 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); } pragma solidity ^0.8.4; interface IWS { function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; } pragma solidity ^0.8.4; // 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" ); } } pragma solidity ^0.8.4; //solhint-disable reason-string library OnlyMemesLibrary { // 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, "OnlyMemesLibrary: IDENTICAL_ADDRESSES"); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), "OnlyMemesLibrary: ZERO_ADDRESS"); } function pairFor( address factory, address tokenA, address tokenB ) internal view returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = IOnlyMemesFactory(factory).getPair(token0,token1); } // 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); (uint256 reserve0, uint256 reserve1, ) = IOnlyMemesPair( 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, "OnlyMemesLibrary: INSUFFICIENT_AMOUNT"); require( reserveA > 0 && reserveB > 0, "OnlyMemesLibrary: INSUFFICIENT_LIQUIDITY" ); amountB = (amountA * 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, "OnlyMemesLibrary: INSUFFICIENT_INPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "OnlyMemesLibrary: INSUFFICIENT_LIQUIDITY" ); uint256 amountInWithFee = amountIn * 997; uint256 numerator = amountInWithFee * reserveOut; uint256 denominator = reserveIn * 1000 + 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, "OnlyMemesLibrary: INSUFFICIENT_OUTPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "OnlyMemesLibrary: INSUFFICIENT_LIQUIDITY" ); uint256 numerator = reserveIn * amountOut * 1000; uint256 denominator = (reserveOut - amountOut) * 997; amountIn = numerator / denominator + 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, "OnlyMemesLibrary: 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, "OnlyMemesLibrary: 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); } } } pragma solidity ^0.8.4; contract OnlyMemesRouter is IOnlyMemesRouter { //solhint-disable-next-line immutable-vars-naming address public immutable override factory; address public immutable override WS; modifier ensure(uint256 deadline) { require(deadline >= block.timestamp, "OnlyMemesRouter: EXPIRED"); _; } constructor(address _factory, address _WS) { factory = _factory; WS = _WS; } receive() external payable { assert(msg.sender == WS); // only accept ETH via fallback from the WS 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 (IOnlyMemesFactory(factory).getPair(tokenA, tokenB) == address(0)) { IOnlyMemesFactory(factory).createPair(tokenA, tokenB); } (uint256 reserveA, uint256 reserveB) = OnlyMemesLibrary.getReserves( factory, tokenA, tokenB ); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint256 amountBOptimal = OnlyMemesLibrary.quote( amountADesired, reserveA, reserveB ); if (amountBOptimal <= amountBDesired) { require( amountBOptimal >= amountBMin, "OnlyMemesRouter: INSUFFICIENT_B_AMOUNT" ); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint256 amountAOptimal = OnlyMemesLibrary.quote( amountBDesired, reserveB, reserveA ); assert(amountAOptimal <= amountADesired); require( amountAOptimal >= amountAMin, "OnlyMemesRouter: 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 = OnlyMemesLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IOnlyMemesPair(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, WS, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = OnlyMemesLibrary.pairFor(factory, token, WS); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWS(WS).deposit{value: amountETH}(); assert(IWS(WS).transfer(pair, amountETH)); liquidity = IOnlyMemesPair(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 = OnlyMemesLibrary.pairFor(factory, tokenA, tokenB); IOnlyMemesPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint256 amount0, uint256 amount1) = IOnlyMemesPair(pair).burn(to); (address token0, ) = OnlyMemesLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require( amountA >= amountAMin, "OnlyMemesRouter: INSUFFICIENT_A_AMOUNT" ); require( amountB >= amountBMin, "OnlyMemesRouter: 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, WS, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, amountToken); IWS(WS).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 = OnlyMemesLibrary.pairFor(factory, tokenA, tokenB); uint256 value = approveMax ? type(uint256).max : liquidity; IOnlyMemesPair(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 = OnlyMemesLibrary.pairFor(factory, token, WS); uint256 value = approveMax ? type(uint256).max : liquidity; IOnlyMemesPair(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, WS, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer( token, to, IERC20(token).balanceOf(address(this)) ); IWS(WS).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 = OnlyMemesLibrary.pairFor(factory, token, WS); uint256 value = approveMax ? type(uint256).max : liquidity; IOnlyMemesPair(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, ) = OnlyMemesLibrary.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 ? OnlyMemesLibrary.pairFor(factory, output, path[i + 2]) : _to; IOnlyMemesPair(OnlyMemesLibrary.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 = OnlyMemesLibrary.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "OnlyMemesRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, OnlyMemesLibrary.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 = OnlyMemesLibrary.getAmountsIn(factory, amountOut, path); require( amounts[0] <= amountInMax, "OnlyMemesRouter: EXCESSIVE_INPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, OnlyMemesLibrary.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] == WS, "OnlyMemesRouter: INVALID_PATH"); amounts = OnlyMemesLibrary.getAmountsOut(factory, msg.value, path); require( amounts[amounts.length - 1] >= amountOutMin, "OnlyMemesRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); IWS(WS).deposit{value: amounts[0]}(); assert( IWS(WS).transfer( OnlyMemesLibrary.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] == WS, "OnlyMemesRouter: INVALID_PATH"); amounts = OnlyMemesLibrary.getAmountsIn(factory, amountOut, path); require( amounts[0] <= amountInMax, "OnlyMemesRouter: EXCESSIVE_INPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, OnlyMemesLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWS(WS).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] == WS, "OnlyMemesRouter: INVALID_PATH"); amounts = OnlyMemesLibrary.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "OnlyMemesRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, OnlyMemesLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWS(WS).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] == WS, "OnlyMemesRouter: INVALID_PATH"); amounts = OnlyMemesLibrary.getAmountsIn(factory, amountOut, path); require( amounts[0] <= msg.value, "OnlyMemesRouter: EXCESSIVE_INPUT_AMOUNT" ); IWS(WS).deposit{value: amounts[0]}(); assert( IWS(WS).transfer( OnlyMemesLibrary.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, ) = OnlyMemesLibrary.sortTokens(input, output); IOnlyMemesPair pair = IOnlyMemesPair( OnlyMemesLibrary.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)) - reserveInput; amountOutput = OnlyMemesLibrary.getAmountOut( amountInput, reserveInput, reserveOutput ); } (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOutput) : (amountOutput, uint256(0)); address to = i < path.length - 2 ? OnlyMemesLibrary.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, OnlyMemesLibrary.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) - balanceBefore >= amountOutMin, "OnlyMemesRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable virtual override ensure(deadline) { require(path[0] == WS, "OnlyMemesRouter: INVALID_PATH"); uint256 amountIn = msg.value; IWS(WS).deposit{value: amountIn}(); assert( IWS(WS).transfer( OnlyMemesLibrary.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) - balanceBefore >= amountOutMin, "OnlyMemesRouter: 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] == WS, "OnlyMemesRouter: INVALID_PATH"); TransferHelper.safeTransferFrom( path[0], msg.sender, OnlyMemesLibrary.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint256 amountOut = IERC20(WS).balanceOf(address(this)); require( amountOut >= amountOutMin, "OnlyMemesRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); IWS(WS).withdraw(amountOut); TransferHelper.safeTransferETH(to, amountOut); } // **** LIBRARY FUNCTIONS **** function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) public pure virtual override returns (uint256 amountB) { return OnlyMemesLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) public pure virtual override returns (uint256 amountOut) { return OnlyMemesLibrary.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) public pure virtual override returns (uint256 amountIn) { return OnlyMemesLibrary.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut( uint256 amountIn, address[] memory path ) public view virtual override returns (uint256[] memory amounts) { return OnlyMemesLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn( uint256 amountOut, address[] memory path ) public view virtual override returns (uint256[] memory amounts) { return OnlyMemesLibrary.getAmountsIn(factory, amountOut, path); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WS","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WS","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
60c060405234801561000f575f5ffd5b5060405161409c38038061409c83398101604081905261002e91610060565b6001600160a01b039182166080521660a052610091565b80516001600160a01b038116811461005b575f5ffd5b919050565b5f5f60408385031215610071575f5ffd5b61007a83610045565b915061008860208401610045565b90509250929050565b60805160a051613e7e61021e5f395f818161015a015281816102ea01528181610507015281816105560152818161060c0152818161082a01528181610b5201528181610c8a01528181610fcc015281816110ac01528181611155015281816111e3015281816112ff01528181611388015281816115c50152818161167b0152818161170701528181611782015281816117f201528181611c2201528181611e0401528181611e5901528181611e8d01528181611f1e015281816120510152818161216001526121e901525f818161041501528181610688015281816107580152818161090b0152818161094201528181610a3201528181610bce01528181610c6801528181610d970152818161125d015281816113ba015281816114fe0152818161182401528181611a3601528181611bd201528181611c0001528181611d1f01528181611e37015281816120cb0152818161221b01528181612a6901528181612ab901528181612d7101528181612f0f01528181613254015281816132f401526133670152613e7e5ff3fe60806040526004361061014a575f3560e01c806385f8c259116100b3578063c45a01551161006d578063c45a015514610404578063d06ca61f14610437578063ded9382a14610456578063e8e3370014610475578063f305d719146104af578063fb3bdb41146104c2575f5ffd5b806385f8c259146103565780638803dbee14610375578063ad615dec14610394578063af2979eb146103b3578063b6f9de95146103d2578063baa2abde146103e5575f5ffd5b80634a25d94a116101045780634a25d94a1461027c5780635b0d59841461029b5780635c11d795146102ba5780635d409359146102d9578063791ac947146103245780637ff36ab514610343575f5ffd5b806302751cec1461018d578063054d50d4146101c657806318cbafe5146101f35780631f00ca741461021f5780632195995c1461023e57806338ed17391461025d575f5ffd5b3661018957336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018757610187613506565b005b5f5ffd5b348015610198575f5ffd5b506101ac6101a7366004613541565b6104d5565b604080519283526020830191909152015b60405180910390f35b3480156101d1575f5ffd5b506101e56101e036600461359b565b6105cb565b6040519081526020016101bd565b3480156101fe575f5ffd5b5061021261020d366004613605565b6105df565b6040516101bd9190613673565b34801561022a575f5ffd5b506102126102393660046136c9565b610904565b348015610249575f5ffd5b506101ac6102583660046137bd565b61093a565b348015610268575f5ffd5b50610212610277366004613605565b610a0a565b348015610287575f5ffd5b50610212610296366004613605565b610b25565b3480156102a6575f5ffd5b506101e56102b5366004613865565b610c61565b3480156102c5575f5ffd5b506101876102d4366004613605565b610d46565b3480156102e4575f5ffd5b5061030c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bd565b34801561032f575f5ffd5b5061018761033e366004613605565b610fa1565b6102126103513660046138f8565b6111be565b348015610361575f5ffd5b506101e561037036600461359b565b6114ca565b348015610380575f5ffd5b5061021261038f366004613605565b6114d6565b34801561039f575f5ffd5b506101e56103ae36600461359b565b611591565b3480156103be575f5ffd5b506101e56103cd366004613541565b61159d565b6101876103e03660046138f8565b6116e4565b3480156103f0575f5ffd5b506101ac6103ff36600461395a565b611a0d565b34801561040f575f5ffd5b5061030c7f000000000000000000000000000000000000000000000000000000000000000081565b348015610442575f5ffd5b506102126104513660046136c9565b611bcb565b348015610461575f5ffd5b506101ac610470366004613865565b611bf8565b348015610480575f5ffd5b5061049461048f3660046139c8565b611ce2565b604080519384526020840192909252908201526060016101bd565b6104946104bd366004613541565b611dda565b6102126104d03660046138f8565b61202c565b5f5f82428110156105015760405162461bcd60e51b81526004016104f890613a3f565b60405180910390fd5b610530897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a611a0d565b909350915061054089868561236b565b604051632e1a7d4d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b15801561059f575f5ffd5b505af11580156105b1573d5f5f3e3d5ffd5b505050506105bf8583612497565b50965096945050505050565b5f6105d7848484612572565b949350505050565b606081428110156106025760405162461bcd60e51b81526004016104f890613a3f565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686610639600182613a8a565b81811061064857610648613a9d565b905060200201602081019061065d9190613ab1565b6001600160a01b0316146106835760405162461bcd60e51b81526004016104f890613ad3565b6106e07f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061264b92505050565b91508682600184516106f29190613a8a565b8151811061070257610702613a9d565b602002602001015110156107285760405162461bcd60e51b81526004016104f890613b0a565b6107ea86865f81811061073d5761073d613a9d565b90506020020160208101906107529190613ab1565b336107cb7f00000000000000000000000000000000000000000000000000000000000000008a8a5f81811061078957610789613a9d565b905060200201602081019061079e9190613ab1565b8b8b60018181106107b1576107b1613a9d565b90506020020160208101906107c69190613ab1565b6127c7565b855f815181106107dd576107dd613a9d565b6020026020010151612855565b610828828787808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525030925061298e915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d83600185516108669190613a8a565b8151811061087657610876613a9d565b60200260200101516040518263ffffffff1660e01b815260040161089c91815260200190565b5f604051808303815f87803b1580156108b3575f5ffd5b505af11580156108c5573d5f5f3e3d5ffd5b505050506108f98483600185516108dc9190613a8a565b815181106108ec576108ec613a9d565b6020026020010151612497565b509695505050505050565b60606109317f00000000000000000000000000000000000000000000000000000000000000008484612b81565b90505b92915050565b5f5f5f6109687f00000000000000000000000000000000000000000000000000000000000000008f8f6127c7565b90505f87610976578c610979565b5f195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf906109b4903390309086908f908e908e908e90600401613b55565b5f604051808303815f87803b1580156109cb575f5ffd5b505af11580156109dd573d5f5f3e3d5ffd5b505050506109f08f8f8f8f8f8f8f611a0d565b809450819550505050509b509b9950505050505050505050565b60608142811015610a2d5760405162461bcd60e51b81526004016104f890613a3f565b610a8a7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061264b92505050565b9150868260018451610a9c9190613a8a565b81518110610aac57610aac613a9d565b60200260200101511015610ad25760405162461bcd60e51b81526004016104f890613b0a565b610ae786865f81811061073d5761073d613a9d565b6108f9828787808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525089925061298e915050565b60608142811015610b485760405162461bcd60e51b81526004016104f890613a3f565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686610b7f600182613a8a565b818110610b8e57610b8e613a9d565b9050602002016020810190610ba39190613ab1565b6001600160a01b031614610bc95760405162461bcd60e51b81526004016104f890613ad3565b610c267f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612b8192505050565b915086825f81518110610c3b57610c3b613a9d565b602002602001015111156107285760405162461bcd60e51b81526004016104f890613b96565b5f5f610cae7f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006127c7565b90505f86610cbc578b610cbf565b5f195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90610cfa903390309086908e908d908d908d90600401613b55565b5f604051808303815f87803b158015610d11575f5ffd5b505af1158015610d23573d5f5f3e3d5ffd5b50505050610d358d8d8d8d8d8d61159d565b9d9c50505050505050505050505050565b8042811015610d675760405162461bcd60e51b81526004016104f890613a3f565b610df685855f818110610d7c57610d7c613a9d565b9050602002016020810190610d919190613ab1565b33610df07f000000000000000000000000000000000000000000000000000000000000000089895f818110610dc857610dc8613a9d565b9050602002016020810190610ddd9190613ab1565b8a8a60018181106107b1576107b1613a9d565b8a612855565b5f8585610e04600182613a8a565b818110610e1357610e13613a9d565b9050602002016020810190610e289190613ab1565b6040516370a0823160e01b81526001600160a01b03868116600483015291909116906370a0823190602401602060405180830381865afa158015610e6e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e929190613bdd565b9050610ed18686808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250889250612d00915050565b86818787610ee0600182613a8a565b818110610eef57610eef613a9d565b9050602002016020810190610f049190613ab1565b6040516370a0823160e01b81526001600160a01b03888116600483015291909116906370a08231906024015b602060405180830381865afa158015610f4b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f6f9190613bdd565b610f799190613a8a565b1015610f975760405162461bcd60e51b81526004016104f890613b0a565b5050505050505050565b8042811015610fc25760405162461bcd60e51b81526004016104f890613a3f565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585610ff9600182613a8a565b81811061100857611008613a9d565b905060200201602081019061101d9190613ab1565b6001600160a01b0316146110435760405162461bcd60e51b81526004016104f890613ad3565b61105885855f818110610d7c57610d7c613a9d565b6110958585808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250309250612d00915050565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156110f9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061111d9190613bdd565b90508681101561113f5760405162461bcd60e51b81526004016104f890613b0a565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b15801561119e575f5ffd5b505af11580156111b0573d5f5f3e3d5ffd5b50505050610f978482612497565b606081428110156111e15760405162461bcd60e51b81526004016104f890613a3f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686865f81811061121d5761121d613a9d565b90506020020160208101906112329190613ab1565b6001600160a01b0316146112585760405162461bcd60e51b81526004016104f890613ad3565b6112b57f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061264b92505050565b91508682600184516112c79190613a8a565b815181106112d7576112d7613a9d565b602002602001015110156112fd5760405162461bcd60e51b81526004016104f890613b0a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0835f8151811061133e5761133e613a9d565b60200260200101516040518263ffffffff1660e01b81526004015f604051808303818588803b15801561136f575f5ffd5b505af1158015611381573d5f5f3e3d5ffd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6113eb7f000000000000000000000000000000000000000000000000000000000000000089895f818110610dc857610dc8613a9d565b845f815181106113fd576113fd613a9d565b60200260200101516040518363ffffffff1660e01b81526004016114369291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af1158015611452573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114769190613bf4565b61148257611482613506565b6114c0828787808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525089925061298e915050565b5095945050505050565b5f6105d7848484612fbe565b606081428110156114f95760405162461bcd60e51b81526004016104f890613a3f565b6115567f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612b8192505050565b915086825f8151811061156b5761156b613a9d565b60200260200101511115610ad25760405162461bcd60e51b81526004016104f890613b96565b5f6105d7848484613094565b5f81428110156115bf5760405162461bcd60e51b81526004016104f890613a3f565b6115ee887f00000000000000000000000000000000000000000000000000000000000000008989893089611a0d565b6040516370a0823160e01b81523060048201529093506116659150899086906001600160a01b038316906370a0823190602401602060405180830381865afa15801561163c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116609190613bdd565b61236b565b604051632e1a7d4d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b1580156116c4575f5ffd5b505af11580156116d6573d5f5f3e3d5ffd5b505050506108f98483612497565b80428110156117055760405162461bcd60e51b81526004016104f890613a3f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031685855f81811061174157611741613a9d565b90506020020160208101906117569190613ab1565b6001600160a01b03161461177c5760405162461bcd60e51b81526004016104f890613ad3565b5f3490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b1580156117d9575f5ffd5b505af11580156117eb573d5f5f3e3d5ffd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6118557f000000000000000000000000000000000000000000000000000000000000000089895f818110610dc857610dc8613a9d565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af115801561189f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c39190613bf4565b6118cf576118cf613506565b5f86866118dd600182613a8a565b8181106118ec576118ec613a9d565b90506020020160208101906119019190613ab1565b6040516370a0823160e01b81526001600160a01b03878116600483015291909116906370a0823190602401602060405180830381865afa158015611947573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196b9190613bdd565b90506119aa8787808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250899250612d00915050565b878188886119b9600182613a8a565b8181106119c8576119c8613a9d565b90506020020160208101906119dd9190613ab1565b6040516370a0823160e01b81526001600160a01b03898116600483015291909116906370a0823190602401610f30565b5f5f8242811015611a305760405162461bcd60e51b81526004016104f890613a3f565b5f611a5c7f00000000000000000000000000000000000000000000000000000000000000008c8c6127c7565b6040516323b872dd60e01b81523360048201526001600160a01b03821660248201819052604482018c90529192506323b872dd906064016020604051808303815f875af1158015611aaf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad39190613bf4565b5060405163226bf2d160e21b81526001600160a01b0387811660048301525f9182918416906389afcb449060240160408051808303815f875af1158015611b1c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b409190613c0f565b915091505f611b4f8e8e613131565b509050806001600160a01b03168e6001600160a01b031614611b72578183611b75565b82825b90975095508a871015611b9a5760405162461bcd60e51b81526004016104f890613c31565b89861015611bba5760405162461bcd60e51b81526004016104f890613c77565b505050505097509795505050505050565b60606109317f0000000000000000000000000000000000000000000000000000000000000000848461264b565b5f5f5f611c467f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006127c7565b90505f87611c54578c611c57565b5f195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90611c92903390309086908f908e908e908e90600401613b55565b5f604051808303815f87803b158015611ca9575f5ffd5b505af1158015611cbb573d5f5f3e3d5ffd5b50505050611ccd8e8e8e8e8e8e6104d5565b909f909e509c50505050505050505050505050565b5f5f5f8342811015611d065760405162461bcd60e51b81526004016104f890613a3f565b611d148c8c8c8c8c8c613227565b90945092505f611d457f00000000000000000000000000000000000000000000000000000000000000008e8e6127c7565b9050611d538d338388612855565b611d5f8c338387612855565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a627842906024016020604051808303815f875af1158015611da4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc89190613bdd565b92505050985098509895505050505050565b5f5f5f8342811015611dfe5760405162461bcd60e51b81526004016104f890613a3f565b611e2c8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613227565b90945092505f611e7d7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006127c7565b9050611e8b8b338388612855565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004015f604051808303818588803b158015611ee4575f5ffd5b505af1158015611ef6573d5f5f3e3d5ffd5b505060405163a9059cbb60e01b81526001600160a01b038581166004830152602482018990527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303815f875af1158015611f68573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f8c9190613bf4565b611f9857611f98613506565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a627842906024016020604051808303815f875af1158015611fdd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120019190613bdd565b92508334111561201e5761201e336120198634613a8a565b612497565b505096509650969350505050565b6060814281101561204f5760405162461bcd60e51b81526004016104f890613a3f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686865f81811061208b5761208b613a9d565b90506020020160208101906120a09190613ab1565b6001600160a01b0316146120c65760405162461bcd60e51b81526004016104f890613ad3565b6121237f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612b8192505050565b915034825f8151811061213857612138613a9d565b6020026020010151111561215e5760405162461bcd60e51b81526004016104f890613b96565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0835f8151811061219f5761219f613a9d565b60200260200101516040518263ffffffff1660e01b81526004015f604051808303818588803b1580156121d0575f5ffd5b505af11580156121e2573d5f5f3e3d5ffd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61224c7f000000000000000000000000000000000000000000000000000000000000000089895f818110610dc857610dc8613a9d565b845f8151811061225e5761225e613a9d565b60200260200101516040518363ffffffff1660e01b81526004016122979291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af11580156122b3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122d79190613bf4565b6122e3576122e3613506565b612321828787808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525089925061298e915050565b815f8151811061233357612333613a9d565b60200260200101513411156114c0576114c033835f8151811061235857612358613a9d565b6020026020010151346120199190613a8a565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f928392908716916123c69190613cbd565b5f604051808303815f865af19150503d805f81146123ff576040519150601f19603f3d011682016040523d82523d5f602084013e612404565b606091505b509150915081801561242e57508051158061242e57508080602001905181019061242e9190613bf4565b6124905760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b60648201526084016104f8565b5050505050565b604080515f808252602082019092526001600160a01b0384169083906040516124c09190613cbd565b5f6040518083038185875af1925050503d805f81146124fa576040519150601f19603f3d011682016040523d82523d5f602084013e6124ff565b606091505b505090508061256d5760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b60648201526084016104f8565b505050565b5f5f84116125d65760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c794d656d65734c6962726172793a20494e53554646494349454e545f4960448201526a1394155517d05353d5539560aa1b60648201526084016104f8565b5f831180156125e457505f82115b6126005760405162461bcd60e51b81526004016104f890613cd3565b5f61260d856103e5613d1b565b90505f61261a8483613d1b565b90505f8261262a876103e8613d1b565b6126349190613d32565b90506126408183613d45565b979650505050505050565b606060028251101561269f5760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c794d656d65734c6962726172793a20494e56414c49445f50415448000060448201526064016104f8565b815167ffffffffffffffff8111156126b9576126b96136b5565b6040519080825280602002602001820160405280156126e2578160200160208202803683370190505b50905082815f815181106126f8576126f8613a9d565b6020026020010181815250505f5b600183516127149190613a8a565b8110156127bf575f5f6127668786858151811061273357612733613a9d565b6020026020010151878660016127499190613d32565b8151811061275957612759613a9d565b6020026020010151613441565b9150915061278e84848151811061277f5761277f613a9d565b60200260200101518383612572565b8461279a856001613d32565b815181106127aa576127aa613a9d565b60209081029190910101525050600101612706565b509392505050565b5f5f5f6127d48585613131565b60405163e6a4390560e01b81526001600160a01b03808416600483015280831660248301529294509092509087169063e6a4390590604401602060405180830381865afa158015612827573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061284b9190613d64565b9695505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291515f928392908816916128b89190613cbd565b5f604051808303815f865af19150503d805f81146128f1576040519150601f19603f3d011682016040523d82523d5f602084013e6128f6565b606091505b50915091508180156129205750805115806129205750808060200190518101906129209190613bf4565b6129865760405162461bcd60e51b815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472604482015270185b9cd9995c919c9bdb4819985a5b1959607a1b60648201526084016104f8565b505050505050565b5f5b6001835161299e9190613a8a565b811015612b7b575f5f8483815181106129b9576129b9613a9d565b6020026020010151858460016129cf9190613d32565b815181106129df576129df613a9d565b6020026020010151915091505f6129f68383613131565b5090505f87612a06866001613d32565b81518110612a1657612a16613a9d565b602002602001015190505f5f836001600160a01b0316866001600160a01b031614612a4257825f612a45565b5f835b915091505f60028a51612a589190613a8a565b8810612a645788612ab2565b612ab27f0000000000000000000000000000000000000000000000000000000000000000878c612a958c6002613d32565b81518110612aa557612aa5613a9d565b60200260200101516127c7565b9050612adf7f000000000000000000000000000000000000000000000000000000000000000088886127c7565b6001600160a01b031663022c0d9f8484845f6040519080825280601f01601f191660200182016040528015612b1b576020820181803683370190505b506040518563ffffffff1660e01b8152600401612b3b9493929190613d7f565b5f604051808303815f87803b158015612b52575f5ffd5b505af1158015612b64573d5f5f3e3d5ffd5b505060019099019850612990975050505050505050565b50505050565b6060600282511015612bd55760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c794d656d65734c6962726172793a20494e56414c49445f50415448000060448201526064016104f8565b815167ffffffffffffffff811115612bef57612bef6136b5565b604051908082528060200260200182016040528015612c18578160200160208202803683370190505b509050828160018351612c2b9190613a8a565b81518110612c3b57612c3b613a9d565b6020026020010181815250505f60018351612c569190613a8a565b90505b80156127bf575f80612c9b8786612c71600187613a8a565b81518110612c8157612c81613a9d565b602002602001015187868151811061275957612759613a9d565b91509150612cc3848481518110612cb457612cb4613a9d565b60200260200101518383612fbe565b84612ccf600186613a8a565b81518110612cdf57612cdf613a9d565b60200260200101818152505050508080612cf890613dd1565b915050612c59565b5f5b60018351612d109190613a8a565b81101561256d575f5f848381518110612d2b57612d2b613a9d565b602002602001015185846001612d419190613d32565b81518110612d5157612d51613a9d565b6020026020010151915091505f612d688383613131565b5090505f612d977f000000000000000000000000000000000000000000000000000000000000000085856127c7565b90505f5f5f5f846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612dd9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dfd9190613dfc565b506001600160701b031691506001600160701b031691505f5f876001600160a01b03168a6001600160a01b031614612e36578284612e39565b83835b6040516370a0823160e01b81526001600160a01b038a8116600483015292945090925083918c16906370a0823190602401602060405180830381865afa158015612e85573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ea99190613bdd565b612eb39190613a8a565b9550612ec0868383612572565b9450505050505f5f856001600160a01b0316886001600160a01b031614612ee857825f612eeb565b5f835b915091505f60028c51612efe9190613a8a565b8a10612f0a578a612f3b565b612f3b7f0000000000000000000000000000000000000000000000000000000000000000898e612a958e6002613d32565b604080515f8152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f90612f7c9086908690869060248101613d7f565b5f604051808303815f87803b158015612f93575f5ffd5b505af1158015612fa5573d5f5f3e3d5ffd5b50506001909b019a50612d029950505050505050505050565b5f5f84116130235760405162461bcd60e51b815260206004820152602c60248201527f4f6e6c794d656d65734c6962726172793a20494e53554646494349454e545f4f60448201526b155514155517d05353d5539560a21b60648201526084016104f8565b5f8311801561303157505f82115b61304d5760405162461bcd60e51b81526004016104f890613cd3565b5f6130588585613d1b565b613064906103e8613d1b565b90505f6130718685613a8a565b61307d906103e5613d1b565b90506130898183613d45565b61284b906001613d32565b5f5f84116130f25760405162461bcd60e51b815260206004820152602560248201527f4f6e6c794d656d65734c6962726172793a20494e53554646494349454e545f416044820152641353d5539560da1b60648201526084016104f8565b5f8311801561310057505f82115b61311c5760405162461bcd60e51b81526004016104f890613cd3565b826131278386613d1b565b6105d79190613d45565b5f5f826001600160a01b0316846001600160a01b0316036131a25760405162461bcd60e51b815260206004820152602560248201527f4f6e6c794d656d65734c6962726172793a204944454e544943414c5f41444452604482015264455353455360d81b60648201526084016104f8565b826001600160a01b0316846001600160a01b0316106131c25782846131c5565b83835b90925090506001600160a01b0382166132205760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c794d656d65734c6962726172793a205a45524f5f41444452455353000060448201526064016104f8565b9250929050565b60405163e6a4390560e01b81526001600160a01b03878116600483015286811660248301525f91829182917f00000000000000000000000000000000000000000000000000000000000000009091169063e6a4390590604401602060405180830381865afa15801561329b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132bf9190613d64565b6001600160a01b031603613360576040516364e329cb60e11b81526001600160a01b03898116600483015288811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063c9c65396906044016020604051808303815f875af115801561333a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061335e9190613d64565b505b5f5f61338d7f00000000000000000000000000000000000000000000000000000000000000008b8b613441565b91509150815f14801561339e575080155b156133ae57879350869250613434565b5f6133ba898484613094565b90508781116133ee57858110156133e35760405162461bcd60e51b81526004016104f890613c77565b889450925082613432565b5f6133fa898486613094565b90508981111561340c5761340c613506565b8781101561342c5760405162461bcd60e51b81526004016104f890613c31565b94508793505b505b5050965096945050505050565b5f5f5f61344e8585613131565b5090505f5f61345e8888886127c7565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613499573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134bd9190613dfc565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b0316146134f45780826134f7565b81815b90999098509650505050505050565b634e487b7160e01b5f52600160045260245ffd5b6001600160a01b038116811461352e575f5ffd5b50565b803561353c8161351a565b919050565b5f5f5f5f5f5f60c08789031215613556575f5ffd5b86356135618161351a565b955060208701359450604087013593506060870135925060808701356135868161351a565b9598949750929591949360a090920135925050565b5f5f5f606084860312156135ad575f5ffd5b505081359360208301359350604090920135919050565b5f5f83601f8401126135d4575f5ffd5b50813567ffffffffffffffff8111156135eb575f5ffd5b6020830191508360208260051b8501011115613220575f5ffd5b5f5f5f5f5f5f60a0878903121561361a575f5ffd5b8635955060208701359450604087013567ffffffffffffffff81111561363e575f5ffd5b61364a89828a016135c4565b909550935050606087013561365e8161351a565b95989497509295919493608090920135925050565b602080825282518282018190525f918401906040840190835b818110156136aa57835183526020938401939092019160010161368c565b509095945050505050565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156136da575f5ffd5b82359150602083013567ffffffffffffffff8111156136f7575f5ffd5b8301601f81018513613707575f5ffd5b803567ffffffffffffffff811115613721576137216136b5565b8060051b604051601f19603f830116810181811067ffffffffffffffff8211171561374e5761374e6136b5565b60405291825260208184018101929081018884111561376b575f5ffd5b6020850194505b838510156137915761378385613531565b815260209485019401613772565b50809450505050509250929050565b801515811461352e575f5ffd5b803560ff8116811461353c575f5ffd5b5f5f5f5f5f5f5f5f5f5f5f6101608c8e0312156137d8575f5ffd5b8b356137e38161351a565b9a5060208c01356137f38161351a565b995060408c0135985060608c0135975060808c0135965060a08c01356138188161351a565b955060c08c0135945060e08c013561382f816137a0565b935061383e6101008d016137ad565b9a9d999c50979a969995989497509295919493610120830135935061014090920135919050565b5f5f5f5f5f5f5f5f5f5f6101408b8d03121561387f575f5ffd5b8a3561388a8161351a565b995060208b0135985060408b0135975060608b0135965060808b01356138af8161351a565b955060a08b0135945060c08b01356138c6816137a0565b93506138d460e08c016137ad565b999c989b509699959894979396509194610100810135936101209091013592509050565b5f5f5f5f5f6080868803121561390c575f5ffd5b85359450602086013567ffffffffffffffff811115613929575f5ffd5b613935888289016135c4565b90955093505060408601356139498161351a565b949793965091946060013592915050565b5f5f5f5f5f5f5f60e0888a031215613970575f5ffd5b873561397b8161351a565b9650602088013561398b8161351a565b955060408801359450606088013593506080880135925060a08801356139b08161351a565b96999598509396929591949193505060c09091013590565b5f5f5f5f5f5f5f5f610100898b0312156139e0575f5ffd5b88356139eb8161351a565b975060208901356139fb8161351a565b965060408901359550606089013594506080890135935060a0890135925060c0890135613a278161351a565b979a969950949793969295919450919260e001359150565b60208082526018908201527f4f6e6c794d656d6573526f757465723a20455850495245440000000000000000604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561093457610934613a76565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613ac1575f5ffd5b8135613acc8161351a565b9392505050565b6020808252601d908201527f4f6e6c794d656d6573526f757465723a20494e56414c49445f50415448000000604082015260600190565b6020808252602b908201527f4f6e6c794d656d6573526f757465723a20494e53554646494349454e545f4f5560408201526a1514155517d05353d5539560aa1b606082015260800190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b60208082526027908201527f4f6e6c794d656d6573526f757465723a204558434553534956455f494e50555460408201526617d05353d5539560ca1b606082015260800190565b5f60208284031215613bed575f5ffd5b5051919050565b5f60208284031215613c04575f5ffd5b8151613acc816137a0565b5f5f60408385031215613c20575f5ffd5b505080516020909101519092909150565b60208082526026908201527f4f6e6c794d656d6573526f757465723a20494e53554646494349454e545f415f604082015265105353d5539560d21b606082015260800190565b60208082526026908201527f4f6e6c794d656d6573526f757465723a20494e53554646494349454e545f425f604082015265105353d5539560d21b606082015260800190565b5f82518060208501845e5f920191825250919050565b60208082526028908201527f4f6e6c794d656d65734c6962726172793a20494e53554646494349454e545f4c604082015267495155494449545960c01b606082015260800190565b808202811582820484141761093457610934613a76565b8082018082111561093457610934613a76565b5f82613d5f57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215613d74575f5ffd5b8151613acc8161351a565b84815283602082015260018060a01b0383166040820152608060608201525f8251806080840152806020850160a085015e5f60a0828501015260a0601f19601f83011684010191505095945050505050565b5f81613ddf57613ddf613a76565b505f190190565b80516001600160701b038116811461353c575f5ffd5b5f5f5f60608486031215613e0e575f5ffd5b613e1784613de6565b9250613e2560208501613de6565b9150604084015163ffffffff81168114613e3d575f5ffd5b80915050925092509256fea2646970667358221220fe35e625089b3338fc1924a079a4d6924e42924dd16ee0003f067ac276aafe6d64736f6c634300081b003300000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e6000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38
Deployed Bytecode
0x60806040526004361061014a575f3560e01c806385f8c259116100b3578063c45a01551161006d578063c45a015514610404578063d06ca61f14610437578063ded9382a14610456578063e8e3370014610475578063f305d719146104af578063fb3bdb41146104c2575f5ffd5b806385f8c259146103565780638803dbee14610375578063ad615dec14610394578063af2979eb146103b3578063b6f9de95146103d2578063baa2abde146103e5575f5ffd5b80634a25d94a116101045780634a25d94a1461027c5780635b0d59841461029b5780635c11d795146102ba5780635d409359146102d9578063791ac947146103245780637ff36ab514610343575f5ffd5b806302751cec1461018d578063054d50d4146101c657806318cbafe5146101f35780631f00ca741461021f5780632195995c1461023e57806338ed17391461025d575f5ffd5b3661018957336001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38161461018757610187613506565b005b5f5ffd5b348015610198575f5ffd5b506101ac6101a7366004613541565b6104d5565b604080519283526020830191909152015b60405180910390f35b3480156101d1575f5ffd5b506101e56101e036600461359b565b6105cb565b6040519081526020016101bd565b3480156101fe575f5ffd5b5061021261020d366004613605565b6105df565b6040516101bd9190613673565b34801561022a575f5ffd5b506102126102393660046136c9565b610904565b348015610249575f5ffd5b506101ac6102583660046137bd565b61093a565b348015610268575f5ffd5b50610212610277366004613605565b610a0a565b348015610287575f5ffd5b50610212610296366004613605565b610b25565b3480156102a6575f5ffd5b506101e56102b5366004613865565b610c61565b3480156102c5575f5ffd5b506101876102d4366004613605565b610d46565b3480156102e4575f5ffd5b5061030c7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3881565b6040516001600160a01b0390911681526020016101bd565b34801561032f575f5ffd5b5061018761033e366004613605565b610fa1565b6102126103513660046138f8565b6111be565b348015610361575f5ffd5b506101e561037036600461359b565b6114ca565b348015610380575f5ffd5b5061021261038f366004613605565b6114d6565b34801561039f575f5ffd5b506101e56103ae36600461359b565b611591565b3480156103be575f5ffd5b506101e56103cd366004613541565b61159d565b6101876103e03660046138f8565b6116e4565b3480156103f0575f5ffd5b506101ac6103ff36600461395a565b611a0d565b34801561040f575f5ffd5b5061030c7f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e681565b348015610442575f5ffd5b506102126104513660046136c9565b611bcb565b348015610461575f5ffd5b506101ac610470366004613865565b611bf8565b348015610480575f5ffd5b5061049461048f3660046139c8565b611ce2565b604080519384526020840192909252908201526060016101bd565b6104946104bd366004613541565b611dda565b6102126104d03660046138f8565b61202c565b5f5f82428110156105015760405162461bcd60e51b81526004016104f890613a3f565b60405180910390fd5b610530897f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad388a8a8a308a611a0d565b909350915061054089868561236b565b604051632e1a7d4d60e01b8152600481018390527f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031690632e1a7d4d906024015f604051808303815f87803b15801561059f575f5ffd5b505af11580156105b1573d5f5f3e3d5ffd5b505050506105bf8583612497565b50965096945050505050565b5f6105d7848484612572565b949350505050565b606081428110156106025760405162461bcd60e51b81526004016104f890613a3f565b6001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38168686610639600182613a8a565b81811061064857610648613a9d565b905060200201602081019061065d9190613ab1565b6001600160a01b0316146106835760405162461bcd60e51b81526004016104f890613ad3565b6106e07f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e6898888808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061264b92505050565b91508682600184516106f29190613a8a565b8151811061070257610702613a9d565b602002602001015110156107285760405162461bcd60e51b81526004016104f890613b0a565b6107ea86865f81811061073d5761073d613a9d565b90506020020160208101906107529190613ab1565b336107cb7f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e68a8a5f81811061078957610789613a9d565b905060200201602081019061079e9190613ab1565b8b8b60018181106107b1576107b1613a9d565b90506020020160208101906107c69190613ab1565b6127c7565b855f815181106107dd576107dd613a9d565b6020026020010151612855565b610828828787808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525030925061298e915050565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b0316632e1a7d4d83600185516108669190613a8a565b8151811061087657610876613a9d565b60200260200101516040518263ffffffff1660e01b815260040161089c91815260200190565b5f604051808303815f87803b1580156108b3575f5ffd5b505af11580156108c5573d5f5f3e3d5ffd5b505050506108f98483600185516108dc9190613a8a565b815181106108ec576108ec613a9d565b6020026020010151612497565b509695505050505050565b60606109317f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e68484612b81565b90505b92915050565b5f5f5f6109687f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e68f8f6127c7565b90505f87610976578c610979565b5f195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf906109b4903390309086908f908e908e908e90600401613b55565b5f604051808303815f87803b1580156109cb575f5ffd5b505af11580156109dd573d5f5f3e3d5ffd5b505050506109f08f8f8f8f8f8f8f611a0d565b809450819550505050509b509b9950505050505050505050565b60608142811015610a2d5760405162461bcd60e51b81526004016104f890613a3f565b610a8a7f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e6898888808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061264b92505050565b9150868260018451610a9c9190613a8a565b81518110610aac57610aac613a9d565b60200260200101511015610ad25760405162461bcd60e51b81526004016104f890613b0a565b610ae786865f81811061073d5761073d613a9d565b6108f9828787808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525089925061298e915050565b60608142811015610b485760405162461bcd60e51b81526004016104f890613a3f565b6001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38168686610b7f600182613a8a565b818110610b8e57610b8e613a9d565b9050602002016020810190610ba39190613ab1565b6001600160a01b031614610bc95760405162461bcd60e51b81526004016104f890613ad3565b610c267f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e6898888808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612b8192505050565b915086825f81518110610c3b57610c3b613a9d565b602002602001015111156107285760405162461bcd60e51b81526004016104f890613b96565b5f5f610cae7f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e68d7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386127c7565b90505f86610cbc578b610cbf565b5f195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90610cfa903390309086908e908d908d908d90600401613b55565b5f604051808303815f87803b158015610d11575f5ffd5b505af1158015610d23573d5f5f3e3d5ffd5b50505050610d358d8d8d8d8d8d61159d565b9d9c50505050505050505050505050565b8042811015610d675760405162461bcd60e51b81526004016104f890613a3f565b610df685855f818110610d7c57610d7c613a9d565b9050602002016020810190610d919190613ab1565b33610df07f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e689895f818110610dc857610dc8613a9d565b9050602002016020810190610ddd9190613ab1565b8a8a60018181106107b1576107b1613a9d565b8a612855565b5f8585610e04600182613a8a565b818110610e1357610e13613a9d565b9050602002016020810190610e289190613ab1565b6040516370a0823160e01b81526001600160a01b03868116600483015291909116906370a0823190602401602060405180830381865afa158015610e6e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e929190613bdd565b9050610ed18686808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250889250612d00915050565b86818787610ee0600182613a8a565b818110610eef57610eef613a9d565b9050602002016020810190610f049190613ab1565b6040516370a0823160e01b81526001600160a01b03888116600483015291909116906370a08231906024015b602060405180830381865afa158015610f4b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f6f9190613bdd565b610f799190613a8a565b1015610f975760405162461bcd60e51b81526004016104f890613b0a565b5050505050505050565b8042811015610fc25760405162461bcd60e51b81526004016104f890613a3f565b6001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38168585610ff9600182613a8a565b81811061100857611008613a9d565b905060200201602081019061101d9190613ab1565b6001600160a01b0316146110435760405162461bcd60e51b81526004016104f890613ad3565b61105885855f818110610d7c57610d7c613a9d565b6110958585808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250309250612d00915050565b6040516370a0823160e01b81523060048201525f907f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b0316906370a0823190602401602060405180830381865afa1580156110f9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061111d9190613bdd565b90508681101561113f5760405162461bcd60e51b81526004016104f890613b0a565b604051632e1a7d4d60e01b8152600481018290527f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031690632e1a7d4d906024015f604051808303815f87803b15801561119e575f5ffd5b505af11580156111b0573d5f5f3e3d5ffd5b50505050610f978482612497565b606081428110156111e15760405162461bcd60e51b81526004016104f890613a3f565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031686865f81811061121d5761121d613a9d565b90506020020160208101906112329190613ab1565b6001600160a01b0316146112585760405162461bcd60e51b81526004016104f890613ad3565b6112b57f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e6348888808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061264b92505050565b91508682600184516112c79190613a8a565b815181106112d7576112d7613a9d565b602002602001015110156112fd5760405162461bcd60e51b81526004016104f890613b0a565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663d0e30db0835f8151811061133e5761133e613a9d565b60200260200101516040518263ffffffff1660e01b81526004015f604051808303818588803b15801561136f575f5ffd5b505af1158015611381573d5f5f3e3d5ffd5b50505050507f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663a9059cbb6113eb7f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e689895f818110610dc857610dc8613a9d565b845f815181106113fd576113fd613a9d565b60200260200101516040518363ffffffff1660e01b81526004016114369291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af1158015611452573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114769190613bf4565b61148257611482613506565b6114c0828787808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525089925061298e915050565b5095945050505050565b5f6105d7848484612fbe565b606081428110156114f95760405162461bcd60e51b81526004016104f890613a3f565b6115567f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e6898888808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612b8192505050565b915086825f8151811061156b5761156b613a9d565b60200260200101511115610ad25760405162461bcd60e51b81526004016104f890613b96565b5f6105d7848484613094565b5f81428110156115bf5760405162461bcd60e51b81526004016104f890613a3f565b6115ee887f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad388989893089611a0d565b6040516370a0823160e01b81523060048201529093506116659150899086906001600160a01b038316906370a0823190602401602060405180830381865afa15801561163c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116609190613bdd565b61236b565b604051632e1a7d4d60e01b8152600481018390527f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031690632e1a7d4d906024015f604051808303815f87803b1580156116c4575f5ffd5b505af11580156116d6573d5f5f3e3d5ffd5b505050506108f98483612497565b80428110156117055760405162461bcd60e51b81526004016104f890613a3f565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031685855f81811061174157611741613a9d565b90506020020160208101906117569190613ab1565b6001600160a01b03161461177c5760405162461bcd60e51b81526004016104f890613ad3565b5f3490507f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b1580156117d9575f5ffd5b505af11580156117eb573d5f5f3e3d5ffd5b50505050507f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663a9059cbb6118557f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e689895f818110610dc857610dc8613a9d565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af115801561189f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c39190613bf4565b6118cf576118cf613506565b5f86866118dd600182613a8a565b8181106118ec576118ec613a9d565b90506020020160208101906119019190613ab1565b6040516370a0823160e01b81526001600160a01b03878116600483015291909116906370a0823190602401602060405180830381865afa158015611947573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196b9190613bdd565b90506119aa8787808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250899250612d00915050565b878188886119b9600182613a8a565b8181106119c8576119c8613a9d565b90506020020160208101906119dd9190613ab1565b6040516370a0823160e01b81526001600160a01b03898116600483015291909116906370a0823190602401610f30565b5f5f8242811015611a305760405162461bcd60e51b81526004016104f890613a3f565b5f611a5c7f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e68c8c6127c7565b6040516323b872dd60e01b81523360048201526001600160a01b03821660248201819052604482018c90529192506323b872dd906064016020604051808303815f875af1158015611aaf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad39190613bf4565b5060405163226bf2d160e21b81526001600160a01b0387811660048301525f9182918416906389afcb449060240160408051808303815f875af1158015611b1c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b409190613c0f565b915091505f611b4f8e8e613131565b509050806001600160a01b03168e6001600160a01b031614611b72578183611b75565b82825b90975095508a871015611b9a5760405162461bcd60e51b81526004016104f890613c31565b89861015611bba5760405162461bcd60e51b81526004016104f890613c77565b505050505097509795505050505050565b60606109317f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e6848461264b565b5f5f5f611c467f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e68e7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386127c7565b90505f87611c54578c611c57565b5f195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90611c92903390309086908f908e908e908e90600401613b55565b5f604051808303815f87803b158015611ca9575f5ffd5b505af1158015611cbb573d5f5f3e3d5ffd5b50505050611ccd8e8e8e8e8e8e6104d5565b909f909e509c50505050505050505050505050565b5f5f5f8342811015611d065760405162461bcd60e51b81526004016104f890613a3f565b611d148c8c8c8c8c8c613227565b90945092505f611d457f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e68e8e6127c7565b9050611d538d338388612855565b611d5f8c338387612855565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a627842906024016020604051808303815f875af1158015611da4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc89190613bdd565b92505050985098509895505050505050565b5f5f5f8342811015611dfe5760405162461bcd60e51b81526004016104f890613a3f565b611e2c8a7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad388b348c8c613227565b90945092505f611e7d7f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e68c7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386127c7565b9050611e8b8b338388612855565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004015f604051808303818588803b158015611ee4575f5ffd5b505af1158015611ef6573d5f5f3e3d5ffd5b505060405163a9059cbb60e01b81526001600160a01b038581166004830152602482018990527f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3816935063a9059cbb925060440190506020604051808303815f875af1158015611f68573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f8c9190613bf4565b611f9857611f98613506565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a627842906024016020604051808303815f875af1158015611fdd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120019190613bdd565b92508334111561201e5761201e336120198634613a8a565b612497565b505096509650969350505050565b6060814281101561204f5760405162461bcd60e51b81526004016104f890613a3f565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031686865f81811061208b5761208b613a9d565b90506020020160208101906120a09190613ab1565b6001600160a01b0316146120c65760405162461bcd60e51b81526004016104f890613ad3565b6121237f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e6888888808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612b8192505050565b915034825f8151811061213857612138613a9d565b6020026020010151111561215e5760405162461bcd60e51b81526004016104f890613b96565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663d0e30db0835f8151811061219f5761219f613a9d565b60200260200101516040518263ffffffff1660e01b81526004015f604051808303818588803b1580156121d0575f5ffd5b505af11580156121e2573d5f5f3e3d5ffd5b50505050507f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663a9059cbb61224c7f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e689895f818110610dc857610dc8613a9d565b845f8151811061225e5761225e613a9d565b60200260200101516040518363ffffffff1660e01b81526004016122979291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af11580156122b3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122d79190613bf4565b6122e3576122e3613506565b612321828787808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525089925061298e915050565b815f8151811061233357612333613a9d565b60200260200101513411156114c0576114c033835f8151811061235857612358613a9d565b6020026020010151346120199190613a8a565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f928392908716916123c69190613cbd565b5f604051808303815f865af19150503d805f81146123ff576040519150601f19603f3d011682016040523d82523d5f602084013e612404565b606091505b509150915081801561242e57508051158061242e57508080602001905181019061242e9190613bf4565b6124905760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b60648201526084016104f8565b5050505050565b604080515f808252602082019092526001600160a01b0384169083906040516124c09190613cbd565b5f6040518083038185875af1925050503d805f81146124fa576040519150601f19603f3d011682016040523d82523d5f602084013e6124ff565b606091505b505090508061256d5760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b60648201526084016104f8565b505050565b5f5f84116125d65760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c794d656d65734c6962726172793a20494e53554646494349454e545f4960448201526a1394155517d05353d5539560aa1b60648201526084016104f8565b5f831180156125e457505f82115b6126005760405162461bcd60e51b81526004016104f890613cd3565b5f61260d856103e5613d1b565b90505f61261a8483613d1b565b90505f8261262a876103e8613d1b565b6126349190613d32565b90506126408183613d45565b979650505050505050565b606060028251101561269f5760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c794d656d65734c6962726172793a20494e56414c49445f50415448000060448201526064016104f8565b815167ffffffffffffffff8111156126b9576126b96136b5565b6040519080825280602002602001820160405280156126e2578160200160208202803683370190505b50905082815f815181106126f8576126f8613a9d565b6020026020010181815250505f5b600183516127149190613a8a565b8110156127bf575f5f6127668786858151811061273357612733613a9d565b6020026020010151878660016127499190613d32565b8151811061275957612759613a9d565b6020026020010151613441565b9150915061278e84848151811061277f5761277f613a9d565b60200260200101518383612572565b8461279a856001613d32565b815181106127aa576127aa613a9d565b60209081029190910101525050600101612706565b509392505050565b5f5f5f6127d48585613131565b60405163e6a4390560e01b81526001600160a01b03808416600483015280831660248301529294509092509087169063e6a4390590604401602060405180830381865afa158015612827573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061284b9190613d64565b9695505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291515f928392908816916128b89190613cbd565b5f604051808303815f865af19150503d805f81146128f1576040519150601f19603f3d011682016040523d82523d5f602084013e6128f6565b606091505b50915091508180156129205750805115806129205750808060200190518101906129209190613bf4565b6129865760405162461bcd60e51b815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472604482015270185b9cd9995c919c9bdb4819985a5b1959607a1b60648201526084016104f8565b505050505050565b5f5b6001835161299e9190613a8a565b811015612b7b575f5f8483815181106129b9576129b9613a9d565b6020026020010151858460016129cf9190613d32565b815181106129df576129df613a9d565b6020026020010151915091505f6129f68383613131565b5090505f87612a06866001613d32565b81518110612a1657612a16613a9d565b602002602001015190505f5f836001600160a01b0316866001600160a01b031614612a4257825f612a45565b5f835b915091505f60028a51612a589190613a8a565b8810612a645788612ab2565b612ab27f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e6878c612a958c6002613d32565b81518110612aa557612aa5613a9d565b60200260200101516127c7565b9050612adf7f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e688886127c7565b6001600160a01b031663022c0d9f8484845f6040519080825280601f01601f191660200182016040528015612b1b576020820181803683370190505b506040518563ffffffff1660e01b8152600401612b3b9493929190613d7f565b5f604051808303815f87803b158015612b52575f5ffd5b505af1158015612b64573d5f5f3e3d5ffd5b505060019099019850612990975050505050505050565b50505050565b6060600282511015612bd55760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c794d656d65734c6962726172793a20494e56414c49445f50415448000060448201526064016104f8565b815167ffffffffffffffff811115612bef57612bef6136b5565b604051908082528060200260200182016040528015612c18578160200160208202803683370190505b509050828160018351612c2b9190613a8a565b81518110612c3b57612c3b613a9d565b6020026020010181815250505f60018351612c569190613a8a565b90505b80156127bf575f80612c9b8786612c71600187613a8a565b81518110612c8157612c81613a9d565b602002602001015187868151811061275957612759613a9d565b91509150612cc3848481518110612cb457612cb4613a9d565b60200260200101518383612fbe565b84612ccf600186613a8a565b81518110612cdf57612cdf613a9d565b60200260200101818152505050508080612cf890613dd1565b915050612c59565b5f5b60018351612d109190613a8a565b81101561256d575f5f848381518110612d2b57612d2b613a9d565b602002602001015185846001612d419190613d32565b81518110612d5157612d51613a9d565b6020026020010151915091505f612d688383613131565b5090505f612d977f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e685856127c7565b90505f5f5f5f846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612dd9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dfd9190613dfc565b506001600160701b031691506001600160701b031691505f5f876001600160a01b03168a6001600160a01b031614612e36578284612e39565b83835b6040516370a0823160e01b81526001600160a01b038a8116600483015292945090925083918c16906370a0823190602401602060405180830381865afa158015612e85573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ea99190613bdd565b612eb39190613a8a565b9550612ec0868383612572565b9450505050505f5f856001600160a01b0316886001600160a01b031614612ee857825f612eeb565b5f835b915091505f60028c51612efe9190613a8a565b8a10612f0a578a612f3b565b612f3b7f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e6898e612a958e6002613d32565b604080515f8152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f90612f7c9086908690869060248101613d7f565b5f604051808303815f87803b158015612f93575f5ffd5b505af1158015612fa5573d5f5f3e3d5ffd5b50506001909b019a50612d029950505050505050505050565b5f5f84116130235760405162461bcd60e51b815260206004820152602c60248201527f4f6e6c794d656d65734c6962726172793a20494e53554646494349454e545f4f60448201526b155514155517d05353d5539560a21b60648201526084016104f8565b5f8311801561303157505f82115b61304d5760405162461bcd60e51b81526004016104f890613cd3565b5f6130588585613d1b565b613064906103e8613d1b565b90505f6130718685613a8a565b61307d906103e5613d1b565b90506130898183613d45565b61284b906001613d32565b5f5f84116130f25760405162461bcd60e51b815260206004820152602560248201527f4f6e6c794d656d65734c6962726172793a20494e53554646494349454e545f416044820152641353d5539560da1b60648201526084016104f8565b5f8311801561310057505f82115b61311c5760405162461bcd60e51b81526004016104f890613cd3565b826131278386613d1b565b6105d79190613d45565b5f5f826001600160a01b0316846001600160a01b0316036131a25760405162461bcd60e51b815260206004820152602560248201527f4f6e6c794d656d65734c6962726172793a204944454e544943414c5f41444452604482015264455353455360d81b60648201526084016104f8565b826001600160a01b0316846001600160a01b0316106131c25782846131c5565b83835b90925090506001600160a01b0382166132205760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c794d656d65734c6962726172793a205a45524f5f41444452455353000060448201526064016104f8565b9250929050565b60405163e6a4390560e01b81526001600160a01b03878116600483015286811660248301525f91829182917f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e69091169063e6a4390590604401602060405180830381865afa15801561329b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132bf9190613d64565b6001600160a01b031603613360576040516364e329cb60e11b81526001600160a01b03898116600483015288811660248301527f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e6169063c9c65396906044016020604051808303815f875af115801561333a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061335e9190613d64565b505b5f5f61338d7f00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e68b8b613441565b91509150815f14801561339e575080155b156133ae57879350869250613434565b5f6133ba898484613094565b90508781116133ee57858110156133e35760405162461bcd60e51b81526004016104f890613c77565b889450925082613432565b5f6133fa898486613094565b90508981111561340c5761340c613506565b8781101561342c5760405162461bcd60e51b81526004016104f890613c31565b94508793505b505b5050965096945050505050565b5f5f5f61344e8585613131565b5090505f5f61345e8888886127c7565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613499573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134bd9190613dfc565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b0316146134f45780826134f7565b81815b90999098509650505050505050565b634e487b7160e01b5f52600160045260245ffd5b6001600160a01b038116811461352e575f5ffd5b50565b803561353c8161351a565b919050565b5f5f5f5f5f5f60c08789031215613556575f5ffd5b86356135618161351a565b955060208701359450604087013593506060870135925060808701356135868161351a565b9598949750929591949360a090920135925050565b5f5f5f606084860312156135ad575f5ffd5b505081359360208301359350604090920135919050565b5f5f83601f8401126135d4575f5ffd5b50813567ffffffffffffffff8111156135eb575f5ffd5b6020830191508360208260051b8501011115613220575f5ffd5b5f5f5f5f5f5f60a0878903121561361a575f5ffd5b8635955060208701359450604087013567ffffffffffffffff81111561363e575f5ffd5b61364a89828a016135c4565b909550935050606087013561365e8161351a565b95989497509295919493608090920135925050565b602080825282518282018190525f918401906040840190835b818110156136aa57835183526020938401939092019160010161368c565b509095945050505050565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156136da575f5ffd5b82359150602083013567ffffffffffffffff8111156136f7575f5ffd5b8301601f81018513613707575f5ffd5b803567ffffffffffffffff811115613721576137216136b5565b8060051b604051601f19603f830116810181811067ffffffffffffffff8211171561374e5761374e6136b5565b60405291825260208184018101929081018884111561376b575f5ffd5b6020850194505b838510156137915761378385613531565b815260209485019401613772565b50809450505050509250929050565b801515811461352e575f5ffd5b803560ff8116811461353c575f5ffd5b5f5f5f5f5f5f5f5f5f5f5f6101608c8e0312156137d8575f5ffd5b8b356137e38161351a565b9a5060208c01356137f38161351a565b995060408c0135985060608c0135975060808c0135965060a08c01356138188161351a565b955060c08c0135945060e08c013561382f816137a0565b935061383e6101008d016137ad565b9a9d999c50979a969995989497509295919493610120830135935061014090920135919050565b5f5f5f5f5f5f5f5f5f5f6101408b8d03121561387f575f5ffd5b8a3561388a8161351a565b995060208b0135985060408b0135975060608b0135965060808b01356138af8161351a565b955060a08b0135945060c08b01356138c6816137a0565b93506138d460e08c016137ad565b999c989b509699959894979396509194610100810135936101209091013592509050565b5f5f5f5f5f6080868803121561390c575f5ffd5b85359450602086013567ffffffffffffffff811115613929575f5ffd5b613935888289016135c4565b90955093505060408601356139498161351a565b949793965091946060013592915050565b5f5f5f5f5f5f5f60e0888a031215613970575f5ffd5b873561397b8161351a565b9650602088013561398b8161351a565b955060408801359450606088013593506080880135925060a08801356139b08161351a565b96999598509396929591949193505060c09091013590565b5f5f5f5f5f5f5f5f610100898b0312156139e0575f5ffd5b88356139eb8161351a565b975060208901356139fb8161351a565b965060408901359550606089013594506080890135935060a0890135925060c0890135613a278161351a565b979a969950949793969295919450919260e001359150565b60208082526018908201527f4f6e6c794d656d6573526f757465723a20455850495245440000000000000000604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561093457610934613a76565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613ac1575f5ffd5b8135613acc8161351a565b9392505050565b6020808252601d908201527f4f6e6c794d656d6573526f757465723a20494e56414c49445f50415448000000604082015260600190565b6020808252602b908201527f4f6e6c794d656d6573526f757465723a20494e53554646494349454e545f4f5560408201526a1514155517d05353d5539560aa1b606082015260800190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b60208082526027908201527f4f6e6c794d656d6573526f757465723a204558434553534956455f494e50555460408201526617d05353d5539560ca1b606082015260800190565b5f60208284031215613bed575f5ffd5b5051919050565b5f60208284031215613c04575f5ffd5b8151613acc816137a0565b5f5f60408385031215613c20575f5ffd5b505080516020909101519092909150565b60208082526026908201527f4f6e6c794d656d6573526f757465723a20494e53554646494349454e545f415f604082015265105353d5539560d21b606082015260800190565b60208082526026908201527f4f6e6c794d656d6573526f757465723a20494e53554646494349454e545f425f604082015265105353d5539560d21b606082015260800190565b5f82518060208501845e5f920191825250919050565b60208082526028908201527f4f6e6c794d656d65734c6962726172793a20494e53554646494349454e545f4c604082015267495155494449545960c01b606082015260800190565b808202811582820484141761093457610934613a76565b8082018082111561093457610934613a76565b5f82613d5f57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215613d74575f5ffd5b8151613acc8161351a565b84815283602082015260018060a01b0383166040820152608060608201525f8251806080840152806020850160a085015e5f60a0828501015260a0601f19601f83011684010191505095945050505050565b5f81613ddf57613ddf613a76565b505f190190565b80516001600160701b038116811461353c575f5ffd5b5f5f5f60608486031215613e0e575f5ffd5b613e1784613de6565b9250613e2560208501613de6565b9150604084015163ffffffff81168114613e3d575f5ffd5b80915050925092509256fea2646970667358221220fe35e625089b3338fc1924a079a4d6924e42924dd16ee0003f067ac276aafe6d64736f6c634300081b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e6000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38
-----Decoded View---------------
Arg [0] : _factory (address): 0x03c08D09445268c83e19F838FE9A488916EdD2e6
Arg [1] : _WS (address): 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000003c08d09445268c83e19f838fe9a488916edd2e6
Arg [1] : 000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38
Deployed Bytecode Sourcemap
17950:21709:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18439:10;-1:-1:-1;;;;;18453:2:0;18439:16;;18432:24;;;;:::i;:::-;17950:21709;;;;;23360:735;;;;;;;;;;-1:-1:-1;23360:735:0;;;;;:::i;:::-;;:::i;:::-;;;;1471:25:1;;;1527:2;1512:18;;1505:34;;;;1444:18;23360:735:0;;;;;;;;38649:258;;;;;;;;;;-1:-1:-1;38649:258:0;;;;;:::i;:::-;;:::i;:::-;;;2167:25:1;;;2155:2;2140:18;38649:258:0;2021:177:1;32105:984:0;;;;;;;;;;-1:-1:-1;32105:984:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;39422:234::-;;;;;;;;;;-1:-1:-1;39422:234:0;;;;;:::i;:::-;;:::i;24103:938::-;;;;;;;;;;-1:-1:-1;24103:938:0;;;;;:::i;:::-;;:::i;28752:766::-;;;;;;;;;;-1:-1:-1;28752:766:0;;;;;:::i;:::-;;:::i;31135:962::-;;;;;;;;;;-1:-1:-1;31135:962:0;;;;;:::i;:::-;;:::i;26851:937::-;;;;;;;;;;-1:-1:-1;26851:937:0;;;;;:::i;:::-;;:::i;35797:779::-;;;;;;;;;;-1:-1:-1;35797:779:0;;;;;:::i;:::-;;:::i;18105:36::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8750:32:1;;;8732:51;;8720:2;8705:18;18105:36:0;8586:203:1;37481:882:0;;;;;;;;;;-1:-1:-1;37481:882:0;;;;;:::i;:::-;;:::i;30278:849::-;;;;;;:::i;:::-;;:::i;38915:257::-;;;;;;;;;;-1:-1:-1;38915:257:0;;;;;:::i;:::-;;:::i;29526:744::-;;;;;;;;;;-1:-1:-1;29526:744:0;;;;;:::i;:::-;;:::i;38407:234::-;;;;;;;;;;-1:-1:-1;38407:234:0;;;;;:::i;:::-;;:::i;26084:759::-;;;;;;;;;;-1:-1:-1;26084:759:0;;;;;:::i;:::-;;:::i;36584:889::-;;;;;;:::i;:::-;;:::i;22312:1040::-;;;;;;;;;;-1:-1:-1;22312:1040:0;;;;;:::i;:::-;;:::i;18057:41::-;;;;;;;;;;;;;;;39180:234;;;;;;;;;;-1:-1:-1;39180:234:0;;;;;:::i;:::-;;:::i;25049:956::-;;;;;;;;;;-1:-1:-1;25049:956:0;;;;;:::i;:::-;;:::i;20305:901::-;;;;;;;;;;-1:-1:-1;20305:901:0;;;;;:::i;:::-;;:::i;:::-;;;;11971:25:1;;;12027:2;12012:18;;12005:34;;;;12055:18;;;12048:34;11959:2;11944:18;20305:901:0;11769:319:1;21214:1055:0;;;;;;:::i;:::-;;:::i;33097:975::-;;;;;;:::i;:::-;;:::i;23360:735::-;23654:19;23675:17;23626:8;18215:15;18203:8;:27;;18195:64;;;;-1:-1:-1;;;18195:64:0;;;;;;;:::i;:::-;;;;;;;;;23737:194:::1;23767:5;23787:2;23804:9;23828:14;23857:12;23892:4;23912:8;23737:15;:194::i;:::-;23710:221:::0;;-1:-1:-1;23710:221:0;-1:-1:-1;23942:51:0::1;23970:5:::0;23977:2;23710:221;23942:27:::1;:51::i;:::-;24004:27;::::0;-1:-1:-1;;;24004:27:0;;::::1;::::0;::::1;2167:25:1::0;;;24008:2:0::1;-1:-1:-1::0;;;;;24004:16:0::1;::::0;::::1;::::0;2140:18:1;;24004:27:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24042:45;24073:2;24077:9;24042:30;:45::i;:::-;23360:735:::0;;;;;;;;;;:::o;38649:258::-;38800:17;38837:62;38867:8;38877:9;38888:10;38837:29;:62::i;:::-;38830:69;38649:258;-1:-1:-1;;;;38649:258:0:o;32105:984::-;32380:24;32352:8;18215:15;18203:8;:27;;18195:64;;;;-1:-1:-1;;;18195:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32455:2:0::1;32430:27;:4:::0;;32435:15:::1;32449:1;32430:4:::0;32435:15:::1;:::i;:::-;32430:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32430:27:0::1;;32422:69;;;;-1:-1:-1::0;;;32422:69:0::1;;;;;;;:::i;:::-;32512:55;32543:7;32552:8;32562:4;;32512:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;32512:30:0::1;::::0;-1:-1:-1;;;32512:55:0:i:1;:::-;32502:65;;32631:12;32600:7;32625:1;32608:7;:14;:18;;;;:::i;:::-;32600:27;;;;;;;;:::i;:::-;;;;;;;:43;;32578:136;;;;-1:-1:-1::0;;;32578:136:0::1;;;;;;;:::i;:::-;32725:180;32771:4;;32776:1;32771:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;32793:10;32818:51;32843:7;32852:4;;32857:1;32852:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;32861:4;;32866:1;32861:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;32818:24;:51::i;:::-;32884:7;32892:1;32884:10;;;;;;;;:::i;:::-;;;;;;;32725:31;:180::i;:::-;32916:35;32922:7;32931:4;;32916:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;32945:4:0::1;::::0;-1:-1:-1;32916:5:0::1;::::0;-1:-1:-1;;32916:35:0:i:1;:::-;32966:2;-1:-1:-1::0;;;;;32962:16:0::1;;32979:7;33004:1;32987:7;:14;:18;;;;:::i;:::-;32979:27;;;;;;;;:::i;:::-;;;;;;;32962:45;;;;;;;;;;;;;2167:25:1::0;;2155:2;2140:18;;2021:177;32962:45:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33018:63;33049:2;33053:7;33078:1;33061:7;:14;:18;;;;:::i;:::-;33053:27;;;;;;;;:::i;:::-;;;;;;;33018:30;:63::i;:::-;32105:984:::0;;;;;;;;;:::o;39422:234::-;39549:24;39593:55;39623:7;39632:9;39643:4;39593:29;:55::i;:::-;39586:62;;39422:234;;;;;:::o;24103:938::-;24448:15;24465;24493:12;24508:49;24533:7;24542:6;24550;24508:24;:49::i;:::-;24493:64;;24568:13;24584:10;:42;;24617:9;24584:42;;;-1:-1:-1;;24584:42:0;24637:182;;-1:-1:-1;;;24637:182:0;;24568:58;;-1:-1:-1;;;;;;24637:27:0;;;;;:182;;24679:10;;24712:4;;24568:58;;24752:8;;24775:1;;24791;;24807;;24637:182;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24851;24881:6;24902;24923:9;24947:10;24972;24997:2;25014:8;24851:15;:182::i;:::-;24830:203;;;;;;;;24482:559;;24103:938;;;;;;;;;;;;;;:::o;28752:766::-;29030:24;29002:8;18215:15;18203:8;:27;;18195:64;;;;-1:-1:-1;;;18195:64:0;;;;;;;:::i;:::-;29082:55:::1;29113:7;29122:8;29132:4;;29082:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29082:30:0::1;::::0;-1:-1:-1;;;29082:55:0:i:1;:::-;29072:65;;29201:12;29170:7;29195:1;29178:7;:14;:18;;;;:::i;:::-;29170:27;;;;;;;;:::i;:::-;;;;;;;:43;;29148:136;;;;-1:-1:-1::0;;;29148:136:0::1;;;;;;;:::i;:::-;29295:180;29341:4;;29346:1;29341:7;;;;;;;:::i;29295:180::-;29486:24;29492:7;29501:4;;29486:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29507:2:0;;-1:-1:-1;29486:5:0::1;::::0;-1:-1:-1;;29486:24:0:i:1;31135:962::-:0;31410:24;31382:8;18215:15;18203:8;:27;;18195:64;;;;-1:-1:-1;;;18195:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31485:2:0::1;31460:27;:4:::0;;31465:15:::1;31479:1;31460:4:::0;31465:15:::1;:::i;:::-;31460:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31460:27:0::1;;31452:69;;;;-1:-1:-1::0;;;31452:69:0::1;;;;;;;:::i;:::-;31542:55;31572:7;31581:9;31592:4;;31542:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;31542:29:0::1;::::0;-1:-1:-1;;;31542:55:0:i:1;:::-;31532:65;;31644:11;31630:7;31638:1;31630:10;;;;;;;;:::i;:::-;;;;;;;:25;;31608:114;;;;-1:-1:-1::0;;;31608:114:0::1;;;;;;;:::i;26851:937::-:0;27208:17;27238:12;27253:44;27278:7;27287:5;27294:2;27253:24;:44::i;:::-;27238:59;;27308:13;27324:10;:42;;27357:9;27324:42;;;-1:-1:-1;;27324:42:0;27377:182;;-1:-1:-1;;;27377:182:0;;27308:58;;-1:-1:-1;;;;;;27377:27:0;;;;;:182;;27419:10;;27452:4;;27308:58;;27492:8;;27515:1;;27531;;27547;;27377:182;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27582:198;27644:5;27664:9;27688:14;27717:12;27744:2;27761:8;27582:47;:198::i;:::-;27570:210;26851:937;-1:-1:-1;;;;;;;;;;;;;26851:937:0:o;35797:779::-;36040:8;18215:15;18203:8;:27;;18195:64;;;;-1:-1:-1;;;18195:64:0;;;;;;;:::i;:::-;36061:178:::1;36107:4;;36112:1;36107:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;36129:10;36154:51;36179:7;36188:4;;36193:1;36188:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;36197:4;;36202:1;36197:7;;;;;;;:::i;36154:51::-;36220:8;36061:31;:178::i;:::-;36250:21;36281:4:::0;;36286:15:::1;36300:1;36281:4:::0;36286:15:::1;:::i;:::-;36281:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;36274:43;::::0;-1:-1:-1;;;36274:43:0;;-1:-1:-1;;;;;8750:32:1;;;36274:43:0::1;::::0;::::1;8732:51:1::0;36274:39:0;;;::::1;::::0;::::1;::::0;8705:18:1;;36274:43:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36250:67;;36328:44;36363:4;;36328:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;36369:2:0;;-1:-1:-1;36328:34:0::1;::::0;-1:-1:-1;;36328:44:0:i:1;:::-;36485:12:::0;36451:13;36412:4;;36417:15:::1;36431:1;36412:4:::0;36417:15:::1;:::i;:::-;36412:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;36405:43;::::0;-1:-1:-1;;;36405:43:0;;-1:-1:-1;;;;;8750:32:1;;;36405:43:0::1;::::0;::::1;8732:51:1::0;36405:39:0;;;::::1;::::0;::::1;::::0;8705:18:1;;36405:43:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;;;;:::i;:::-;:92;;36383:185;;;;-1:-1:-1::0;;;36383:185:0::1;;;;;;;:::i;:::-;36050:526;35797:779:::0;;;;;;;:::o;37481:882::-;37721:8;18215:15;18203:8;:27;;18195:64;;;;-1:-1:-1;;;18195:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37775:2:0::1;37750:27;:4:::0;;37755:15:::1;37769:1;37750:4:::0;37755:15:::1;:::i;:::-;37750:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37750:27:0::1;;37742:69;;;;-1:-1:-1::0;;;37742:69:0::1;;;;;;;:::i;:::-;37822:178;37868:4;;37873:1;37868:7;;;;;;;:::i;37822:178::-;38011:55;38046:4;;38011:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;38060:4:0::1;::::0;-1:-1:-1;38011:34:0::1;::::0;-1:-1:-1;;38011:55:0:i:1;:::-;38097:35;::::0;-1:-1:-1;;;38097:35:0;;38126:4:::1;38097:35;::::0;::::1;8732:51:1::0;38077:17:0::1;::::0;38104:2:::1;-1:-1:-1::0;;;;;38097:20:0::1;::::0;::::1;::::0;8705:18:1;;38097:35:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38077:55;;38178:12;38165:9;:25;;38143:118;;;;-1:-1:-1::0;;;38143:118:0::1;;;;;;;:::i;:::-;38272:27;::::0;-1:-1:-1;;;38272:27:0;;::::1;::::0;::::1;2167:25:1::0;;;38276:2:0::1;-1:-1:-1::0;;;;;38272:16:0::1;::::0;::::1;::::0;2140:18:1;;38272:27:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38310:45;38341:2;38345:9;38310:30;:45::i;30278:849::-:0;30543:24;30515:8;18215:15;18203:8;:27;;18195:64;;;;-1:-1:-1;;;18195:64:0;;;;;;;:::i;:::-;30604:2:::1;-1:-1:-1::0;;;;;30593:13:0::1;:4;;30598:1;30593:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30593:13:0::1;;30585:55;;;;-1:-1:-1::0;;;30585:55:0::1;;;;;;;:::i;:::-;30661:56;30692:7;30701:9;30712:4;;30661:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;30661:30:0::1;::::0;-1:-1:-1;;;30661:56:0:i:1;:::-;30651:66;;30781:12;30750:7;30775:1;30758:7;:14;:18;;;;:::i;:::-;30750:27;;;;;;;;:::i;:::-;;;;;;;:43;;30728:136;;;;-1:-1:-1::0;;;30728:136:0::1;;;;;;;:::i;:::-;30879:2;-1:-1:-1::0;;;;;30875:15:0::1;;30898:7;30906:1;30898:10;;;;;;;;:::i;:::-;;;;;;;30875:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30947:2;-1:-1:-1::0;;;;;30943:16:0::1;;30978:51;31003:7;31012:4;;31017:1;31012:7;;;;;;;:::i;30978:51::-;31048:7;31056:1;31048:10;;;;;;;;:::i;:::-;;;;;;;30943:130;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;15371:32:1;;;;15353:51;;15435:2;15420:18;;15413:34;15341:2;15326:18;;15179:274;30943:130:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30922:162;;;;:::i;:::-;31095:24;31101:7;31110:4;;31095:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;31116:2:0;;-1:-1:-1;31095:5:0::1;::::0;-1:-1:-1;;31095:24:0:i:1;:::-;30278:849:::0;;;;;;;;:::o;38915:257::-;39066:16;39102:62;39131:9;39142;39153:10;39102:28;:62::i;29526:744::-;29804:24;29776:8;18215:15;18203:8;:27;;18195:64;;;;-1:-1:-1;;;18195:64:0;;;;;;;:::i;:::-;29856:55:::1;29886:7;29895:9;29906:4;;29856:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29856:29:0::1;::::0;-1:-1:-1;;;29856:55:0:i:1;:::-;29846:65;;29958:11;29944:7;29952:1;29944:10;;;;;;;;:::i;:::-;;;;;;;:25;;29922:114;;;;-1:-1:-1::0;;;29922:114:0::1;;;;;;;:::i;38407:234::-:0;38547:15;38582:51;38605:7;38614:8;38624;38582:22;:51::i;26084:759::-;26362:17;26343:8;18215:15;18203:8;:27;;18195:64;;;;-1:-1:-1;;;18195:64:0;;;;;;;:::i;:::-;26408:194:::1;26438:5;26458:2;26475:9;26499:14;26528:12;26563:4;26583:8;26408:15;:194::i;:::-;26692:38;::::0;-1:-1:-1;;;26692:38:0;;26724:4:::1;26692:38;::::0;::::1;8732:51:1::0;26392:210:0;;-1:-1:-1;26613:128:0::1;::::0;-1:-1:-1;26655:5:0;;26675:2;;-1:-1:-1;;;;;26692:23:0;::::1;::::0;::::1;::::0;8705:18:1;;26692:38:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26613:27;:128::i;:::-;26752:27;::::0;-1:-1:-1;;;26752:27:0;;::::1;::::0;::::1;2167:25:1::0;;;26756:2:0::1;-1:-1:-1::0;;;;;26752:16:0::1;::::0;::::1;::::0;2140:18:1;;26752:27:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26790:45;26821:2;26825:9;26790:30;:45::i;36584:889::-:0;36805:8;18215:15;18203:8;:27;;18195:64;;;;-1:-1:-1;;;18195:64:0;;;;;;;:::i;:::-;36845:2:::1;-1:-1:-1::0;;;;;36834:13:0::1;:4;;36839:1;36834:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36834:13:0::1;;36826:55;;;;-1:-1:-1::0;;;36826:55:0::1;;;;;;;:::i;:::-;36892:16;36911:9;36892:28;;36935:2;-1:-1:-1::0;;;;;36931:15:0::1;;36954:8;36931:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37001:2;-1:-1:-1::0;;;;;36997:16:0::1;;37032:51;37057:7;37066:4;;37071:1;37066:7;;;;;;;:::i;37032:51::-;36997:128;::::0;-1:-1:-1;;;;;;36997:128:0::1;::::0;;;;;;-1:-1:-1;;;;;15371:32:1;;;36997:128:0::1;::::0;::::1;15353:51:1::0;15420:18;;;15413:34;;;15326:18;;36997:128:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36976:160;;;;:::i;:::-;37147:21;37178:4:::0;;37183:15:::1;37197:1;37178:4:::0;37183:15:::1;:::i;:::-;37178:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;37171:43;::::0;-1:-1:-1;;;37171:43:0;;-1:-1:-1;;;;;8750:32:1;;;37171:43:0::1;::::0;::::1;8732:51:1::0;37171:39:0;;;::::1;::::0;::::1;::::0;8705:18:1;;37171:43:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37147:67;;37225:44;37260:4;;37225:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;37266:2:0;;-1:-1:-1;37225:34:0::1;::::0;-1:-1:-1;;37225:44:0:i:1;:::-;37382:12:::0;37348:13;37309:4;;37314:15:::1;37328:1;37309:4:::0;37314:15:::1;:::i;:::-;37309:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;37302:43;::::0;-1:-1:-1;;;37302:43:0;;-1:-1:-1;;;;;8750:32:1;;;37302:43:0::1;::::0;::::1;8732:51:1::0;37302:39:0;;;::::1;::::0;::::1;::::0;8705:18:1;;37302:43:0::1;8586:203:1::0;22312:1040:0;22623:15;22640;22595:8;18215:15;18203:8;:27;;18195:64;;;;-1:-1:-1;;;18195:64:0;;;;;;;:::i;:::-;22673:12:::1;22688:49;22713:7;22722:6;22730;22688:24;:49::i;:::-;22748:62;::::0;-1:-1:-1;;;22748:62:0;;22782:10:::1;22748:62;::::0;::::1;15910:51:1::0;-1:-1:-1;;;;;22748:33:0;::::1;15977:18:1::0;;;15970:60;;;16046:18;;;16039:34;;;22673:64:0;;-1:-1:-1;22748:33:0::1;::::0;15883:18:1;;22748:62:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;22884:29:0::1;::::0;-1:-1:-1;;;22884:29:0;;-1:-1:-1;;;;;8750:32:1;;;22884:29:0::1;::::0;::::1;8732:51:1::0;22848:15:0::1;::::0;;;22884:25;::::1;::::0;::::1;::::0;8705:18:1;;22884:29:0::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22847:66;;;;22925:14;22945:43;22973:6;22981;22945:27;:43::i;:::-;22924:64;;;23030:6;-1:-1:-1::0;;;;;23020:16:0::1;:6;-1:-1:-1::0;;;;;23020:16:0::1;;:84;;23087:7;23096;23020:84;;;23053:7;23062;23020:84;22999:105:::0;;-1:-1:-1;22999:105:0;-1:-1:-1;23137:21:0;;::::1;;23115:109;;;;-1:-1:-1::0;;;23115:109:0::1;;;;;;;:::i;:::-;23268:10;23257:7;:21;;23235:109;;;;-1:-1:-1::0;;;23235:109:0::1;;;;;;;:::i;:::-;22662:690;;;;22312:1040:::0;;;;;;;;;;;:::o;39180:234::-;39307:24;39351:55;39382:7;39391:8;39401:4;39351:30;:55::i;25049:956::-;25413:19;25434:17;25469:12;25484:44;25509:7;25518:5;25525:2;25484:24;:44::i;:::-;25469:59;;25539:13;25555:10;:42;;25588:9;25555:42;;;-1:-1:-1;;25555:42:0;25608:182;;-1:-1:-1;;;25608:182:0;;25539:58;;-1:-1:-1;;;;;;25608:27:0;;;;;:182;;25650:10;;25683:4;;25539:58;;25723:8;;25746:1;;25762;;25778;;25608:182;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25828:169;25861:5;25881:9;25905:14;25934:12;25961:2;25978:8;25828:18;:169::i;:::-;25801:196;;;;-1:-1:-1;25049:956:0;-1:-1:-1;;;;;;;;;;;;;25049:956:0:o;20305:901::-;20653:15;20670;20687:17;20625:8;18215:15;18203:8;:27;;18195:64;;;;-1:-1:-1;;;18195:64:0;;;;;;;:::i;:::-;20743:174:::1;20771:6;20792;20813:14;20842;20871:10;20896;20743:13;:174::i;:::-;20722:195:::0;;-1:-1:-1;20722:195:0;-1:-1:-1;20928:12:0::1;20943:49;20968:7;20977:6:::0;20985;20943:24:::1;:49::i;:::-;20928:64;;21003:66;21035:6;21043:10;21055:4;21061:7;21003:31;:66::i;:::-;21080;21112:6;21120:10;21132:4;21138:7;21080:31;:66::i;:::-;21169:29;::::0;-1:-1:-1;;;21169:29:0;;-1:-1:-1;;;;;8750:32:1;;;21169:29:0::1;::::0;::::1;8732:51:1::0;21169:25:0;::::1;::::0;::::1;::::0;8705:18:1;;21169:29:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21157:41;;20711:495;20305:901:::0;;;;;;;;;;;;;:::o;21214:1055::-;21533:19;21554:17;21573;21505:8;18215:15;18203:8;:27;;18195:64;;;;-1:-1:-1;;;18195:64:0;;;;;;;:::i;:::-;21635:174:::1;21663:5;21683:2;21700:18;21733:9;21757:14;21786:12;21635:13;:174::i;:::-;21608:201:::0;;-1:-1:-1;21608:201:0;-1:-1:-1;21820:12:0::1;21835:44;21860:7;21869:5:::0;21876:2:::1;21835:24;:44::i;:::-;21820:59;;21890:69;21922:5;21929:10;21941:4;21947:11;21890:31;:69::i;:::-;21974:2;-1:-1:-1::0;;;;;21970:15:0::1;;21993:9;21970:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;22023:33:0::1;::::0;-1:-1:-1;;;22023:33:0;;-1:-1:-1;;;;;15371:32:1;;;22023:33:0::1;::::0;::::1;15353:51:1::0;15420:18;;;15413:34;;;22027:2:0::1;22023:16;::::0;-1:-1:-1;22023:16:0::1;::::0;-1:-1:-1;15326:18:1;;;-1:-1:-1;22023:33:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22016:41;;;;:::i;:::-;22080:29;::::0;-1:-1:-1;;;22080:29:0;;-1:-1:-1;;;;;8750:32:1;;;22080:29:0::1;::::0;::::1;8732:51:1::0;22080:25:0;::::1;::::0;::::1;::::0;8705:18:1;;22080:29:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22068:41;;22172:9;22160;:21;22156:105;;;22196:65;22227:10;22239:21;22251:9:::0;22239::::1;:21;:::i;:::-;22196:30;:65::i;:::-;21597:672;21214:1055:::0;;;;;;;;;;;:::o;33097:975::-;33359:24;33331:8;18215:15;18203:8;:27;;18195:64;;;;-1:-1:-1;;;18195:64:0;;;;;;;:::i;:::-;33420:2:::1;-1:-1:-1::0;;;;;33409:13:0::1;:4;;33414:1;33409:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33409:13:0::1;;33401:55;;;;-1:-1:-1::0;;;33401:55:0::1;;;;;;;:::i;:::-;33477;33507:7;33516:9;33527:4;;33477:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;33477:29:0::1;::::0;-1:-1:-1;;;33477:55:0:i:1;:::-;33467:65;;33579:9;33565:7;33573:1;33565:10;;;;;;;;:::i;:::-;;;;;;;:23;;33543:112;;;;-1:-1:-1::0;;;33543:112:0::1;;;;;;;:::i;:::-;33670:2;-1:-1:-1::0;;;;;33666:15:0::1;;33689:7;33697:1;33689:10;;;;;;;;:::i;:::-;;;;;;;33666:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33738:2;-1:-1:-1::0;;;;;33734:16:0::1;;33769:51;33794:7;33803:4;;33808:1;33803:7;;;;;;;:::i;33769:51::-;33839:7;33847:1;33839:10;;;;;;;;:::i;:::-;;;;;;;33734:130;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;15371:32:1;;;;15353:51;;15435:2;15420:18;;15413:34;15341:2;15326:18;;15179:274;33734:130:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33713:162;;;;:::i;:::-;33886:24;33892:7;33901:4;;33886:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;33907:2:0;;-1:-1:-1;33886:5:0::1;::::0;-1:-1:-1;;33886:24:0:i:1;:::-;33973:7;33981:1;33973:10;;;;;;;;:::i;:::-;;;;;;;33961:9;:22;33957:107;;;33998:66;34029:10;34053:7;34061:1;34053:10;;;;;;;;:::i;:::-;;;;;;;34041:9;:22;;;;:::i;11869:439::-:0;12081:45;;;-1:-1:-1;;;;;15371:32:1;;;12081:45:0;;;15353:51:1;15420:18;;;;15413:34;;;12081:45:0;;;;;;;;;;15326:18:1;;;;12081:45:0;;;;;;;-1:-1:-1;;;;;12081:45:0;-1:-1:-1;;;12081:45:0;;;12056:81;;-1:-1:-1;;;;12056:10:0;;;;:81;;12081:45;12056:81;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12020:117;;;;12170:7;:57;;;;-1:-1:-1;12182:11:0;;:16;;:44;;;12213:4;12202:24;;;;;;;;;;;;:::i;:::-;12148:152;;;;-1:-1:-1;;;12148:152:0;;17754:2:1;12148:152:0;;;17736:21:1;17793:2;17773:18;;;17766:30;17832:34;17812:18;;;17805:62;-1:-1:-1;;;17883:18:1;;;17876:43;17936:19;;12148:152:0;17552:409:1;12148:152:0;11942:366;;11869:439;;;:::o;12846:254::-;12959:12;;;12919;12959;;;;;;;;;-1:-1:-1;;;;;12937:7:0;;;12952:5;;12937:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12918:54;;;13005:7;12983:109;;;;-1:-1:-1;;;12983:109:0;;18168:2:1;12983:109:0;;;18150:21:1;18207:2;18187:18;;;18180:30;18246:34;18226:18;;;18219:62;-1:-1:-1;;;18297:18:1;;;18290:50;18357:19;;12983:109:0;17966:416:1;12983:109:0;12907:193;12846:254;;:::o;15190:597::-;15326:17;15375:1;15364:8;:12;15356:68;;;;-1:-1:-1;;;15356:68:0;;18589:2:1;15356:68:0;;;18571:21:1;18628:2;18608:18;;;18601:30;18667:34;18647:18;;;18640:62;-1:-1:-1;;;18718:18:1;;;18711:41;18769:19;;15356:68:0;18387:407:1;15356:68:0;15469:1;15457:9;:13;:31;;;;;15487:1;15474:10;:14;15457:31;15435:121;;;;-1:-1:-1;;;15435:121:0;;;;;;;:::i;:::-;15567:23;15593:14;:8;15604:3;15593:14;:::i;:::-;15567:40;-1:-1:-1;15618:17:0;15638:28;15656:10;15567:40;15638:28;:::i;:::-;15618:48;-1:-1:-1;15677:19:0;15718:15;15699:16;:9;15711:4;15699:16;:::i;:::-;:34;;;;:::i;:::-;15677:56;-1:-1:-1;15756:23:0;15677:56;15756:9;:23;:::i;:::-;15744:35;15190:597;-1:-1:-1;;;;;;;15190:597:0:o;16536:629::-;16674:24;16734:1;16719:4;:11;:16;;16711:59;;;;-1:-1:-1;;;16711:59:0;;19935:2:1;16711:59:0;;;19917:21:1;19974:2;19954:18;;;19947:30;20013:32;19993:18;;;19986:60;20063:18;;16711:59:0;19733:354:1;16711:59:0;16805:4;:11;16791:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16791:26:0;;16781:36;;16841:8;16828:7;16836:1;16828:10;;;;;;;;:::i;:::-;;;;;;:21;;;;;16865:9;16860:298;16894:1;16880:4;:11;:15;;;;:::i;:::-;16876:1;:19;16860:298;;;16918:17;16937:18;16959:108;16989:7;17015:4;17020:1;17015:7;;;;;;;;:::i;:::-;;;;;;;17041:4;17046:1;17050;17046:5;;;;:::i;:::-;17041:11;;;;;;;;:::i;:::-;;;;;;;16959;:108::i;:::-;16917:150;;;;17099:47;17112:7;17120:1;17112:10;;;;;;;;:::i;:::-;;;;;;;17124:9;17135:10;17099:12;:47::i;:::-;17082:7;17090:5;:1;17094;17090:5;:::i;:::-;17082:14;;;;;;;;:::i;:::-;;;;;;;;;;:64;-1:-1:-1;;16897:3:0;;16860:298;;;;16536:629;;;;;:::o;13721:284::-;13844:12;13870:14;13886;13904:26;13915:6;13923;13904:10;:26::i;:::-;13948:49;;-1:-1:-1;;;13948:49:0;;-1:-1:-1;;;;;20284:32:1;;;13948:49:0;;;20266:51:1;20353:32;;;20333:18;;;20326:60;13869:61:0;;-1:-1:-1;13869:61:0;;-1:-1:-1;13948:34:0;;;;;;20239:18:1;;13948:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13941:56;13721:284;-1:-1:-1;;;;;;13721:284:0:o;12316:522::-;12601:51;;;-1:-1:-1;;;;;15928:32:1;;;12601:51:0;;;15910::1;15997:32;;;15977:18;;;15970:60;16046:18;;;;16039:34;;;12601:51:0;;;;;;;;;;15883:18:1;;;;12601:51:0;;;;;;;-1:-1:-1;;;;;12601:51:0;-1:-1:-1;;;12601:51:0;;;12576:87;;-1:-1:-1;;;;12576:10:0;;;;:87;;12601:51;12576:87;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12540:123;;;;12696:7;:57;;;;-1:-1:-1;12708:11:0;;:16;;:44;;;12739:4;12728:24;;;;;;;;;;;;:::i;:::-;12674:156;;;;-1:-1:-1;;;12674:156:0;;20855:2:1;12674:156:0;;;20837:21:1;20894:2;20874:18;;;20867:30;20933:34;20913:18;;;20906:62;-1:-1:-1;;;20984:18:1;;;20977:47;21041:19;;12674:156:0;20653:413:1;12674:156:0;12450:388;;12316:522;;;;:::o;27899:845::-;28043:9;28038:699;28072:1;28058:4;:11;:15;;;;:::i;:::-;28054:1;:19;28038:699;;;28096:13;28111:14;28130:4;28135:1;28130:7;;;;;;;;:::i;:::-;;;;;;;28139:4;28144:1;28148;28144:5;;;;:::i;:::-;28139:11;;;;;;;;:::i;:::-;;;;;;;28095:56;;;;28167:14;28187:42;28215:5;28222:6;28187:27;:42::i;:::-;-1:-1:-1;28166:63:0;-1:-1:-1;28244:17:0;28264:7;28272:5;:1;28276;28272:5;:::i;:::-;28264:14;;;;;;;;:::i;:::-;;;;;;;28244:34;;28294:18;28314;28345:6;-1:-1:-1;;;;;28336:15:0;:5;-1:-1:-1;;;;;28336:15:0;;:101;;28415:9;28434:1;28336:101;;;28380:1;28384:9;28336:101;28293:144;;;;28452:10;28483:1;28469:4;:11;:15;;;;:::i;:::-;28465:1;:19;:116;;28578:3;28465:116;;;28504:54;28529:7;28538:6;28546:4;28551:5;:1;28555;28551:5;:::i;:::-;28546:11;;;;;;;;:::i;:::-;;;;;;;28504:24;:54::i;:::-;28452:129;;28611:48;28636:7;28645:5;28652:6;28611:24;:48::i;:::-;-1:-1:-1;;;;;28596:87:0;;28684:10;28696;28708:2;28722:1;28712:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28712:12:0;;28596:129;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28075:3:0;;;;;-1:-1:-1;28038:699:0;;-1:-1:-1;;;;;;;;28038:699:0;;;27899:845;;;:::o;17246:650::-;17384:24;17444:1;17429:4;:11;:16;;17421:59;;;;-1:-1:-1;;;17421:59:0;;19935:2:1;17421:59:0;;;19917:21:1;19974:2;19954:18;;;19947:30;20013:32;19993:18;;;19986:60;20063:18;;17421:59:0;19733:354:1;17421:59:0;17515:4;:11;17501:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17501:26:0;;17491:36;;17568:9;17538:7;17563:1;17546:7;:14;:18;;;;:::i;:::-;17538:27;;;;;;;;:::i;:::-;;;;;;:39;;;;;17593:9;17619:1;17605:4;:11;:15;;;;:::i;:::-;17593:27;;17588:301;17622:5;;17588:301;;17650:17;;17691:108;17721:7;17747:4;17752:5;17756:1;17752;:5;:::i;:::-;17747:11;;;;;;;;:::i;:::-;;;;;;;17777:4;17782:1;17777:7;;;;;;;;:::i;17691:108::-;17649:150;;;;17831:46;17843:7;17851:1;17843:10;;;;;;;;:::i;:::-;;;;;;;17855:9;17866:10;17831:11;:46::i;:::-;17814:7;17822:5;17826:1;17822;:5;:::i;:::-;17814:14;;;;;;;;:::i;:::-;;;;;;:63;;;;;17634:255;;17629:3;;;;;:::i;:::-;;;;17588:301;;34219:1570;34357:9;34352:1430;34386:1;34372:4;:11;:15;;;;:::i;:::-;34368:1;:19;34352:1430;;;34410:13;34425:14;34444:4;34449:1;34444:7;;;;;;;;:::i;:::-;;;;;;;34453:4;34458:1;34462;34458:5;;;;:::i;:::-;34453:11;;;;;;;;:::i;:::-;;;;;;;34409:56;;;;34481:14;34501:42;34529:5;34536:6;34501:27;:42::i;:::-;34480:63;;;34558:19;34613:48;34638:7;34647:5;34654:6;34613:24;:48::i;:::-;34558:118;;34691:19;34725:20;34837:16;34855;34877:4;-1:-1:-1;;;;;34877:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34836:59;-1:-1:-1;;;;;34836:59:0;;;-1:-1:-1;;;;;34836:59:0;;;34915:20;34937:21;34971:6;-1:-1:-1;;;;;34962:15:0;:5;-1:-1:-1;;;;;34962:15:0;;:103;;35046:8;35056;34962:103;;;35002:8;35012;34962:103;35119:38;;-1:-1:-1;;;35119:38:0;;-1:-1:-1;;;;;8750:32:1;;;35119:38:0;;;8732:51:1;34914:151:0;;-1:-1:-1;34914:151:0;;-1:-1:-1;34914:151:0;;35119:23;;;;;8705:18:1;;35119:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:74;;;;:::i;:::-;35084:109;;35227:153;35279:11;35313:12;35348:13;35227:29;:153::i;:::-;35212:168;;34760:636;;;;35411:18;35431;35462:6;-1:-1:-1;;;;;35453:15:0;:5;-1:-1:-1;;;;;35453:15:0;;:107;;35535:12;35557:1;35453:107;;;35497:1;35501:12;35453:107;35410:150;;;;35575:10;35606:1;35592:4;:11;:15;;;;:::i;:::-;35588:1;:19;:116;;35701:3;35588:116;;;35627:54;35652:7;35661:6;35669:4;35674:5;:1;35678;35674:5;:::i;35627:54::-;35757:12;;;35767:1;35757:12;;;;;;;;;-1:-1:-1;;;35719:51:0;;;35575:129;;-1:-1:-1;;;;;;35719:9:0;;;;;:51;;35729:10;;35741;;35575:129;;35719:51;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34389:3:0;;;;;-1:-1:-1;34352:1430:0;;-1:-1:-1;;;;;;;;;;34352:1430:0;15908:546;16044:16;16093:1;16081:9;:13;16073:70;;;;-1:-1:-1;;;16073:70:0;;22727:2:1;16073:70:0;;;22709:21:1;22766:2;22746:18;;;22739:30;22805:34;22785:18;;;22778:62;-1:-1:-1;;;22856:18:1;;;22849:42;22908:19;;16073:70:0;22525:408:1;16073:70:0;16188:1;16176:9;:13;:31;;;;;16206:1;16193:10;:14;16176:31;16154:121;;;;-1:-1:-1;;;16154:121:0;;;;;;;:::i;:::-;16286:17;16306:21;16318:9;16306;:21;:::i;:::-;:28;;16330:4;16306:28;:::i;:::-;16286:48;-1:-1:-1;16345:19:0;16368:22;16381:9;16368:10;:22;:::i;:::-;16367:30;;16394:3;16367:30;:::i;:::-;16345:52;-1:-1:-1;16419:23:0;16345:52;16419:9;:23;:::i;:::-;:27;;16445:1;16419:27;:::i;14665:403::-;14790:15;14836:1;14826:7;:11;14818:61;;;;-1:-1:-1;;;14818:61:0;;23140:2:1;14818:61:0;;;23122:21:1;23179:2;23159:18;;;23152:30;23218:34;23198:18;;;23191:62;-1:-1:-1;;;23269:18:1;;;23262:35;23314:19;;14818:61:0;22938:401:1;14818:61:0;14923:1;14912:8;:12;:28;;;;;14939:1;14928:8;:12;14912:28;14890:118;;;;-1:-1:-1;;;14890:118:0;;;;;;;:::i;:::-;15052:8;15030:18;15040:8;15030:7;:18;:::i;:::-;15029:31;;;;:::i;13312:400::-;13412:14;13428;13473:6;-1:-1:-1;;;;;13463:16:0;:6;-1:-1:-1;;;;;13463:16:0;;13455:66;;;;-1:-1:-1;;;13455:66:0;;23546:2:1;13455:66:0;;;23528:21:1;23585:2;23565:18;;;23558:30;23624:34;23604:18;;;23597:62;-1:-1:-1;;;23675:18:1;;;23668:35;23720:19;;13455:66:0;23344:401:1;13455:66:0;13560:6;-1:-1:-1;;;;;13551:15:0;:6;-1:-1:-1;;;;;13551:15:0;;:79;;13615:6;13623;13551:79;;;13583:6;13591;13551:79;13532:98;;-1:-1:-1;13532:98:0;-1:-1:-1;;;;;;13649:20:0;;13641:63;;;;-1:-1:-1;;;13641:63:0;;23952:2:1;13641:63:0;;;23934:21:1;23991:2;23971:18;;;23964:30;24030:32;24010:18;;;24003:60;24080:18;;13641:63:0;23750:354:1;13641:63:0;13312:400;;;;;:::o;18557:1740::-;18888:50;;-1:-1:-1;;;18888:50:0;;-1:-1:-1;;;;;20284:32:1;;;18888:50:0;;;20266:51:1;20353:32;;;20333:18;;;20326:60;-1:-1:-1;;;;;;18906:7:0;18888:34;;;;;;20239:18:1;;18888:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18888:64:0;;18884:150;;18969:53;;-1:-1:-1;;;18969:53:0;;-1:-1:-1;;;;;20284:32:1;;;18969:53:0;;;20266:51:1;20353:32;;;20333:18;;;20326:60;18987:7:0;18969:37;;;;20239:18:1;;18969:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18884:150;19045:16;19063;19083:103;19126:7;19148:6;19169;19083:28;:103::i;:::-;19044:142;;;;19201:8;19213:1;19201:13;:30;;;;-1:-1:-1;19218:13:0;;19201:30;19197:1093;;;19270:14;;-1:-1:-1;19286:14:0;;-1:-1:-1;19197:1093:0;;;19334:22;19359:124;19400:14;19433:8;19460;19359:22;:124::i;:::-;19334:149;;19520:14;19502;:32;19498:781;;19603:10;19585:14;:28;;19555:140;;;;-1:-1:-1;;;19555:140:0;;;;;;;:::i;:::-;19736:14;;-1:-1:-1;19752:14:0;-1:-1:-1;19752:14:0;19498:781;;;19808:22;19833:140;19878:14;19915:8;19946;19833:22;:140::i;:::-;19808:165;;20017:14;19999;:32;;19992:40;;;;:::i;:::-;20099:10;20081:14;:28;;20051:140;;;;-1:-1:-1;;;20051:140:0;;;;;;;:::i;:::-;20232:14;-1:-1:-1;20248:14:0;;-1:-1:-1;19498:781:0;19319:971;19197:1093;18821:1476;;18557:1740;;;;;;;;;:::o;14063:489::-;14190:16;14208;14238:14;14258:26;14269:6;14277;14258:10;:26::i;:::-;14237:47;;;14296:16;14314;14365:32;14373:7;14382:6;14390;14365:7;:32::i;:::-;-1:-1:-1;;;;;14336:84:0;;:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14295:127;-1:-1:-1;;;;;14295:127:0;;;-1:-1:-1;;;;;14295:127:0;;;14466:6;-1:-1:-1;;;;;14456:16:0;:6;-1:-1:-1;;;;;14456:16:0;;:88;;14525:8;14535;14456:88;;;14489:8;14499;14456:88;14433:111;;;;-1:-1:-1;14063:489:0;-1:-1:-1;;;;;;;14063:489:0:o;14:127:1:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:131;-1:-1:-1;;;;;221:31:1;;211:42;;201:70;;267:1;264;257:12;201:70;146:131;:::o;282:134::-;350:20;;379:31;350:20;379:31;:::i;:::-;282:134;;;:::o;421:871::-;525:6;533;541;549;557;565;618:3;606:9;597:7;593:23;589:33;586:53;;;635:1;632;625:12;586:53;674:9;661:23;693:31;718:5;693:31;:::i;:::-;743:5;-1:-1:-1;821:2:1;806:18;;793:32;;-1:-1:-1;924:2:1;909:18;;896:32;;-1:-1:-1;1027:2:1;1012:18;;999:32;;-1:-1:-1;1109:3:1;1094:19;;1081:33;1123;1081;1123;:::i;:::-;421:871;;;;-1:-1:-1;421:871:1;;;;;1255:3;1240:19;;;1227:33;;-1:-1:-1;;421:871:1:o;1550:466::-;1627:6;1635;1643;1696:2;1684:9;1675:7;1671:23;1667:32;1664:52;;;1712:1;1709;1702:12;1664:52;-1:-1:-1;;1757:23:1;;;1877:2;1862:18;;1849:32;;-1:-1:-1;1980:2:1;1965:18;;;1952:32;;1550:466;-1:-1:-1;1550:466:1:o;2203:367::-;2266:8;2276:6;2330:3;2323:4;2315:6;2311:17;2307:27;2297:55;;2348:1;2345;2338:12;2297:55;-1:-1:-1;2371:20:1;;2414:18;2403:30;;2400:50;;;2446:1;2443;2436:12;2400:50;2483:4;2475:6;2471:17;2459:29;;2543:3;2536:4;2526:6;2523:1;2519:14;2511:6;2507:27;2503:38;2500:47;2497:67;;;2560:1;2557;2550:12;2575:934;2697:6;2705;2713;2721;2729;2737;2790:3;2778:9;2769:7;2765:23;2761:33;2758:53;;;2807:1;2804;2797:12;2758:53;2852:23;;;-1:-1:-1;2972:2:1;2957:18;;2944:32;;-1:-1:-1;3053:2:1;3038:18;;3025:32;3080:18;3069:30;;3066:50;;;3112:1;3109;3102:12;3066:50;3151:70;3213:7;3204:6;3193:9;3189:22;3151:70;:::i;:::-;3240:8;;-1:-1:-1;3125:96:1;-1:-1:-1;;3327:2:1;3312:18;;3299:32;3340:33;3299:32;3340:33;:::i;:::-;2575:934;;;;-1:-1:-1;2575:934:1;;;;;3472:3;3457:19;;;3444:33;;-1:-1:-1;;2575:934:1:o;3514:611::-;3704:2;3716:21;;;3786:13;;3689:18;;;3808:22;;;3656:4;;3887:15;;;3861:2;3846:18;;;3656:4;3930:169;3944:6;3941:1;3938:13;3930:169;;;4005:13;;3993:26;;4048:2;4074:15;;;;4039:12;;;;3966:1;3959:9;3930:169;;;-1:-1:-1;4116:3:1;;3514:611;-1:-1:-1;;;;;3514:611:1:o;4130:127::-;4191:10;4186:3;4182:20;4179:1;4172:31;4222:4;4219:1;4212:15;4246:4;4243:1;4236:15;4262:1241;4355:6;4363;4416:2;4404:9;4395:7;4391:23;4387:32;4384:52;;;4432:1;4429;4422:12;4384:52;4477:23;;;-1:-1:-1;4575:2:1;4560:18;;4547:32;4602:18;4591:30;;4588:50;;;4634:1;4631;4624:12;4588:50;4657:22;;4710:4;4702:13;;4698:27;-1:-1:-1;4688:55:1;;4739:1;4736;4729:12;4688:55;4779:2;4766:16;4805:18;4797:6;4794:30;4791:56;;;4827:18;;:::i;:::-;4873:6;4870:1;4866:14;4909:2;4903:9;4972:2;4968:7;4963:2;4959;4955:11;4951:25;4943:6;4939:38;5043:6;5031:10;5028:22;5007:18;4995:10;4992:34;4989:62;4986:88;;;5054:18;;:::i;:::-;5090:2;5083:22;5140;;;5190:2;5220:11;;;5216:20;;;5140:22;5178:15;;5248:19;;;5245:39;;;5280:1;5277;5270:12;5245:39;5312:2;5308;5304:11;5293:22;;5324:148;5340:6;5335:3;5332:15;5324:148;;;5406:23;5425:3;5406:23;:::i;:::-;5394:36;;5459:2;5357:12;;;;5450;5324:148;;;5328:3;5491:6;5481:16;;;;;;4262:1241;;;;;:::o;5508:118::-;5594:5;5587:13;5580:21;5573:5;5570:32;5560:60;;5616:1;5613;5606:12;5631:156;5697:20;;5757:4;5746:16;;5736:27;;5726:55;;5777:1;5774;5767:12;5792:1464;5936:6;5944;5952;5960;5968;5976;5984;5992;6000;6008;6016:7;6070:3;6058:9;6049:7;6045:23;6041:33;6038:53;;;6087:1;6084;6077:12;6038:53;6126:9;6113:23;6145:31;6170:5;6145:31;:::i;:::-;6195:5;-1:-1:-1;6252:2:1;6237:18;;6224:32;6265:33;6224:32;6265:33;:::i;:::-;6317:7;-1:-1:-1;6397:2:1;6382:18;;6369:32;;-1:-1:-1;6500:2:1;6485:18;;6472:32;;-1:-1:-1;6603:3:1;6588:19;;6575:33;;-1:-1:-1;6686:3:1;6671:19;;6658:33;6700;6658;6700;:::i;:::-;6752:7;-1:-1:-1;6832:3:1;6817:19;;6804:33;;-1:-1:-1;6915:3:1;6900:19;;6887:33;6929:30;6887:33;6929:30;:::i;:::-;6978:7;-1:-1:-1;7004:37:1;7036:3;7021:19;;7004:37;:::i;:::-;5792:1464;;;;-1:-1:-1;5792:1464:1;;;;;;;;-1:-1:-1;5792:1464:1;;;;6994:47;7114:3;7099:19;;7086:33;;-1:-1:-1;7218:3:1;7203:19;;;7190:33;;5792:1464;-1:-1:-1;5792:1464:1:o;7261:1320::-;7396:6;7404;7412;7420;7428;7436;7444;7452;7460;7468;7521:3;7509:9;7500:7;7496:23;7492:33;7489:53;;;7538:1;7535;7528:12;7489:53;7577:9;7564:23;7596:31;7621:5;7596:31;:::i;:::-;7646:5;-1:-1:-1;7724:2:1;7709:18;;7696:32;;-1:-1:-1;7827:2:1;7812:18;;7799:32;;-1:-1:-1;7930:2:1;7915:18;;7902:32;;-1:-1:-1;8012:3:1;7997:19;;7984:33;8026;7984;8026;:::i;:::-;8078:7;-1:-1:-1;8158:3:1;8143:19;;8130:33;;-1:-1:-1;8241:3:1;8226:19;;8213:33;8255:30;8213:33;8255:30;:::i;:::-;8304:7;-1:-1:-1;8330:37:1;8362:3;8347:19;;8330:37;:::i;:::-;7261:1320;;;;-1:-1:-1;7261:1320:1;;;;;;;;-1:-1:-1;7261:1320:1;;8440:3;8425:19;;8412:33;;8544:3;8529:19;;;8516:33;;-1:-1:-1;7261:1320:1;-1:-1:-1;7261:1320:1:o;8794:813::-;8907:6;8915;8923;8931;8939;8992:3;8980:9;8971:7;8967:23;8963:33;8960:53;;;9009:1;9006;8999:12;8960:53;9054:23;;;-1:-1:-1;9152:2:1;9137:18;;9124:32;9179:18;9168:30;;9165:50;;;9211:1;9208;9201:12;9165:50;9250:70;9312:7;9303:6;9292:9;9288:22;9250:70;:::i;:::-;9339:8;;-1:-1:-1;9224:96:1;-1:-1:-1;;9426:2:1;9411:18;;9398:32;9439:33;9398:32;9439:33;:::i;:::-;8794:813;;;;-1:-1:-1;8794:813:1;;9571:2;9556:18;9543:32;;8794:813;-1:-1:-1;;8794:813:1:o;9612:1013::-;9725:6;9733;9741;9749;9757;9765;9773;9826:3;9814:9;9805:7;9801:23;9797:33;9794:53;;;9843:1;9840;9833:12;9794:53;9882:9;9869:23;9901:31;9926:5;9901:31;:::i;:::-;9951:5;-1:-1:-1;10008:2:1;9993:18;;9980:32;10021:33;9980:32;10021:33;:::i;:::-;10073:7;-1:-1:-1;10153:2:1;10138:18;;10125:32;;-1:-1:-1;10256:2:1;10241:18;;10228:32;;-1:-1:-1;10359:3:1;10344:19;;10331:33;;-1:-1:-1;10442:3:1;10427:19;;10414:33;10456;10414;10456;:::i;:::-;9612:1013;;;;-1:-1:-1;9612:1013:1;;;;;;;;-1:-1:-1;;10588:3:1;10573:19;;;10560:33;;9612:1013::o;10630:1134::-;10752:6;10760;10768;10776;10784;10792;10800;10808;10861:3;10849:9;10840:7;10836:23;10832:33;10829:53;;;10878:1;10875;10868:12;10829:53;10917:9;10904:23;10936:31;10961:5;10936:31;:::i;:::-;10986:5;-1:-1:-1;11043:2:1;11028:18;;11015:32;11056:33;11015:32;11056:33;:::i;:::-;11108:7;-1:-1:-1;11188:2:1;11173:18;;11160:32;;-1:-1:-1;11291:2:1;11276:18;;11263:32;;-1:-1:-1;11394:3:1;11379:19;;11366:33;;-1:-1:-1;11498:3:1;11483:19;;11470:33;;-1:-1:-1;11581:3:1;11566:19;;11553:33;11595;11553;11595;:::i;:::-;10630:1134;;;;-1:-1:-1;10630:1134:1;;;;;;;;-1:-1:-1;11647:7:1;;11727:3;11712:19;11699:33;;-1:-1:-1;10630:1134:1:o;12093:348::-;12295:2;12277:21;;;12334:2;12314:18;;;12307:30;12373:26;12368:2;12353:18;;12346:54;12432:2;12417:18;;12093:348::o;12446:127::-;12507:10;12502:3;12498:20;12495:1;12488:31;12538:4;12535:1;12528:15;12562:4;12559:1;12552:15;12578:128;12645:9;;;12666:11;;;12663:37;;;12680:18;;:::i;12711:127::-;12772:10;12767:3;12763:20;12760:1;12753:31;12803:4;12800:1;12793:15;12827:4;12824:1;12817:15;12843:247;12902:6;12955:2;12943:9;12934:7;12930:23;12926:32;12923:52;;;12971:1;12968;12961:12;12923:52;13010:9;12997:23;13029:31;13054:5;13029:31;:::i;:::-;13079:5;12843:247;-1:-1:-1;;;12843:247:1:o;13095:353::-;13297:2;13279:21;;;13336:2;13316:18;;;13309:30;13375:31;13370:2;13355:18;;13348:59;13439:2;13424:18;;13095:353::o;13453:407::-;13655:2;13637:21;;;13694:2;13674:18;;;13667:30;13733:34;13728:2;13713:18;;13706:62;-1:-1:-1;;;13799:2:1;13784:18;;13777:41;13850:3;13835:19;;13453:407::o;13865:666::-;-1:-1:-1;;;;;14194:32:1;;;14176:51;;14263:32;;;;14258:2;14243:18;;14236:60;14327:2;14312:18;;14305:34;;;;14370:2;14355:18;;14348:34;;;;14431:4;14419:17;14413:3;14398:19;;14391:46;14214:3;14453:19;;14446:35;14512:3;14497:19;;14490:35;;;;14163:3;14148:19;;13865:666::o;14536:403::-;14738:2;14720:21;;;14777:2;14757:18;;;14750:30;14816:34;14811:2;14796:18;;14789:62;-1:-1:-1;;;14882:2:1;14867:18;;14860:37;14929:3;14914:19;;14536:403::o;14944:230::-;15014:6;15067:2;15055:9;15046:7;15042:23;15038:32;15035:52;;;15083:1;15080;15073:12;15035:52;-1:-1:-1;15128:16:1;;14944:230;-1:-1:-1;14944:230:1:o;15458:245::-;15525:6;15578:2;15566:9;15557:7;15553:23;15549:32;15546:52;;;15594:1;15591;15584:12;15546:52;15626:9;15620:16;15645:28;15667:5;15645:28;:::i;16084:343::-;16163:6;16171;16224:2;16212:9;16203:7;16199:23;16195:32;16192:52;;;16240:1;16237;16230:12;16192:52;-1:-1:-1;;16285:16:1;;16391:2;16376:18;;;16370:25;16285:16;;16370:25;;-1:-1:-1;16084:343:1:o;16432:402::-;16634:2;16616:21;;;16673:2;16653:18;;;16646:30;16712:34;16707:2;16692:18;;16685:62;-1:-1:-1;;;16778:2:1;16763:18;;16756:36;16824:3;16809:19;;16432:402::o;16839:::-;17041:2;17023:21;;;17080:2;17060:18;;;17053:30;17119:34;17114:2;17099:18;;17092:62;-1:-1:-1;;;17185:2:1;17170:18;;17163:36;17231:3;17216:19;;16839:402::o;17246:301::-;17375:3;17413:6;17407:13;17459:6;17452:4;17444:6;17440:17;17435:3;17429:37;17521:1;17485:16;;17510:13;;;-1:-1:-1;17485:16:1;17246:301;-1:-1:-1;17246:301:1:o;18799:404::-;19001:2;18983:21;;;19040:2;19020:18;;;19013:30;19079:34;19074:2;19059:18;;19052:62;-1:-1:-1;;;19145:2:1;19130:18;;19123:38;19193:3;19178:19;;18799:404::o;19208:168::-;19281:9;;;19312;;19329:15;;;19323:22;;19309:37;19299:71;;19350:18;;:::i;19381:125::-;19446:9;;;19467:10;;;19464:36;;;19480:18;;:::i;19511:217::-;19551:1;19577;19567:132;;19621:10;19616:3;19612:20;19609:1;19602:31;19656:4;19653:1;19646:15;19684:4;19681:1;19674:15;19567:132;-1:-1:-1;19713:9:1;;19511:217::o;20397:251::-;20467:6;20520:2;20508:9;20499:7;20495:23;20491:32;20488:52;;;20536:1;20533;20526:12;20488:52;20568:9;20562:16;20587:31;20612:5;20587:31;:::i;21071:660::-;21302:6;21291:9;21284:25;21345:6;21340:2;21329:9;21325:18;21318:34;21417:1;21413;21408:3;21404:11;21400:19;21392:6;21388:32;21383:2;21372:9;21368:18;21361:60;21457:3;21452:2;21441:9;21437:18;21430:31;21265:4;21490:6;21484:13;21534:6;21528:3;21517:9;21513:19;21506:35;21594:6;21589:2;21581:6;21577:15;21571:3;21560:9;21556:19;21550:51;21651:1;21645:3;21636:6;21625:9;21621:22;21617:32;21610:43;21721:3;21714:2;21710:7;21705:2;21697:6;21693:15;21689:29;21678:9;21674:45;21670:55;21662:63;;;21071:660;;;;;;;:::o;21736:136::-;21775:3;21803:5;21793:39;;21812:18;;:::i;:::-;-1:-1:-1;;;21848:18:1;;21736:136::o;21877:188::-;21956:13;;-1:-1:-1;;;;;21998:42:1;;21988:53;;21978:81;;22055:1;22052;22045:12;22070:450;22157:6;22165;22173;22226:2;22214:9;22205:7;22201:23;22197:32;22194:52;;;22242:1;22239;22232:12;22194:52;22265:40;22295:9;22265:40;:::i;:::-;22255:50;;22324:49;22369:2;22358:9;22354:18;22324:49;:::i;:::-;22314:59;;22416:2;22405:9;22401:18;22395:25;22460:10;22453:5;22449:22;22442:5;22439:33;22429:61;;22486:1;22483;22476:12;22429:61;22509:5;22499:15;;;22070:450;;;;;:::o
Swarm Source
ipfs://fe35e625089b3338fc1924a079a4d6924e42924dd16ee0003f067ac276aafe6d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.