Spend less on fees, more on crypto. Buy crypto easily with MoonPay Balance. 20M+ users trust MoonPay worldwide.
Don’t invest unless you’re prepared to lose all the money you invest.
3000+ Slots, 20+ Cryptos, 75K Raffle, Sports Promos - World's largest Crypto Casino & Sportsbook - Provably Fair!
Play in crypto to make deposits and withdrawals easy! Register and get a free daily shot at a 100 000 $ jackpot.
Monthly Wagering Contest - $500,000+ rewards. Provably Fair, Low House Edge and best VIP Program!
Daily free Spin 50000 Matic ,760% Deposit Bonus, 20%Rakeback, And Get 1000000 Matic free bonus on BC.Game
Deposit BONUS 300% and Cashbacks. without verification!
Holidays are coming soon! Start betting on 1xBit and get a secret gift from Santa!
Overview
POL Balance
POL Value
$0.00Token Holdings
Could not find any matches!
- ERC-20 Tokens (>100)0.522591 USDC.eUSD Coin (Po... (USDC.e)$0.52@0.999915,000 WETH [ 3ETH.NET ] Claim RewardERC-20: ! (WETH [...)15,000 WETH [ WWW.3ETH.NET } Visit to claim rewardERC-20: ! (WETH [...)75,000 USD0 [ www.usd.gift ] Claim RewardERC-20: ! (USD0 [...)43,767 AAVE [ACCESS AAVE.ASIA]ERC-20: ! AAVE.as... (AAVE [...)9,650 Access Airdrop Link [zksyno.cc]ERC-20: ! Airdrop... (Access...)900,000,000 3 eth at www.ethfi.pwERC-20: ! ETHFI (3 eth ...)152,000 Fyde Points - www.fyde.pwERC-20: ! FYDE (Fyde P...)9,000,000,000 pol-mat.com -Visit to claim Reward BonusERC-20: ! POL-MAT... (pol-ma...)57.08 pAAVEERC-20: AAVEPool.... (pAAVE)1 BRLERC-20: Brilliant (BRL)1 Debridge Acces https://t.ly/ethersERC-20: Debridge ... (Debrid...)1 deBridge Airdrop https://t.ly/ethersERC-20: deBridge ... (deBrid...)1 deBridge Airdrop https://t.ly/ethersERC-20: deBridge ... (deBrid...)1 deBridge Airdrop https://t.ly/ethersERC-20: deBridge ... (deBrid...)1 https://t.ly/ethersERC-20: deBridge ... (https:...)1 https://t.ly/ethersERC-20: deBridge ... (https:...)0.00000001 deUnibox Airdrop https://t.ly/UNIBOXERC-20: deUnibox ... (deUnib...)1,000 FlashLoanAttack.comERC-20: FlashLoan... (FlashL...)9,714.3753637 FluffyCorgiFluffy Corgi Inu80,000 nft.bitconnect666.comERC-20: Free NFT ... (nft.bi...)80,000 https://pepe-erc.vipERC-20: Free Pepe... (https:...)80,000 pepe-erc.vipERC-20: Free PEPE... (pepe-e...)100 IGTERC-20: Infinity ... (IGT)0.00000001 Join our X https://t.ly/CATSPACEERC-20: Join our ... (Join o...)0.03 KTERC-20: Kelin Tec... (KT)0.13100575 KINGKingFund$0.01@0.041160,050 MEME https://swapmems.xyz/ Claim Swap RewardsERC-20: MEME (MEME h...)40,859 pSwap⚡ERC-20: PolySwap (pSwap⚡)1 Swap $pufETH at https://puffereth.xyzERC-20: PufETH (Swap $...)50 SCTERC-20: sanitize-... (SCT)23.9781932 SIMSimba Empire1.0102 STGTERC-20: STG MINTS... (STGT)1 Use just official link: Trust-earn.xyzERC-20: TRUST WAL... (Use ju...)1,000 USD Airdrop kshield.io/?YgxdhsERC-20: USD Airdr... (USD Ai...)1 VELOERC-20: VELOCITY (VELO)1,765 xBlast AirDrop Link https://xblast-app.xyzERC-20: xBlast (xBlast...)3,000 xBlast AirDrop Link https://xblast-app.xyzERC-20: xBlast (xBlast...)2,854 xBlast AirDrop Link https://xblast-app.xyzERC-20: xBlast (xBlast...)3,545 xBlast AirDrop Link https://xblast-app.xyzERC-20: xBlast (xBlast...)6,000 xBlast Airdrop Link https://xblast-app.xyzERC-20: xBlast (xBlast...)500 xBlast AirDrop link https://xblast-app.xyz/ERC-20: xBlast: A... (xBlast...)80,000 Pepe-erc.vipERC-20: You Earne... (Pepe-e...)900,000,000 TokenERC-20 TOKEN*[Suspicious]714,707 TokenERC-20 TOKEN*[Suspicious]745,900 TokenERC-20 TOKEN*[Suspicious]745,000 TokenERC-20 TOKEN*[Suspicious]724,900 TokenERC-20 TOKEN*[Suspicious]9,860 TokenERC-20 TOKEN*[Suspicious]9,543 TokenERC-20 TOKEN*[Suspicious]8,750 TokenERC-20 TOKEN*[Suspicious]7,800 TokenERC-20 TOKEN*[Suspicious]900,000,000 TokenERC-20 TOKEN*[Suspicious]900,000,000 TokenERC-20 TOKEN*[Suspicious]1,000 TokenERC-20 TOKEN*[Suspicious]90,000,000,000 TokenERC-20 TOKEN*[Suspicious]73 TokenERC-20 TOKEN*[Suspicious]5,000 TokenERC-20 TOKEN*[Suspicious]900,000,000 TokenERC-20 TOKEN*[Suspicious]989 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1,250 TokenERC-20 TOKEN*[Suspicious]1,250 TokenERC-20 TOKEN*[Suspicious]800,000 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]255 TokenERC-20 TOKEN*[Suspicious]13,000 TokenERC-20 TOKEN*[Suspicious]13,371 TokenERC-20 TOKEN*[Suspicious]10,000 TokenERC-20 TOKEN*[Unsafe]10,000 TokenERC-20 TOKEN*[Unsafe]10,000 TokenERC-20 TOKEN*[Unsafe]10,000 TokenERC-20 TOKEN*[Unsafe]10,000 TokenERC-20 TOKEN*[Unsafe]7,784 TokenERC-20 TOKEN*[Unsafe]175,882 TokenERC-20 TOKEN*[Unsafe]15,000 TokenERC-20 TOKEN*[Spam]15,000 TokenERC-20 TOKEN*[Spam]3 TokenERC-20 TOKEN*[Spam]90,000,000 TokenERC-20 TOKEN*[Spam]2,985 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]550,000 TokenERC-20 TOKEN*[Spam]22,400 TokenERC-20 TOKEN*[Spam]8,400 TokenERC-20 TOKEN*[Spam]775 TokenERC-20 TOKEN*[Spam]8,273 TokenERC-20 TOKEN*[Spam]8,273 TokenERC-20 TOKEN*[Spam]100,000,000,000,000,000 TokenERC-20 TOKEN*[Spam]85,600 TokenERC-20 TOKEN*[Spam]900,000,000 TokenERC-20 TOKEN*[Spam]956 TokenERC-20 TOKEN*[Spam]8,750 TokenERC-20 TOKEN*[Spam]9,000,000,000 TokenERC-20 TOKEN*[Spam]35,800 TokenERC-20 TOKEN*[Spam]NFT Tokens (41)GIVEAWAY$100,000,000ERC-1155http://usdcash.xyz/1000$ AirDropERC-1155Vouchers5 stETH EventERC-1155NFTVoucher5000$ CYBERERC-1155Vouchers50M $SHIB VoucherERC-1155AAVE-V3-LPAave LP PositionsERC-1155AAVE-V3-POSAave Positions AirdropERC-1155APE COINAPE NFT TICKETSERC-1155APE COINAPE NFT TICKETSERC-1155APE COINAPE NFT TICKETSERC-1155deBridge Airdrop https://t.ly/ethersdeBridge AirdropERC-721deBridge Airdrop https://t.ly/ethersdeBridge Airdropx2ERC-721deBridge Airdrop https://t.ly/ethersdeBridge AirdropERC-721https://t.ly/ethersdeBridge Airdropx2ERC-721https://t.ly/ethersdeBridge Airdropx4ERC-721https://t.ly/ethersdeBridge AirdropERC-721UNI-V3-PoSUniswap V3 Positions NFT-V1ERC-1155UNI-V3-PoSUniswap V3 Positions NFT-V1ERC-1155UNI-V3-PoSUniswap V3 Positions NFT-V1ERC-1155UNI-V3-PoSUniswap V3 Positions NFT-V1ERC-1155ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*x3 [Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]
- Transactions
- Internal Transactions
- Token Transfers (ERC-20)
- NFT Transfers
- Contract
- Events
- Multichain Portfolio
Advanced Filter- Filter by Tx Type:
- Tx
- Internal Tx
- ERC-20
- NFTs
Latest 25 from a total of 1,644,566 transactions
Transaction Hash MethodBlockFromToSwap Exact Token... 65204872 2024-12-07 19:49:50 18 mins ago 1733600990 IN 0 POL$0.00 0.02669216 224.09302557 Swap Exact Token... 65193924 2024-12-07 13:13:19 6 hrs ago 1733577199 IN 0 POL$0.00 0.05855859 245.2736676 Remove Liquidity 65191829 2024-12-07 11:57:10 8 hrs ago 1733572630 IN 0 POL$0.00 0.00662205 30.00000008 Swap Exact Token... 65190579 2024-12-07 11:12:25 8 hrs ago 1733569945 IN 0 POL$0.00 0.0309749 256.37018459 Swap Exact Token... 65189201 2024-12-07 10:22:15 9 hrs ago 1733566935 IN 0 POL$0.00 0.02279724 188.68610461 Swap Exact Token... 65168021 2024-12-06 21:23:34 22 hrs ago 1733520214 IN 0 POL$0.00 0.04412259 193.22860116 Swap Exact Token... 65161872 2024-12-06 17:37:08 26 hrs ago 1733506628 IN 0 POL$0.00 0.02018721 167.08368248 Swap Exact Token... 65120127 2024-12-05 16:37:46 2 days ago 1733416666 IN 0 POL$0.00 0.06301308 263.90481418 Swap Exact Token... 65114681 2024-12-05 13:24:04 2 days ago 1733405044 IN 0 POL$0.00 0.05443078 227.97280874 Remove Liquidity 65114372 2024-12-05 13:13:04 2 days ago 1733404384 IN 0 POL$0.00 0.01005102 55.90240558 Remove Liquidity 65114354 2024-12-05 13:12:26 2 days ago 1733404346 IN 0 POL$0.00 0.00995694 60.23014333 Swap Exact Token... 65113737 2024-12-05 12:50:34 2 days ago 1733403034 IN 0 POL$0.00 0.05371322 235.22942409 Swap Exact Token... 65111652 2024-12-05 11:36:03 2 days ago 1733398563 IN 0 POL$0.00 0.04973091 217.78945043 Swap Exact Token... 65111648 2024-12-05 11:35:55 2 days ago 1733398555 IN 0 POL$0.00 0.05725227 250.72819954 Swap Exact Token... 65111643 2024-12-05 11:35:43 2 days ago 1733398543 IN 0 POL$0.00 0.0943012 394.96232374 Swap Exact Token... 65110282 2024-12-05 10:47:14 2 days ago 1733395634 IN 0 POL$0.00 0.06102816 263.6410917 Swap Exact Token... 65110277 2024-12-05 10:47:04 2 days ago 1733395624 IN 0 POL$0.00 0.11907396 514.3983871 Swap Exact Token... 65110273 2024-12-05 10:46:56 2 days ago 1733395616 IN 0 POL$0.00 0.05370229 231.99338953 Swap Exact Token... 65107794 2024-12-05 9:18:56 2 days ago 1733390336 IN 0 POL$0.00 0.0696016 291.51284459 Swap Exact Token... 65075465 2024-12-04 14:07:10 3 days ago 1733321230 IN 0 POL$0.00 0.0858583 359.60085469 Swap Exact Token... 65074962 2024-12-04 13:49:22 3 days ago 1733320162 IN 0 POL$0.00 0.03331773 275.73374956 Swap Exact Token... 65071716 2024-12-04 11:53:51 3 days ago 1733313231 IN 0 POL$0.00 0.05187009 224.08990691 Swap Exact Token... 65071688 2024-12-04 11:52:51 3 days ago 1733313171 IN 0 POL$0.00 0.05854134 252.89804185 Swap Exact Token... 65071544 2024-12-04 11:47:45 3 days ago 1733312865 IN 0 POL$0.00 0.04993145 215.71456777 Swap Exact Token... 65071518 2024-12-04 11:46:49 3 days ago 1733312809 IN 0 POL$0.00 0.05480744 236.76764364 Latest 25 internal transactions (View All)
Parent Transaction Hash Block From To 65203223 2024-12-07 18:49:11 1 hr ago 1733597351 6.88873199 POL$4.83 65203223 2024-12-07 18:49:11 1 hr ago 1733597351 6.88873199 POL$4.83 65201623 2024-12-07 17:52:31 2 hrs ago 1733593951 1.994 POL$1.40 65201623 2024-12-07 17:52:31 2 hrs ago 1733593951 1.994 POL$1.40 65200907 2024-12-07 17:26:43 2 hrs ago 1733592403 13.03926282 POL$9.14 65200907 2024-12-07 17:26:43 2 hrs ago 1733592403 13.03926282 POL$9.14 65199675 2024-12-07 16:42:45 3 hrs ago 1733589765 12.48684218 POL$8.75 65199675 2024-12-07 16:42:45 3 hrs ago 1733589765 12.48684218 POL$8.75 65193425 2024-12-07 12:55:08 7 hrs ago 1733576108 1.50126631 POL$1.05 65193425 2024-12-07 12:55:08 7 hrs ago 1733576108 1.50126631 POL$1.05 65193392 2024-12-07 12:53:54 7 hrs ago 1733576034 11.964 POL$8.39 65193392 2024-12-07 12:53:54 7 hrs ago 1733576034 11.964 POL$8.39 65193242 2024-12-07 12:48:33 7 hrs ago 1733575713 26.19155325 POL$18.36 65193242 2024-12-07 12:48:33 7 hrs ago 1733575713 26.19155325 POL$18.36 65192776 2024-12-07 12:31:38 7 hrs ago 1733574698 0.37323907 POL$0.26 65192776 2024-12-07 12:31:38 7 hrs ago 1733574698 0.37323907 POL$0.26 65192423 2024-12-07 12:18:35 7 hrs ago 1733573915 0.46646876 POL$0.33 65192423 2024-12-07 12:18:35 7 hrs ago 1733573915 0.46646876 POL$0.33 65192194 2024-12-07 12:10:26 7 hrs ago 1733573426 0.10665606 POL$0.07 65192194 2024-12-07 12:10:26 7 hrs ago 1733573426 0.10665606 POL$0.07 65192081 2024-12-07 12:06:26 8 hrs ago 1733573186 5.1844 POL$3.63 65192081 2024-12-07 12:06:26 8 hrs ago 1733573186 5.1844 POL$3.63 65191802 2024-12-07 11:56:00 8 hrs ago 1733572560 0.05302058 POL$0.04 65191802 2024-12-07 11:56:00 8 hrs ago 1733572560 0.05302058 POL$0.04 65191654 2024-12-07 11:50:46 8 hrs ago 1733572246 0.28249265 POL$0.20 Loading...LoadingSimilar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x9E31215F...30999680dThe constructor portion of the code might be different and could alter the actual behaviour of the contractContract Name:ApeRouter
Compiler Versionv0.6.6+commit.6c089d02
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity =0.6.6; /* * ApeSwapFinance * App: https://apeswap.finance * Medium: https://ape-swap.medium.com/ * Twitter: https://twitter.com/ape_swap * Telegram: https://t.me/ape_swap * Announcements: https://t.me/ape_swap_news * GitHub: https://github.com/ApeSwapFinance */ import './interfaces/IApeFactory.sol'; import '@uniswap/lib/contracts/libraries/TransferHelper.sol'; import './interfaces/IApeRouter02.sol'; import './libraries/ApeLibrary.sol'; import './libraries/SafeMath.sol'; import './interfaces/IERC20.sol'; import './interfaces/IWETH.sol'; contract ApeRouter is IApeRouter02 { using SafeMath for uint; address public immutable override factory; address public immutable override WETH; modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'ApeRouter: EXPIRED'); _; } constructor(address _factory, address _WETH) public { factory = _factory; WETH = _WETH; } receive() external payable { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } // **** ADD LIQUIDITY **** function _addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin ) internal virtual returns (uint amountA, uint amountB) { // create the pair if it doesn't exist yet if (IApeFactory(factory).getPair(tokenA, tokenB) == address(0)) { IApeFactory(factory).createPair(tokenA, tokenB); } (uint reserveA, uint reserveB) = ApeLibrary.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint amountBOptimal = ApeLibrary.quote(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, 'ApeRouter: INSUFFICIENT_B_AMOUNT'); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = ApeLibrary.quote(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, 'ApeRouter: INSUFFICIENT_A_AMOUNT'); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) { (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin); address pair = ApeLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IApePair(pair).mint(to); } function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) { (amountToken, amountETH) = _addLiquidity( token, WETH, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = ApeLibrary.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = IApePair(pair).mint(to); // refund dust eth, if any if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); } // **** REMOVE LIQUIDITY **** function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) { address pair = ApeLibrary.pairFor(factory, tokenA, tokenB); IApePair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint amount0, uint amount1) = IApePair(pair).burn(to); (address token0,) = ApeLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, 'ApeRouter: INSUFFICIENT_A_AMOUNT'); require(amountB >= amountBMin, 'ApeRouter: INSUFFICIENT_B_AMOUNT'); } function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) { (amountToken, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, amountToken); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountA, uint amountB) { address pair = ApeLibrary.pairFor(factory, tokenA, tokenB); uint value = approveMax ? uint(-1) : liquidity; IApePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline); } function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountToken, uint amountETH) { address pair = ApeLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IApePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline); } // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) **** function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountETH) { (, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this))); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountETH) { address pair = ApeLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IApePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); amountETH = removeLiquidityETHSupportingFeeOnTransferTokens( token, liquidity, amountTokenMin, amountETHMin, to, deadline ); } // **** SWAP **** // requires the initial amount to have already been sent to the first pair function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = ApeLibrary.sortTokens(input, output); uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); address to = i < path.length - 2 ? ApeLibrary.pairFor(factory, output, path[i + 2]) : _to; IApePair(ApeLibrary.pairFor(factory, input, output)).swap( amount0Out, amount1Out, to, new bytes(0) ); } } function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = ApeLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'ApeRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, ApeLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = ApeLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'ApeRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, ApeLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, 'ApeRouter: INVALID_PATH'); amounts = ApeLibrary.getAmountsOut(factory, msg.value, path); require(amounts[amounts.length - 1] >= amountOutMin, 'ApeRouter: INSUFFICIENT_OUTPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(ApeLibrary.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); } function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, 'ApeRouter: INVALID_PATH'); amounts = ApeLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'ApeRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, ApeLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, 'ApeRouter: INVALID_PATH'); amounts = ApeLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'ApeRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, ApeLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, 'ApeRouter: INVALID_PATH'); amounts = ApeLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, 'ApeRouter: EXCESSIVE_INPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(ApeLibrary.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); // refund dust eth, if any if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]); } // **** SWAP (supporting fee-on-transfer tokens) **** // requires the initial amount to have already been sent to the first pair function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = ApeLibrary.sortTokens(input, output); IApePair pair = IApePair(ApeLibrary.pairFor(factory, input, output)); uint amountInput; uint amountOutput; { // scope to avoid stack too deep errors (uint reserve0, uint reserve1,) = pair.getReserves(); (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput); amountOutput = ApeLibrary.getAmountOut(amountInput, reserveInput, reserveOutput); } (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); address to = i < path.length - 2 ? ApeLibrary.pairFor(factory, output, path[i + 2]) : _to; pair.swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { TransferHelper.safeTransferFrom( path[0], msg.sender, ApeLibrary.pairFor(factory, path[0], path[1]), amountIn ); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'ApeRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override payable ensure(deadline) { require(path[0] == WETH, 'ApeRouter: INVALID_PATH'); uint amountIn = msg.value; IWETH(WETH).deposit{value: amountIn}(); assert(IWETH(WETH).transfer(ApeLibrary.pairFor(factory, path[0], path[1]), amountIn)); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'ApeRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { require(path[path.length - 1] == WETH, 'ApeRouter: INVALID_PATH'); TransferHelper.safeTransferFrom( path[0], msg.sender, ApeLibrary.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint amountOut = IERC20(WETH).balanceOf(address(this)); require(amountOut >= amountOutMin, 'ApeRouter: INSUFFICIENT_OUTPUT_AMOUNT'); IWETH(WETH).withdraw(amountOut); TransferHelper.safeTransferETH(to, amountOut); } // **** LIBRARY FUNCTIONS **** function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) { return ApeLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountOut) { return ApeLibrary.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountIn) { return ApeLibrary.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut(uint amountIn, address[] memory path) public view virtual override returns (uint[] memory amounts) { return ApeLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint amountOut, address[] memory path) public view virtual override returns (uint[] memory amounts) { return ApeLibrary.getAmountsIn(factory, amountOut, path); } }
pragma solidity >=0.6.6; interface IApeFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
pragma solidity >=0.6.2; import './IApeRouter01.sol'; interface IApeRouter02 is IApeRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; }
pragma solidity >=0.6.2; interface IApeRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); }
pragma solidity >=0.5.0; /* * ApeSwapFinance * App: https://apeswap.finance * Medium: https://ape-swap.medium.com/ * Twitter: https://twitter.com/ape_swap * Telegram: https://t.me/ape_swap * Announcements: https://t.me/ape_swap_news * GitHub: https://github.com/ApeSwapFinance */ import '../interfaces/IApePair.sol'; import "./SafeMath.sol"; library ApeLibrary { using SafeMath for uint; // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, 'ApeLibrary: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'ApeLibrary: ZERO_ADDRESS'); } // calculates the CREATE2 address for a pair without making any external calls function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address(uint(keccak256(abi.encodePacked( hex'ff', factory, keccak256(abi.encodePacked(token0, token1)), hex'511f0f358fe530cda0859ec20becf391718fdf5a329be02f4c95361f3d6a42d8' // init code hash )))); } // fetches and sorts the reserves for a pair function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) { (address token0,) = sortTokens(tokenA, tokenB); pairFor(factory, tokenA, tokenB); (uint reserve0, uint reserve1,) = IApePair(pairFor(factory, tokenA, tokenB)).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) { require(amountA > 0, 'ApeLibrary: INSUFFICIENT_AMOUNT'); require(reserveA > 0 && reserveB > 0, 'ApeLibrary: INSUFFICIENT_LIQUIDITY'); amountB = amountA.mul(reserveB) / reserveA; } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) { require(amountIn > 0, 'ApeLibrary: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'ApeLibrary: INSUFFICIENT_LIQUIDITY'); uint amountInWithFee = amountIn.mul(998); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(1000).add(amountInWithFee); amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) { require(amountOut > 0, 'ApeLibrary: INSUFFICIENT_OUTPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'ApeLibrary: INSUFFICIENT_LIQUIDITY'); uint numerator = reserveIn.mul(amountOut).mul(1000); uint denominator = reserveOut.sub(amountOut).mul(998); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'ApeLibrary: INVALID_PATH'); amounts = new uint[](path.length); amounts[0] = amountIn; for (uint i; i < path.length - 1; i++) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut); } } // performs chained getAmountIn calculations on any number of pairs function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'ApeLibrary: INVALID_PATH'); amounts = new uint[](path.length); amounts[amounts.length - 1] = amountOut; for (uint i = path.length - 1; i > 0; i--) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut); } } }
pragma solidity >=0.6.6; interface IApePair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; }
pragma solidity =0.6.6; // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, 'ds-math-add-overflow'); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, 'ds-math-sub-underflow'); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow'); } }
pragma solidity >=0.5.0; interface IERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); }
pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; }
pragma solidity >=0.6.0; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove(address token, address to, uint value) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED'); } function safeTransfer(address token, address to, uint value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED'); } function safeTransferFrom(address token, address from, address to, uint value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED'); } function safeTransferETH(address to, uint value) internal { (bool success,) = to.call{value:value}(new bytes(0)); require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); } }
{ "metadata": { "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 999999 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Deployed Bytecode
0x60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127016146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d97565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612105565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b5080359060208101359060400135612525565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612532565b34801561096057600080fd5b50610969612671565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612695565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356126a2565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612882565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d65565b348015610b3157600080fd5b5061096961309b565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506130bf945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356130ec565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613244565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356133d3565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356136ff565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b610e86897f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf12708a8a8a308a612d65565b9093509150610e96898685613b4e565b7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613d2b565b50965096945050505050565b6000610f44848484613e68565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf12701686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f417065526f757465723a20494e56414c49445f50415448000000000000000000604482015290519081900360640190fd5b6111207f000000000000000000000000cf083be4164828f00cae704ec15a36d71149128489888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f8c92505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154646025913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f000000000000000000000000cf083be4164828f00cae704ec15a36d7114912848a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166140f2565b8560008151811061124a57fe5b60200260200101516141dd565b611296828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506143ad915050565b7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613d2b565b509695505050505050565b60606113917f000000000000000000000000cf083be4164828f00cae704ec15a36d7114912848484614634565b90505b92915050565b60008060006113ca7f000000000000000000000000cf083be4164828f00cae704ec15a36d7114912848f8f6140f2565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612d65565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b6115a87f000000000000000000000000cf083be4164828f00cae704ec15a36d71149128489888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f8c92505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154646025913960400191505060405180910390fd5b61162a868660008181106111a257fe5b611359828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506143ad915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf12701686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f417065526f757465723a20494e56414c49445f50415448000000000000000000604482015290519081900360640190fd5b61183d7f000000000000000000000000cf083be4164828f00cae704ec15a36d7114912848988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061463492505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154896021913960400191505060405180910390fd5b6000806118fa7f000000000000000000000000cf083be4164828f00cae704ec15a36d7114912848d7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf12706140f2565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d6126a2565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f000000000000000000000000cf083be4164828f00cae704ec15a36d71149128489896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a6141dd565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d6020811015611bf057600080fd5b50516040805160208881028281018201909352888252929350611c329290918991899182918501908490808284376000920191909152508892506147c2915050565b86611d368288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b505afa158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b50519063ffffffff614b5516565b1015611d8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154646025913960400191505060405180910390fd5b5050505050505050565b8042811015611e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf12701685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e6c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f417065526f757465723a20494e56414c49445f50415448000000000000000000604482015290519081900360640190fd5b611f1b85856000818110611a7e57fe5b611f598585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506147c2915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127016916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051905086811015612070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154646025913960400191505060405180910390fd5b7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505050611d8d8482613d2b565b6060814281101561217757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff16868660008181106121bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f417065526f757465723a20494e56414c49445f50415448000000000000000000604482015290519081900360640190fd5b6122b87f000000000000000000000000cf083be4164828f00cae704ec15a36d71149128434888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f8c92505050565b915086826001845103815181106122cb57fe5b6020026020010151101561232a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154646025913960400191505060405180910390fd5b7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061237357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123a657600080fd5b505af11580156123ba573d6000803e3d6000fd5b50505050507f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61242c7f000000000000000000000000cf083be4164828f00cae704ec15a36d71149128489896000818110611acd57fe5b8460008151811061243957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b50516124dc57fe5b61251b828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506143ad915050565b5095945050505050565b6000610f44848484614bc7565b606081428110156125a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b6126027f000000000000000000000000cf083be4164828f00cae704ec15a36d7114912848988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061463492505050565b9150868260008151811061261257fe5b6020026020010151111561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154896021913960400191505060405180910390fd5b7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127081565b6000610f44848484614ceb565b6000814281101561271457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b612743887f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf12708989893089612d65565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506127ed92508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b1580156127bc57600080fd5b505afa1580156127d0573d6000803e3d6000fd5b505050506040513d60208110156127e657600080fd5b5051613b4e565b7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506113598483613d2b565b80428110156128f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff168585600081811061293657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f417065526f757465723a20494e56414c49445f50415448000000000000000000604482015290519081900360640190fd5b60003490507f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a4257600080fd5b505af1158015612a56573d6000803e3d6000fd5b50505050507f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612ac87f000000000000000000000000cf083be4164828f00cae704ec15a36d71149128489896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b505050506040513d6020811015612b5c57600080fd5b5051612b6457fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b9457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2d57600080fd5b505afa158015612c41573d6000803e3d6000fd5b505050506040513d6020811015612c5757600080fd5b50516040805160208981028281018201909352898252929350612c999290918a918a9182918501908490808284376000920191909152508992506147c2915050565b87611d368289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612ccc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b6000808242811015612dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b6000612e057f000000000000000000000000cf083be4164828f00cae704ec15a36d7114912848c8c6140f2565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612e8657600080fd5b505af1158015612e9a573d6000803e3d6000fd5b505050506040513d6020811015612eb057600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6040811015612f4d57600080fd5b50805160209091015190925090506000612f678e8e614de1565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612fa4578183612fa7565b82825b90975095508a87101561301b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f417065526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b8986101561308a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f417065526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b505050505097509795505050505050565b7f000000000000000000000000cf083be4164828f00cae704ec15a36d71149128481565b60606113917f000000000000000000000000cf083be4164828f00cae704ec15a36d7114912848484613f8c565b600080600061313c7f000000000000000000000000cf083be4164828f00cae704ec15a36d7114912848e7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf12706140f2565b905060008761314b578c61316d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561320957600080fd5b505af115801561321d573d6000803e3d6000fd5b5050505061322f8e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b600080600083428110156132b957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b6132c78c8c8c8c8c8c614f4a565b909450925060006132f97f000000000000000000000000cf083be4164828f00cae704ec15a36d7114912848e8e6140f2565b90506133078d3383886141dd565b6133138c3383876141dd565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561339257600080fd5b505af11580156133a6573d6000803e3d6000fd5b505050506040513d60208110156133bc57600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561344857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b6134768a7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf12708b348c8c614f4a565b909450925060006134c87f000000000000000000000000cf083be4164828f00cae704ec15a36d7114912848c7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf12706140f2565b90506134d68b3383886141dd565b7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561353e57600080fd5b505af1158015613552573d6000803e3d6000fd5b50505050507f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135fe57600080fd5b505af1158015613612573d6000803e3d6000fd5b505050506040513d602081101561362857600080fd5b505161363057fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156136af57600080fd5b505af11580156136c3573d6000803e3d6000fd5b505050506040513d60208110156136d957600080fd5b50519250348410156136f1576136f133853403613d2b565b505096509650969350505050565b6060814281101561377157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f417065526f757465723a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff16868660008181106137b557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461385457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f417065526f757465723a20494e56414c49445f50415448000000000000000000604482015290519081900360640190fd5b6138b27f000000000000000000000000cf083be4164828f00cae704ec15a36d7114912848888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061463492505050565b915034826000815181106138c257fe5b60200260200101511115613921576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154896021913960400191505060405180910390fd5b7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061396a57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561399d57600080fd5b505af11580156139b1573d6000803e3d6000fd5b50505050507f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb613a237f000000000000000000000000cf083be4164828f00cae704ec15a36d71149128489896000818110611acd57fe5b84600081518110613a3057fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613aa157600080fd5b505af1158015613ab5573d6000803e3d6000fd5b505050506040513d6020811015613acb57600080fd5b5051613ad357fe5b613b12828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506143ad915050565b81600081518110613b1f57fe5b602002602001015134111561251b5761251b3383600081518110613b3f57fe5b60200260200101513403613d2b565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613c2457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613be7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c86576040519150601f19603f3d011682016040523d82523d6000602084013e613c8b565b606091505b5091509150818015613cb9575080511580613cb95750808060200190516020811015613cb657600080fd5b50515b613d2457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613da257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613d65565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613e04576040519150601f19603f3d011682016040523d82523d6000602084013e613e09565b606091505b5050905080613e63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154cf6023913960400191505060405180910390fd5b505050565b6000808411613ec2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154aa6025913960400191505060405180910390fd5b600083118015613ed25750600082115b613f27576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806155166022913960400191505060405180910390fd5b6000613f3b856103e663ffffffff61527716565b90506000613f4f828563ffffffff61527716565b90506000613f7583613f69886103e863ffffffff61527716565b9063ffffffff6152fd16565b9050808281613f8057fe5b04979650505050505050565b6060600282511015613fff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4170654c6962726172793a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561401757600080fd5b50604051908082528060200260200182016040528015614041578160200160208202803683370190505b509050828160008151811061405257fe5b60200260200101818152505060005b60018351038110156140ea576000806140a48786858151811061408057fe5b602002602001015187866001018151811061409757fe5b602002602001015161536f565b915091506140c68484815181106140b757fe5b60200260200101518383613e68565b8484600101815181106140d557fe5b60209081029190910101525050600101614061565b509392505050565b60008060006141018585614de1565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f511f0f358fe530cda0859ec20becf391718fdf5a329be02f4c95361f3d6a42d8609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b602083106142bb57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161427e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461431d576040519150601f19603f3d011682016040523d82523d6000602084013e614322565b606091505b5091509150818015614350575080511580614350575080806020019051602081101561434d57600080fd5b50515b6143a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806154f26024913960400191505060405180910390fd5b505050505050565b60005b600183510381101561462e576000808483815181106143cb57fe5b60200260200101518584600101815181106143e257fe5b60200260200101519150915060006143fa8383614de1565b509050600087856001018151811061440e57fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146144565782600061445a565b6000835b91509150600060028a5103881061447157886144b2565b6144b27f000000000000000000000000cf083be4164828f00cae704ec15a36d711491284878c8b600201815181106144a557fe5b60200260200101516140f2565b90506144df7f000000000000000000000000cf083be4164828f00cae704ec15a36d71149128488886140f2565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f191660200182016040528015614529576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156145b457818101518382015260200161459c565b50505050905090810190601f1680156145e15780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561460357600080fd5b505af1158015614617573d6000803e3d6000fd5b5050600190990198506143b0975050505050505050565b50505050565b60606002825110156146a757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4170654c6962726172793a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156146bf57600080fd5b506040519080825280602002602001820160405280156146e9578160200160208202803683370190505b50905082816001835103815181106146fd57fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b80156140ea5760008061475d8786600186038151811061474957fe5b602002602001015187868151811061409757fe5b9150915061477f84848151811061477057fe5b60200260200101518383614bc7565b84600185038151811061478e57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0161472d565b60005b6001835103811015613e63576000808483815181106147e057fe5b60200260200101518584600101815181106147f757fe5b602002602001015191509150600061480f8383614de1565b509050600061483f7f000000000000000000000000cf083be4164828f00cae704ec15a36d71149128485856140f2565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561488d57600080fd5b505afa1580156148a1573d6000803e3d6000fd5b505050506040513d60608110156148b757600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a811690891614614901578284614904565b83835b91509150614989828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b9550614996868383613e68565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146149da578260006149de565b6000835b91509150600060028c51038a106149f5578a614a29565b614a297f000000000000000000000000cf083be4164828f00cae704ec15a36d711491284898e8d600201815181106144a557fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614ad9578181015183820152602001614ac1565b50505050905090810190601f168015614b065780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614b2857600080fd5b505af1158015614b3c573d6000803e3d6000fd5b50506001909b019a506147c59950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411614c21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806155386026913960400191505060405180910390fd5b600083118015614c315750600082115b614c86576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806155166022913960400191505060405180910390fd5b6000614caa6103e8614c9e868863ffffffff61527716565b9063ffffffff61527716565b90506000614cc46103e6614c9e868963ffffffff614b5516565b9050614ce16001828481614cd457fe5b049063ffffffff6152fd16565b9695505050505050565b6000808411614d5b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4170654c6962726172793a20494e53554646494349454e545f414d4f554e5400604482015290519081900360640190fd5b600083118015614d6b5750600082115b614dc0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806155166022913960400191505060405180910390fd5b82614dd1858463ffffffff61527716565b81614dd857fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614e7f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4170654c6962726172793a204944454e544943414c5f41444452455353455300604482015290519081900360640190fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614eb9578284614ebc565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614f4357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4170654c6962726172793a205a45524f5f414444524553530000000000000000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f000000000000000000000000cf083be4164828f00cae704ec15a36d7114912849092169163e6a4390591604480820192602092909190829003018186803b158015614fea57600080fd5b505afa158015614ffe573d6000803e3d6000fd5b505050506040513d602081101561501457600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614156150fa57604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f000000000000000000000000cf083be4164828f00cae704ec15a36d7114912849092169163c9c65396916044808201926020929091908290030181600087803b1580156150cd57600080fd5b505af11580156150e1573d6000803e3d6000fd5b505050506040513d60208110156150f757600080fd5b50505b6000806151287f000000000000000000000000cf083be4164828f00cae704ec15a36d7114912848b8b61536f565b9150915081600014801561513a575080155b1561514a5787935086925061526a565b6000615157898484614ceb565b90508781116151da57858110156151cf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f417065526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b889450925082615268565b60006151e7898486614ceb565b9050898111156151f357fe5b8781101561526257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f417065526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b94508793505b505b5050965096945050505050565b60008115806152925750508082028282828161528f57fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b600080600061537e8585614de1565b50905061538c8686866140f2565b5060008061539b8888886140f2565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156153e057600080fd5b505afa1580156153f4573d6000803e3d6000fd5b505050506040513d606081101561540a57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff87811690841614615451578082615454565b81815b9099909850965050505050505056fe417065526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54417065526f757465723a204558434553534956455f494e5055545f414d4f554e544170654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c45444170654c6962726172793a20494e53554646494349454e545f4c49515549444954594170654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54a2646970667358221220077ac949dc8c1ea5b2f2c697f4f6715bdbc1a1195ff8f37e1a2e92d449d0c69264736f6c63430006060033
Deployed Bytecode Sourcemap
624:17687:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1069:10;:18;1083:4;1069:18;;1062:26;;;;624:17687;;12:1:-1;9;2:12;5026:653:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5026:653:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;5026:653:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17318:248;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17318:248:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17318:248:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11887:810;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11887:810:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;11887:810:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;11887:810:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;11887:810:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11887:810:0;;-1:-1:-1;11887:810:0;-1:-1:-1;11887:810:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;11887:810:0;;;;;;;;;;;;;;;;;18070:239;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18070:239:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;18070:239:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;18070:239:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;18070:239:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;18070:239:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;18070:239:0;;-1:-1:-1;18070:239:0;;-1:-1:-1;;;;;18070:239:0:i;5684:651::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5684:651:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;5684:651:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9248:597::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9248:597:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;9248:597:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;9248:597:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;9248:597:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;9248:597:0;;-1:-1:-1;9248:597:0;-1:-1:-1;9248:597:0;;;;;;;;;:::i;11094:788::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11094:788:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;11094:788:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;11094:788:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;11094:788:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11094:788:0;;-1:-1:-1;11094:788:0;-1:-1:-1;11094:788:0;;;;;;;;;:::i;7745:691::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7745:691:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;7745:691:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14781:686::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14781:686:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;14781:686:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;14781:686:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;14781:686:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;14781:686:0;;-1:-1:-1;14781:686:0;-1:-1:-1;14781:686:0;;;;;;;;;:::i;16287:804::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16287:804:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;16287:804:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;16287:804:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;16287:804:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;16287:804:0;;-1:-1:-1;16287:804:0;-1:-1:-1;16287:804:0;;;;;;;;;:::i;10430:659::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;10430:659:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;10430:659:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;10430:659:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;10430:659:0;;-1:-1:-1;10430:659:0;-1:-1:-1;10430:659:0;;;;;;;;;:::i;17572:247::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17572:247:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17572:247:0;;;;;;;;;;;;:::i;9850:575::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9850:575:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;9850:575:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;9850:575:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;9850:575:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;9850:575:0;;-1:-1:-1;9850:575:0;-1:-1:-1;9850:575:0;;;;;;;;;:::i;742:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;742:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17132:180;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17132:180:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17132:180:0;;;;;;;;;;;;:::i;7060:680::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7060:680:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;7060:680:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15472:810::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;15472:810:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;15472:810:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;15472:810:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;15472:810:0;;-1:-1:-1;15472:810:0;-1:-1:-1;15472:810:0;;;;;;;;;:::i;4208:813::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4208:813:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;4208:813:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;695:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;695:41:0;;;:::i;17825:239::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17825:239:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;17825:239:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;17825:239:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;17825:239:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;17825:239:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;17825:239:0;;-1:-1:-1;17825:239:0;;-1:-1:-1;;;;;17825:239:0:i;6340:644::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;6340:644:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;6340:644:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2513:711::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2513:711:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;2513:711:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;3229:939;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;3229:939:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12702:770::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;12702:770:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;12702:770:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;12702:770:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;12702:770:0;;-1:-1:-1;12702:770:0;-1:-1:-1;12702:770:0;;;;;;;;;:::i;5026:653::-;5256:16;5274:14;5237:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5327:188:::1;5356:5;5375:4;5393:9;5416:14;5444:12;5478:4;5497:8;5327:15;:188::i;:::-;5300:215:::0;;-1:-1:-1;5300:215:0;-1:-1:-1;5525:51:0::1;5553:5:::0;5560:2;5300:215;5525:27:::1;:51::i;:::-;5592:4;5586:20;;;5607:9;5586:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;5586:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;5586:31:0;;;;5627:45;5658:2;5662:9;5627:30;:45::i;:::-;5026:653:::0;;;;;;;;;;:::o;17318:248::-;17466:14;17503:56;17527:8;17537:9;17548:10;17503:23;:56::i;:::-;17496:63;17318:248;-1:-1:-1;;;;17318:248:0:o;11887:810::-;12096:21;12069:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12141:29:::1;12166:4;12141:29;:4:::0;;12146:15;;;12141:21;;::::1;;;;;;;;;;;;;:29;;;12133:65;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;12218:49;12243:7;12252:8;12262:4;;12218:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;12218:24:0::1;::::0;-1:-1:-1;;;12218:49:0:i:1;:::-;12208:59;;12316:12;12285:7;12310:1;12293:7;:14;:18;12285:27;;;;;;;;;;;;;;:43;;12277:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12380:133;12425:4;;12430:1;12425:7;;;;;;;;;;;;;;;12434:10;12446:45;12465:7;12474:4;;12479:1;12474:7;;;;;;;;;;;;;;;12483:4;;12488:1;12483:7;;;;;;;;;;;;;;;12446:18;:45::i;:::-;12493:7;12501:1;12493:10;;;;;;;;;;;;;;12380:31;:133::i;:::-;12523:35;12529:7;12538:4;;12523:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;12552:4:0::1;::::0;-1:-1:-1;12523:5:0::1;::::0;-1:-1:-1;;12523:35:0:i:1;:::-;12574:4;12568:20;;;12589:7;12614:1;12597:7;:14;:18;12589:27;;;;;;;;;;;;;;12568:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;12568:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;12568:49:0;;;;12627:63;12658:2;12662:7;12687:1;12670:7;:14;:18;12662:27;;;;;;;;;;;;;;12627:30;:63::i;:::-;11887:810:::0;;;;;;;;;:::o;18070:239::-;18209:21;18253:49;18277:7;18286:9;18297:4;18253:23;:49::i;:::-;18246:56;;18070:239;;;;;:::o;5684:651::-;5981:12;5995;6019;6034:43;6053:7;6062:6;6070;6034:18;:43::i;:::-;6019:58;;6087:10;6100;:33;;6124:9;6100:33;;;6118:2;6100:33;6143:74;;;;;;6165:10;6143:74;;;;6185:4;6143:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6087:46;;-1:-1:-1;6143:21:0;;;;;;:74;;;;;-1:-1:-1;;6143:74:0;;;;;;;;-1:-1:-1;6143:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;6143:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6143:74:0;;;;6248:80;6264:6;6272;6280:9;6291:10;6303;6315:2;6319:8;6248:15;:80::i;:::-;6227:101;;;;;;;;5684:651;;;;;;;;;;;;;;;;:::o;9248:597::-;9466:21;9447:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9509:49:::1;9534:7;9543:8;9553:4;;9509:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;9509:24:0::1;::::0;-1:-1:-1;;;9509:49:0:i:1;:::-;9499:59;;9607:12;9576:7;9601:1;9584:7;:14;:18;9576:27;;;;;;;;;;;;;;:43;;9568:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9671:133;9716:4;;9721:1;9716:7;;;;;;9671:133;9814:24;9820:7;9829:4;;9814:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;9835:2:0;;-1:-1:-1;9814:5:0::1;::::0;-1:-1:-1;;9814:24:0:i:1;11094:788::-:0;11303:21;11276:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11348:29:::1;11373:4;11348:29;:4:::0;;11353:15;;;11348:21;;::::1;;;;;;;;;;;;;:29;;;11340:65;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;11425:49;11449:7;11458:9;11469:4;;11425:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;11425:23:0::1;::::0;-1:-1:-1;;;11425:49:0:i:1;:::-;11415:59;;11506:11;11492:7;11500:1;11492:10;;;;;;;;;;;;;;:25;;11484:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7745:691:::0;8055:14;8081:12;8096:40;8115:7;8124:5;8131:4;8096:18;:40::i;:::-;8081:55;;8146:10;8159;:33;;8183:9;8159:33;;;8177:2;8159:33;8202:74;;;;;;8224:10;8202:74;;;;8244:4;8202:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8146:46;;-1:-1:-1;8202:21:0;;;;;;:74;;;;;-1:-1:-1;;8202:74:0;;;;;;;;-1:-1:-1;8202:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;8202:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8202:74:0;;;;8298:131;8359:5;8366:9;8377:14;8393:12;8407:2;8411:8;8298:47;:131::i;:::-;8286:143;7745:691;-1:-1:-1;;;;;;;;;;;;;7745:691:0:o;14781:686::-;15009:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15029:131:::1;15074:4;;15079:1;15074:7;;;;;;;;;;;;;;;15083:10;15095:45;15114:7;15123:4;;15128:1;15123:7;;;;;;;;;;;;;;;15132:4;;15137:1;15132:7;;;;;;15095:45;15142:8;15029:31;:131::i;:::-;15170:18;15198:4:::0;;15203:15;;;15198:21;;::::1;;;;;;;;;;;;;15191:39;;;15231:2;15191:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;15191:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;15191:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;15191:43:0;15244:44:::1;::::0;;15191:43:::1;15244:44:::0;;::::1;::::0;;;;;;;;;;;15191:43;;-1:-1:-1;15244:44:0::1;::::0;;;15279:4;;;;;;15244:44;::::1;::::0;15279:4;;15244:44;15279:4;15244:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;15285:2:0;;-1:-1:-1;15244:34:0::1;::::0;-1:-1:-1;;15244:44:0:i:1;:::-;15385:12:::0;15319:62:::1;15367:13:::0;15326:4;;15331:15;;;15326:21;;::::1;;;;;;;;;;;;;15319:39;;;15359:2;15319:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;15319:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;15319:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;15319:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;15298:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;896:1;14781:686:::0;;;;;;;:::o;16287:804::-;16544:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16576:29:::1;16601:4;16576:29;:4:::0;;16581:15;;;16576:21;;::::1;;;;;;;;;;;;;:29;;;16568:65;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;16643:131;16688:4;;16693:1;16688:7;;;;;;16643:131;16784:55;16819:4;;16784:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;16833:4:0::1;::::0;-1:-1:-1;16784:34:0::1;::::0;-1:-1:-1;;16784:55:0:i:1;:::-;16866:37;::::0;;;;;16897:4:::1;16866:37;::::0;::::1;::::0;;;16849:14:::1;::::0;16866:22:::1;16873:4;16866:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;16866:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16866:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;16866:37:0;;-1:-1:-1;16921:25:0;;::::1;;16913:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17004:4;16998:20;;;17019:9;16998:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;16998:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16998:31:0;;;;17039:45;17070:2;17074:9;17039:30;:45::i;10430:659::-:0;10640:21;10613:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10696:4:::1;10685:15;;:4;;10690:1;10685:7;;;;;;;;;;;;;;;:15;;;10677:51;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;10748:50;10773:7;10782:9;10793:4;;10748:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;10748:24:0::1;::::0;-1:-1:-1;;;10748:50:0:i:1;:::-;10738:60;;10847:12;10816:7;10841:1;10824:7;:14;:18;10816:27;;;;;;;;;;;;;;:43;;10808:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10917:4;10911:19;;;10938:7;10946:1;10938:10;;;;;;;;;;;;;;10911:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;10911:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;10911:40:0;;;;;10974:4;10968:20;;;10989:45;11008:7;11017:4;;11022:1;11017:7;;;;;;10989:45;11036:7;11044:1;11036:10;;;;;;;;;;;;;;10968:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;10968:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;10968:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;10968:79:0;10961:87:::1;;;;11058:24;11064:7;11073:4;;11058:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;11079:2:0;;-1:-1:-1;11058:5:0::1;::::0;-1:-1:-1;;11058:24:0:i:1;:::-;10430:659:::0;;;;;;;;:::o;17572:247::-;17720:13;17756:56;17779:9;17790;17801:10;17756:22;:56::i;9850:575::-;10068:21;10049:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10111:49:::1;10135:7;10144:9;10155:4;;10111:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;10111:23:0::1;::::0;-1:-1:-1;;;10111:49:0:i:1;:::-;10101:59;;10192:11;10178:7;10186:1;10178:10;;;;;;;;;;;;;;:25;;10170:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:38:::0;;;:::o;17132:180::-;17229:12;17260:45;17277:7;17286:8;17296;17260:16;:45::i;7060:680::-;7319:14;7300:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7361:188:::1;7390:5;7409:4;7427:9;7450:14;7478:12;7512:4;7531:8;7361:15;:188::i;:::-;7598:38;::::0;;;;;7630:4:::1;7598:38;::::0;::::1;::::0;;;7345:204;;-1:-1:-1;7559:78:0::1;::::0;-1:-1:-1;7587:5:0;;7594:2;;7598:23:::1;::::0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;7598:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;7598:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;7598:38:0;7559:27:::1;:78::i;:::-;7653:4;7647:20;;;7668:9;7647:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;7647:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;7647:31:0;;;;7688:45;7719:2;7723:9;7688:30;:45::i;15472:810::-:0;15722:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15765:4:::1;15754:15;;:4;;15759:1;15754:7;;;;;;;;;;;;;;;:15;;;15746:51;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;15807:13;15823:9;15807:25;;15848:4;15842:19;;;15869:8;15842:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;15842:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;15842:38:0;;;;;15903:4;15897:20;;;15918:45;15937:7;15946:4;;15951:1;15946:7;;;;;;15918:45;15965:8;15897:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;15897:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;15897:77:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;15897:77:0;15890:85:::1;;;;15985:18;16013:4:::0;;16018:15;;;16013:21;;::::1;;;;;;;;;;;;;16006:39;;;16046:2;16006:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;16006:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16006:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;16006:43:0;16059:44:::1;::::0;;16006:43:::1;16059:44:::0;;::::1;::::0;;;;;;;;;;;16006:43;;-1:-1:-1;16059:44:0::1;::::0;;;16094:4;;;;;;16059:44;::::1;::::0;16094:4;;16059:44;16094:4;16059:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;16100:2:0;;-1:-1:-1;16059:34:0::1;::::0;-1:-1:-1;;16059:44:0:i:1;:::-;16200:12:::0;16134:62:::1;16182:13:::0;16141:4;;16146:15;;;16141:21;;::::1;;;;;;;;;;;;;16134:39;;;16174:2;16134:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;4208:813:0::0;4454:12;4468;4435:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4492:12:::1;4507:43;4526:7;4535:6;4543;4507:18;:43::i;:::-;4560:56;::::0;;;;;4588:10:::1;4560:56;::::0;::::1;::::0;:27:::1;::::0;::::1;:56:::0;;;;;;;;;;;;;;4492:58;;-1:-1:-1;4560:27:0;;::::1;::::0;:56;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;4560:27:0;:56;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;4560:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;4560:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;4683:23:0::1;::::0;;;;;:19:::1;:23:::0;;::::1;;::::0;::::1;::::0;;;4653:12:::1;::::0;;;4683:19;;::::1;::::0;::::1;::::0;:23;;;;;;;;;;;4653:12;4683:19;:23;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;4683:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;4683:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;4683:23:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;4683:23:0;-1:-1:-1;4717:14:0::1;4736:37;4758:6:::0;4766;4736:21:::1;:37::i;:::-;4716:57;;;4814:6;4804:16;;:6;:16;;;:58;;4845:7;4854;4804:58;;;4824:7;4833;4804:58;4783:79:::0;;-1:-1:-1;4783:79:0;-1:-1:-1;4880:21:0;;::::1;;4872:66;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;4967:10;4956:7;:21;;4948:66;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;896:1;;;;4208:813:::0;;;;;;;;;;;:::o;695:41::-;;;:::o;17825:239::-;17964:21;18008:49;18033:7;18042:8;18052:4;18008:24;:49::i;6340:644::-;6621:16;6639:14;6665:12;6680:40;6699:7;6708:5;6715:4;6680:18;:40::i;:::-;6665:55;;6730:10;6743;:33;;6767:9;6743:33;;;6761:2;6743:33;6786:74;;;;;;6808:10;6786:74;;;;6828:4;6786:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6730:46;;-1:-1:-1;6786:21:0;;;;;;:74;;;;;-1:-1:-1;;6786:74:0;;;;;;;;-1:-1:-1;6786:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;6786:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6786:74:0;;;;6897:80;6916:5;6923:9;6934:14;6950:12;6964:2;6968:8;6897:18;:80::i;:::-;6870:107;;;;-1:-1:-1;6340:644:0;-1:-1:-1;;;;;;;;;;;;;6340:644:0:o;2513:711::-;2792:12;2806;2820:14;2773:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2867:85:::1;2881:6;2889;2897:14;2913;2929:10;2941;2867:13;:85::i;:::-;2846:106:::0;;-1:-1:-1;2846:106:0;-1:-1:-1;2962:12:0::1;2977:43;2996:7;3005:6:::0;3013;2977:18:::1;:43::i;:::-;2962:58;;3030:66;3062:6;3070:10;3082:4;3088:7;3030:31;:66::i;:::-;3106;3138:6;3146:10;3158:4;3164:7;3106:31;:66::i;:::-;3203:4;3194:19;;;3214:2;3194:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3194:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3194:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;3194:23:0;2513:711;;;;-1:-1:-1;3194:23:0;;-1:-1:-1;2513:711:0;;-1:-1:-1;;;;;;;;;2513:711:0:o;3229:939::-;3475:16;3493:14;3509;3456:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3562:169:::1;3589:5;3608:4;3626:18;3658:9;3681:14;3709:12;3562:13;:169::i;:::-;3535:196:::0;;-1:-1:-1;3535:196:0;-1:-1:-1;3741:12:0::1;3756:40;3775:7;3784:5:::0;3791:4:::1;3756:18;:40::i;:::-;3741:55;;3806:69;3838:5;3845:10;3857:4;3863:11;3806:31;:69::i;:::-;3891:4;3885:19;;;3912:9;3885:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3885:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3885:39:0;;;;;3947:4;3941:20;;;3962:4;3968:9;3941:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3941:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3941:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;3941:37:0;3934:45:::1;;;;4010:4;4001:19;;;4021:2;4001:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;4001:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;4001:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;4001:23:0;;-1:-1:-1;4073:9:0::1;:21:::0;-1:-1:-1;4069:92:0::1;;;4096:65;4127:10;4151:9;4139;:21;4096:30;:65::i;:::-;896:1;3229:939:::0;;;;;;;;;;;:::o;12702:770::-;12909:21;12882:8;848:15;836:8;:27;;828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12965:4:::1;12954:15;;:4;;12959:1;12954:7;;;;;;;;;;;;;;;:15;;;12946:51;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;13017:49;13041:7;13050:9;13061:4;;13017:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;13017:23:0::1;::::0;-1:-1:-1;;;13017:49:0:i:1;:::-;13007:59;;13098:9;13084:7;13092:1;13084:10;;;;;;;;;;;;;;:23;;13076:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13161:4;13155:19;;;13182:7;13190:1;13182:10;;;;;;;;;;;;;;13155:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13155:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13155:40:0;;;;;13218:4;13212:20;;;13233:45;13252:7;13261:4;;13266:1;13261:7;;;;;;13233:45;13280:7;13288:1;13280:10;;;;;;;;;;;;;;13212:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13212:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13212:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;13212:79:0;13205:87:::1;;;;13302:24;13308:7;13317:4;;13302:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;13323:2:0;;-1:-1:-1;13302:5:0::1;::::0;-1:-1:-1;;13302:24:0:i:1;:::-;13387:7;13395:1;13387:10;;;;;;;;;;;;;;13375:9;:22;13371:94;;;13399:66;13430:10;13454:7;13462:1;13454:10;;;;;;;;;;;;;;13442:9;:22;13399:30;:66::i;526:357:9:-:0;719:45;;;708:10;719:45;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;719:45:9;;;;;;;25:18:-1;;61:17;;96:58;182:15;719:45:9;179:29:-1;160:49;;708:57:9;;;;673:12;;687:17;;708:10;;;;719:45;708:57;;;25:18:-1;708:57:9;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;708:57:9;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;672:93:9;;;;783:7;:57;;;;-1:-1:-1;795:11:9;;:16;;:44;;;826:4;815:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;815:24:9;795:44;775:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;526:357;;;;;:::o;1293:192::-;1400:12;;;1362;1400;;;;;;;;;1379:7;;;;1393:5;;1379:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1379:34:9;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1361:52:9;;;1431:7;1423:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1293:192;;;:::o;2461:498:7:-;2554:14;2599:1;2588:8;:12;2580:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2672:1;2660:9;:13;:31;;;;;2690:1;2677:10;:14;2660:31;2652:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2740:20;2763:17;:8;2776:3;2763:17;:12;:17;:::i;:::-;2740:40;-1:-1:-1;2790:14:7;2807:31;2740:40;2827:10;2807:31;:19;:31;:::i;:::-;2790:48;-1:-1:-1;2848:16:7;2867:40;2891:15;2867:19;:9;2881:4;2867:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;2848:59;;2941:11;2929:9;:23;;;;;;;2461:498;-1:-1:-1;;;;;;;2461:498:7:o;3610:497::-;3711:21;3767:1;3752:4;:11;:16;;3744:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3828:4;:11;3817:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3817:23:7;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;3817:23:7;;3807:33;;3863:8;3850:7;3858:1;3850:10;;;;;;;;;;;;;:21;;;;;3886:6;3881:220;3912:1;3898:4;:11;:15;3894:1;:19;3881:220;;;3935:14;3951:15;3970:42;3982:7;3991:4;3996:1;3991:7;;;;;;;;;;;;;;4000:4;4005:1;4009;4005:5;4000:11;;;;;;;;;;;;;;3970;:42::i;:::-;3934:78;;;;4043:47;4056:7;4064:1;4056:10;;;;;;;;;;;;;;4068:9;4079:10;4043:12;:47::i;:::-;4026:7;4034:1;4038;4034:5;4026:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;3915:3:7;;3881:220;;;;3610:497;;;;;:::o;983:466::-;1072:12;1097:14;1113;1131:26;1142:6;1150;1131:10;:26::i;:::-;1291:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;1291:32:7;;;;;1281:43;;;;;;1197:242;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1197:242:7;;;;;;;1187:253;;;;;;;;;983:466;-1:-1:-1;;;;;983:466:7:o;889:398:9:-;1112:51;;;1101:10;1112:51;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1112:51:9;;;;;;;25:18:-1;;61:17;;96:58;182:15;1112:51:9;179:29:-1;160:49;;1101:63:9;;;;1066:12;;1080:17;;1101:10;;;;1112:51;1101:63;;;25:18:-1;1101:63:9;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1101:63:9;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1065:99:9;;;;1182:7;:57;;;;-1:-1:-1;1194:11:9;;:16;;:44;;;1225:4;1214:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1214:24:9;1194:44;1174:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;889:398;;;;;;:::o;8543:700:0:-;8649:6;8644:593;8675:1;8661:4;:11;:15;8657:1;:19;8644:593;;;8698:13;8713:14;8732:4;8737:1;8732:7;;;;;;;;;;;;;;8741:4;8746:1;8750;8746:5;8741:11;;;;;;;;;;;;;;8697:56;;;;8768:14;8787:36;8809:5;8816:6;8787:21;:36::i;:::-;8767:56;;;8837:14;8854:7;8862:1;8866;8862:5;8854:14;;;;;;;;;;;;;;8837:31;;8883:15;8900;8928:6;8919:15;;:5;:15;;;:61;;8961:9;8977:1;8919:61;;;8943:1;8947:9;8919:61;8882:98;;;;8994:10;9025:1;9011:4;:11;:15;9007:1;:19;:76;;9080:3;9007:76;;;9029:48;9048:7;9057:6;9065:4;9070:1;9074;9070:5;9065:11;;;;;;;;;;;;;;9029:18;:48::i;:::-;8994:89;;9106:42;9125:7;9134:5;9141:6;9106:18;:42::i;:::-;9097:57;;;9172:10;9184;9196:2;9210:1;9200:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;9200:12:0;87:42:-1;143:17;;-1:-1;9200:12:0;;9097:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9097:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9097:129:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;8678:3:0;;;;;-1:-1:-1;8644:593:0;;-1:-1:-1;;;;;;;;8644:593:0;;;8543:700;;;:::o;4185:518:7:-;4286:21;4342:1;4327:4;:11;:16;;4319:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4403:4;:11;4392:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4392:23:7;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;4392:23:7;;4382:33;;4455:9;4425:7;4450:1;4433:7;:14;:18;4425:27;;;;;;;;;;;;;;;;;:39;4488:11;;:15;;4474:223;4505:5;;4474:223;;4532:14;4548:15;4567:42;4579:7;4588:4;4597:1;4593;:5;4588:11;;;;;;;;;;;;;;4601:4;4606:1;4601:7;;;;;;;4567:42;4531:78;;;;4640:46;4652:7;4660:1;4652:10;;;;;;;;;;;;;;4664:9;4675:10;4640:11;:46::i;:::-;4623:7;4635:1;4631;:5;4623:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;4512:3:7;;4474:223;;13615:1161:0;13727:6;13722:1048;13753:1;13739:4;:11;:15;13735:1;:19;13722:1048;;;13776:13;13791:14;13810:4;13815:1;13810:7;;;;;;;;;;;;;;13819:4;13824:1;13828;13824:5;13819:11;;;;;;;;;;;;;;13775:56;;;;13846:14;13865:36;13887:5;13894:6;13865:21;:36::i;:::-;13845:56;;;13915:13;13940:42;13959:7;13968:5;13975:6;13940:18;:42::i;:::-;13915:68;;13997:16;14027:17;14113:13;14128;14146:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14146:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14146:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14146:18:0;;;;;;;14112:52;;;;;-1:-1:-1;14112:52:0;;-1:-1:-1;14179:17:0;;14220:15;;;;;;;;:61;;14262:8;14272;14220:61;;;14239:8;14249;14220:61;14178:103;;;;14309:56;14352:12;14316:5;14309:23;;;14341:4;14309:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;14309:56:0;14295:70;;14394:65;14418:11;14431:12;14445:13;14394:23;:65::i;:::-;14379:80;;13722:1048;;;;14488:15;14505;14533:6;14524:15;;:5;:15;;;:67;;14569:12;14588:1;14524:67;;;14548:1;14552:12;14524:67;14487:104;;;;14605:10;14636:1;14622:4;:11;:15;14618:1;:19;:76;;14691:3;14618:76;;;14640:48;14659:7;14668:6;14676:4;14681:1;14685;14681:5;14676:11;;;;;;;14640:48;14746:12;;;14756:1;14746:12;;;;;;;;;;14708:51;;;;;;;;;;;;;;;:9;:51;;;;;;;;;;;;;;;;;;;;;;14605:89;;-1:-1:-1;14708:9:0;;;;;;14718:10;;14730;;14605:89;;14746:12;;14708:51;;;;;;;;14746:12;;14708:51;;;;14746:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;14708:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14708:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;13756:3:0;;;;;-1:-1:-1;13722:1048:0;;-1:-1:-1;;;;;;;;;;13722:1048:0;286:127:8;369:5;;;364:16;;;;356:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3077:454:7;3170:13;3215:1;3203:9;:13;3195:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3289:1;3277:9;:13;:31;;;;;3307:1;3294:10;:14;3277:31;3269:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3357:14;3374:34;3403:4;3374:24;:9;3388;3374:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;3357:51;-1:-1:-1;3418:16:7;3437:34;3467:3;3437:25;:10;3452:9;3437:25;:14;:25;:::i;:34::-;3418:53;;3492:32;3522:1;3505:11;3493:9;:23;;;;;;;3492:32;:29;:32;:::i;:::-;3481:43;3077:454;-1:-1:-1;;;;;;3077:454:7:o;2037:305::-;2119:12;2161:1;2151:7;:11;2143:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2227:1;2216:8;:12;:28;;;;;2243:1;2232:8;:12;2216:28;2208:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2327:8;2303:21;:7;2315:8;2303:21;:11;:21;:::i;:::-;:32;;;;;;;2037:305;-1:-1:-1;;;;2037:305:7:o;561:333::-;636:14;652;696:6;686:16;;:6;:16;;;;678:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;776:6;767:15;;:6;:15;;;:53;;805:6;813;767:53;;;786:6;794;767:53;748:72;;-1:-1:-1;748:72:7;-1:-1:-1;838:20:7;;;830:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;561:333;;;;;:::o;1187:1321:0:-;1491:44;;;;;;:58;:44;;;;;;;;;;;;;;;;1398:12;;;;;;1503:7;1491:28;;;;;;:44;;;;;;;;;;;;;;;:28;:44;;;2:2:-1;;;;27:1;24;17:12;2:2;1491:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1491:44:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1491:44:0;:58;;;1487:136;;;1565:47;;;;;;:31;:47;;;;;;;;;;;;;;;;1577:7;1565:31;;;;;;:47;;;;;;;;;;;;;;;-1:-1:-1;1565:31:0;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;1565:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1565:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;1487:136:0;1633:13;1648;1665:47;1688:7;1697:6;1705;1665:22;:47::i;:::-;1632:80;;;;1726:8;1738:1;1726:13;:30;;;;-1:-1:-1;1743:13:0;;1726:30;1722:780;;;1794:14;;-1:-1:-1;1810:14:0;;-1:-1:-1;1722:780:0;;;1856:19;1878:52;1895:14;1911:8;1921;1878:16;:52::i;:::-;1856:74;;1966:14;1948;:32;1944:548;;2026:10;2008:14;:28;;2000:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2113:14;;-1:-1:-1;2129:14:0;-1:-1:-1;2129:14:0;1944:548;;;2183:19;2205:52;2222:14;2238:8;2248;2205:16;:52::i;:::-;2183:74;;2300:14;2282;:32;;2275:40;;;;2359:10;2341:14;:28;;2333:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2446:14;-1:-1:-1;2462:14:0;;-1:-1:-1;1944:548:0;1722:780;;1187:1321;;;;;;;;;;;:::o;419:140:8:-;471:6;497;;;:30;;-1:-1:-1;;512:5:8;;;526:1;521;512:5;521:1;507:15;;;;;:20;497:30;489:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;154:126;237:5;;;232:16;;;;224:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1504:423:7;1597:13;1612;1638:14;1657:26;1668:6;1676;1657:10;:26::i;:::-;1637:46;;;1693:32;1701:7;1710:6;1718;1693:7;:32::i;:::-;;1736:13;1751;1778:32;1786:7;1795:6;1803;1778:7;:32::i;:::-;1769:54;;;:56;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1769:56:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1769:56:7;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1769:56:7;;;;;;;1735:90;;;;;-1:-1:-1;1735:90:7;;-1:-1:-1;1858:16:7;;;;;;;;:62;;1901:8;1911;1858:62;;;1878:8;1888;1858:62;1835:85;;;;-1:-1:-1;1504:423:7;-1:-1:-1;;;;;;;1504:423:7:o
Swarm Source
ipfs://077ac949dc8c1ea5b2f2c697f4f6715bdbc1a1195ff8f37e1a2e92d449d0c692
Loading...LoadingLoading...Loading
Loading...Loading
Loading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...Loading[ Download: CSV Export ][ Download: CSV Export ]A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.
Address QR Code
My Address - Private Name Tag or Note
My Name Tag:
Private Name Tags (up to 35 characters) can be used for easy identification of addressesPrivate Note:
A private note (up to 500 characters) can be attached to this address.
Please DO NOT store any passwords or private keys here.Compiler specific version warnings:
The compiled contract might be susceptible to MissingSideEffectsOnSelectorAccess (low-severity), AbiReencodingHeadOverflowWithStaticArrayCleanup (medium-severity), DirtyBytesArrayToStorage (low-severity), NestedCalldataArrayAbiReencodingSizeValidation (very low-severity), SignedImmutables (very low-severity), ABIDecodeTwoDimensionalArrayMemory (very low-severity), KeccakCaching (medium-severity), EmptyByteArrayCopy (medium-severity), DynamicArrayCleanup (medium-severity), MissingEscapingInFormatting (very low-severity), ArraySliceDynamicallyEncodedBaseType (very low-severity), ImplicitConstructorCallvalueCheck (very low-severity) Solidity Compiler Bugs.
Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Before You Copy
Transaction Private Note
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.