From 34f449d64a747a92f2c23eb7443c8b3c14ddb1d5 Mon Sep 17 00:00:00 2001 From: Oskar Karcz Date: Wed, 11 May 2022 16:07:58 +0200 Subject: [PATCH 01/11] feat: add protocol fee split feature --- contracts/DXswapFeeReceiver.sol | 228 +++++++++++++++++++++++--------- 1 file changed, 166 insertions(+), 62 deletions(-) diff --git a/contracts/DXswapFeeReceiver.sol b/contracts/DXswapFeeReceiver.sol index 04aa04dc2..daf66f7b3 100644 --- a/contracts/DXswapFeeReceiver.sol +++ b/contracts/DXswapFeeReceiver.sol @@ -6,18 +6,33 @@ import './interfaces/IWETH.sol'; import './libraries/TransferHelper.sol'; import './libraries/SafeMath.sol'; - contract DXswapFeeReceiver { - using SafeMath for uint; + using SafeMath for uint256; address public owner; IDXswapFactory public factory; address public WETH; address public ethReceiver; address public fallbackReceiver; + uint32 public maxSwapPriceImpact = 100; // uses default 1% as max allowed price impact for takeProtocolFee swap + + // if needed set address of external project which can get % of total earned protocol fee + // % of total protocol fee to external project (100 means 1%) is within the range <0, 50> + struct ExternalFeeReceiver { + address externalReceiver; + uint32 feePercentage; + } + + mapping(address => ExternalFeeReceiver) public externalFeeReceivers; + + event TakeProtocolFee(address indexed sender, address indexed to, uint256 NumberOfPairs); constructor( - address _owner, address _factory, address _WETH, address _ethReceiver, address _fallbackReceiver + address _owner, + address _factory, + address _WETH, + address _ethReceiver, + address _fallbackReceiver ) public { owner = _owner; factory = IDXswapFactory(_factory); @@ -25,32 +40,36 @@ contract DXswapFeeReceiver { ethReceiver = _ethReceiver; fallbackReceiver = _fallbackReceiver; } - + function() external payable {} + // called by the owner to set the new owner function transferOwnership(address newOwner) external { require(msg.sender == owner, 'DXswapFeeReceiver: FORBIDDEN'); owner = newOwner; } - + + // called by the owner to change receivers addresses function changeReceivers(address _ethReceiver, address _fallbackReceiver) external { require(msg.sender == owner, 'DXswapFeeReceiver: FORBIDDEN'); ethReceiver = _ethReceiver; fallbackReceiver = _fallbackReceiver; } - + // 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, 'DXswapFeeReceiver: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'DXswapFeeReceiver: ZERO_ADDRESS'); } - + // Helper function to know if an address is a contract, extcodesize returns the size of the code of a smart // contract in a specific address - function isContract(address addr) internal returns (bool) { - uint size; - assembly { size := extcodesize(addr) } + function isContract(address addr) internal view returns (bool) { + uint256 size; + assembly { + size := extcodesize(addr) + } return size > 0; } @@ -58,70 +77,155 @@ contract DXswapFeeReceiver { // Taken from DXswapLibrary, removed the factory parameter function pairFor(address tokenA, address tokenB) internal view 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'd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776' // init code hash - )))); + pair = address( + uint256( + keccak256( + abi.encodePacked( + hex'ff', + factory, + keccak256(abi.encodePacked(token0, token1)), + hex'd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776' // init code hash + ) + ) + ) + ); } - + // Done with code form DXswapRouter and DXswapLibrary, removed the deadline argument - function _swapTokensForETH(uint amountIn, address fromToken) - internal - { + function _swapTokensForETH(uint256 amountIn, address fromToken) internal returns (uint256 amountOut) { IDXswapPair pairToUse = IDXswapPair(pairFor(fromToken, WETH)); - - (uint reserve0, uint reserve1,) = pairToUse.getReserves(); - (uint reserveIn, uint reserveOut) = fromToken < WETH ? (reserve0, reserve1) : (reserve1, reserve0); - - require(reserveIn > 0 && reserveOut > 0, 'DXswapFeeReceiver: INSUFFICIENT_LIQUIDITY'); - uint amountInWithFee = amountIn.mul(uint(10000).sub(pairToUse.swapFee())); - uint numerator = amountInWithFee.mul(reserveOut); - uint denominator = reserveIn.mul(10000).add(amountInWithFee); - uint amountOut = numerator / denominator; - - TransferHelper.safeTransfer( - fromToken, address(pairToUse), amountIn - ); - - (uint amount0Out, uint amount1Out) = fromToken < WETH ? (uint(0), amountOut) : (amountOut, uint(0)); - - pairToUse.swap( - amount0Out, amount1Out, address(this), new bytes(0) - ); - - IWETH(WETH).withdraw(amountOut); - TransferHelper.safeTransferETH(ethReceiver, amountOut); + + (uint256 reserve0, uint256 reserve1, ) = pairToUse.getReserves(); + (uint256 reserveIn, uint256 reserveOut) = fromToken < WETH ? (reserve0, reserve1) : (reserve1, reserve0); + + require(reserveIn > 0 && reserveOut > 0, 'DXswapFeeReceiver: INSUFFICIENT_LIQUIDITY'); // should never happen since pool was checked before + uint256 amountInWithFee = amountIn.mul(uint256(10000).sub(pairToUse.swapFee())); + uint256 numerator = amountInWithFee.mul(reserveOut); + uint256 denominator = reserveIn.mul(10000).add(amountInWithFee); + amountOut = numerator / denominator; + + TransferHelper.safeTransfer(fromToken, address(pairToUse), amountIn); + + (uint256 amount0Out, uint256 amount1Out) = fromToken < WETH ? (uint256(0), amountOut) : (amountOut, uint256(0)); + + pairToUse.swap(amount0Out, amount1Out, address(this), new bytes(0)); } - // Transfer to the owner address the token converted into ETH if possible, if not just transfer the token. - function _takeETHorToken(address token, uint amount) internal { - if (token == WETH) { - // If it is WETH, transfer directly to ETH receiver - IWETH(WETH).withdraw(amount); - TransferHelper.safeTransferETH(ethReceiver, amount); - } else if (isContract(pairFor(token, WETH))) { - // If it is not WETH and there is a direct path to WETH, swap and transfer WETH to ETH receiver - _swapTokensForETH(amount, token); - } else { - // If it is not WETH and there is not a direct path to WETH, transfer tokens directly to fallback receiver - TransferHelper.safeTransfer(token, fallbackReceiver, amount); - } + // Helper function to know if token-WETH pool exists and has enough liquidity + function _isSwapPossible( + address token0, + address token1, + uint256 amount + ) internal view returns (bool) { + address pair = pairFor(token0, token1); + if (!isContract(pair)) return false; + + (uint256 reserve0, uint256 reserve1, ) = IDXswapPair(pair).getReserves(); + (uint256 reserveIn, uint256 reserveOut) = token0 < token1 ? (reserve0, reserve1) : (reserve1, reserve0); + if (reserveIn == 0 || reserveOut == 0) return false; + + uint256 priceImpact = amount.mul(10000) / reserveIn; // simplified formula + if (priceImpact > maxSwapPriceImpact) return false; + + return true; + } + + // Checks if LP has an extra external address which participates in the distrubution of protocol fee + // External Receiver address has to be defined and fee % > 0 to transfer tokens + function _splitAndTransferFee( + address pair, + address token, + uint256 amount + ) internal { + address _externalFeeReceiver = externalFeeReceivers[pair].externalReceiver; + uint32 _percentFeeToExternalReceiver = externalFeeReceivers[pair].feePercentage; + + if (_percentFeeToExternalReceiver > 0 && _externalFeeReceiver != address(0)) { + uint256 feeToExternalReceiver = amount.mul(_percentFeeToExternalReceiver) / 10000; + uint256 feeToAvatarDAO = amount.sub(feeToExternalReceiver); + if (token == WETH) { + IWETH(WETH).withdraw(amount); + TransferHelper.safeTransferETH(_externalFeeReceiver, feeToExternalReceiver); + TransferHelper.safeTransferETH(ethReceiver, feeToAvatarDAO); + } else { + TransferHelper.safeTransfer(token, _externalFeeReceiver, feeToExternalReceiver); + TransferHelper.safeTransfer(token, fallbackReceiver, feeToAvatarDAO); + } + } else { + if (token == WETH) { + IWETH(WETH).withdraw(amount); + TransferHelper.safeTransferETH(ethReceiver, amount); + } else { + TransferHelper.safeTransfer(token, fallbackReceiver, amount); + } + } + } + + // Convert tokens into ETH if possible, if not just transfer the token + function _takeTokenOrETH( + address pair, + address token, + uint256 amount + ) internal { + if (token != WETH && _isSwapPossible(token, WETH, amount)) { + // If it is not WETH and there is a direct path to WETH, swap tokens + uint256 amountOut = _swapTokensForETH(amount, token); + _splitAndTransferFee(pair, WETH, amountOut); + } else { + // If it is WETH or there is not a direct path from token to WETH, transfer tokens + _splitAndTransferFee(pair, token, amount); + } } - + // Take what was charged as protocol fee from the DXswap pair liquidity function takeProtocolFee(IDXswapPair[] calldata pairs) external { - for (uint i = 0; i < pairs.length; i++) { + for (uint256 i = 0; i < pairs.length; i++) { address token0 = pairs[i].token0(); address token1 = pairs[i].token1(); pairs[i].transfer(address(pairs[i]), pairs[i].balanceOf(address(this))); - (uint amount0, uint amount1) = pairs[i].burn(address(this)); - if (amount0 > 0) - _takeETHorToken(token0, amount0); - if (amount1 > 0) - _takeETHorToken(token1, amount1); + (uint256 amount0, uint256 amount1) = pairs[i].burn(address(this)); + if (amount0 > 0) _takeTokenOrETH(address(pairs[i]), token0, amount0); + if (amount1 > 0) _takeTokenOrETH(address(pairs[i]), token1, amount1); } + emit TakeProtocolFee(msg.sender, ethReceiver, pairs.length); + } + + // called by the owner to set maximum swap price impact allowed for single token-weth swap (within 0-100% range) + function setMaxSwapPriceImpact(uint32 _maxSwapPriceImpact) external { + require(msg.sender == owner, 'DXswapFeeReceiver: CALLER_NOT_OWNER'); + require(_maxSwapPriceImpact > 0 && _maxSwapPriceImpact < 10000, 'DXswapFeeReceiver: FORBIDDEN_PRICE_IMPACT'); + maxSwapPriceImpact = _maxSwapPriceImpact; + } + + // called by the owner to set external fee receiver address + function setExternalFeeReceiver(address _pair, address _externalReceiver) external { + require(msg.sender == owner, 'DXswapFeeReceiver: CALLER_NOT_OWNER'); + externalFeeReceivers[_pair].externalReceiver = _externalReceiver; } + // called by the owner to set fee percentage to external receiver + function setFeePercentageToExternalReceiver(address _pair, uint32 _feePercentageToExternalReceiver) external { + require(msg.sender == owner, 'DXswapFeeReceiver: CALLER_NOT_OWNER'); + IDXswapPair swapPair = IDXswapPair(_pair); + uint256 feeReceiverBalance = swapPair.balanceOf(address(this)); + if (feeReceiverBalance > 0) { + // withdraw accumulated fees before updating the split percentage + address token0 = swapPair.token0(); + address token1 = swapPair.token1(); + swapPair.transfer(address(swapPair), feeReceiverBalance); + (uint256 amount0, uint256 amount1) = swapPair.burn(address(this)); + if (amount0 > 0) _takeTokenOrETH(address(swapPair), token0, amount0); + if (amount1 > 0) _takeTokenOrETH(address(swapPair), token1, amount1); + emit TakeProtocolFee(msg.sender, ethReceiver, 1); + } + require(swapPair.balanceOf(address(this)) == 0, 'DXswapFeeReceiver: TOKENS_NOT_BURNED'); + + // fee percentage check + require( + _feePercentageToExternalReceiver >= 0 && _feePercentageToExternalReceiver <= 5000, + 'DXswapFeeReceiver: FORBIDDEN_FEE_PERCENTAGE_SPLIT' + ); + // update the split percentage for specific pair + externalFeeReceivers[_pair].feePercentage = _feePercentageToExternalReceiver; + } } From 76a95eb221dbc6720ecbb278f43eb83aa041574f Mon Sep 17 00:00:00 2001 From: Oskar Karcz Date: Wed, 11 May 2022 16:18:41 +0200 Subject: [PATCH 02/11] test: feeReceiver split fee --- test/DXswapFeeReceiver.spec.ts | 1632 +++++++++++++++++++++++++++----- test/shared/fixtures.ts | 49 +- 2 files changed, 1421 insertions(+), 260 deletions(-) diff --git a/test/DXswapFeeReceiver.spec.ts b/test/DXswapFeeReceiver.spec.ts index 05eb4cc23..a28cca625 100644 --- a/test/DXswapFeeReceiver.spec.ts +++ b/test/DXswapFeeReceiver.spec.ts @@ -25,30 +25,33 @@ describe('DXswapFeeReceiver', () => { const provider = new MockProvider({ hardfork: 'istanbul', mnemonic: 'horn horn horn horn horn horn horn horn horn horn horn horn', - gasLimit: 9999999 + gasLimit: 15000000 }) const overrides = { - gasLimit: 9999999 + gasLimit: 15000000 } - const [dxdao, wallet, protocolFeeReceiver, other] = provider.getWallets() + const [dxdao, wallet, protocolFeeReceiver, other, externalFeeReceiver] = provider.getWallets() const loadFixture = createFixtureLoader(provider, [dxdao, wallet, protocolFeeReceiver]) - + async function getAmountOut(pair: Contract, tokenIn: string, amountIn: BigNumber) { - const [ reserve0, reserve1 ] = await pair.getReserves() + const [reserve0, reserve1] = await pair.getReserves() const token0 = await pair.token0() return getAmountOutSync(reserve0, reserve1, token0 === tokenIn, amountIn, await pair.swapFee()) } - + function getAmountOutSync( - reserve0: BigNumber, reserve1: BigNumber, usingToken0: boolean, amountIn: BigNumber, swapFee: BigNumber + reserve0: BigNumber, + reserve1: BigNumber, + usingToken0: boolean, + amountIn: BigNumber, + swapFee: BigNumber ) { const tokenInBalance = usingToken0 ? reserve0 : reserve1 - const tokenOutBalance = usingToken0? reserve1 : reserve0 + const tokenOutBalance = usingToken0 ? reserve1 : reserve0 const amountInWithFee = amountIn.mul(FEE_DENOMINATOR.sub(swapFee)) - return amountInWithFee.mul(tokenOutBalance) - .div(tokenInBalance.mul(FEE_DENOMINATOR).add(amountInWithFee)) + return amountInWithFee.mul(tokenOutBalance).div(tokenInBalance.mul(FEE_DENOMINATOR).add(amountInWithFee)) } - + // Calculate how much will be payed from liquidity as protocol fee in the next mint/burn async function calcProtocolFee(pair: Contract) { const [token0Reserve, token1Reserve, _] = await pair.getReserves() @@ -56,32 +59,30 @@ describe('DXswapFeeReceiver', () => { const feeTo = await factory.feeTo() const protocolFeeDenominator = await factory.protocolFeeDenominator() const totalSupply = await pair.totalSupply() - let rootK, rootKLast; + let rootK, rootKLast if (feeTo != AddressZero) { // Check for math overflow when dealing with big big balances - if (Math.sqrt((token0Reserve).mul(token1Reserve)) > Math.pow(10, 19)) { - const denominator = 10 ** ( Number(Math.log10(Math.sqrt((token0Reserve).mul(token1Reserve))).toFixed(0)) - 18); - rootK = bigNumberify((Math.sqrt( - token0Reserve.mul(token1Reserve) - ) / denominator).toString()) + if (Math.sqrt(token0Reserve.mul(token1Reserve)) > Math.pow(10, 19)) { + const denominator = 10 ** (Number(Math.log10(Math.sqrt(token0Reserve.mul(token1Reserve))).toFixed(0)) - 18) + rootK = bigNumberify((Math.sqrt(token0Reserve.mul(token1Reserve)) / denominator).toString()) rootKLast = bigNumberify((Math.sqrt(kLast) / denominator).toString()) } else { - rootK = bigNumberify(Math.sqrt((token0Reserve).mul(token1Reserve)).toString()) + rootK = bigNumberify(Math.sqrt(token0Reserve.mul(token1Reserve)).toString()) rootKLast = bigNumberify(Math.sqrt(kLast).toString()) } - - return (totalSupply.mul(rootK.sub(rootKLast))) - .div(rootK.mul(protocolFeeDenominator).add(rootKLast)) + + return totalSupply.mul(rootK.sub(rootKLast)).div(rootK.mul(protocolFeeDenominator).add(rootKLast)) } else { return bigNumberify(0) } - } + } let factory: Contract let token0: Contract let token1: Contract let pair: Contract - let wethPair: Contract + let wethToken0Pair: Contract + let wethToken1Pair: Contract let WETH: Contract let feeSetter: Contract let feeReceiver: Contract @@ -91,54 +92,53 @@ describe('DXswapFeeReceiver', () => { token0 = fixture.token0 token1 = fixture.token1 pair = fixture.pair - wethPair = fixture.wethPair + wethToken0Pair = fixture.wethToken0Pair + wethToken1Pair = fixture.wethToken1Pair WETH = fixture.WETH feeSetter = fixture.feeSetter feeReceiver = fixture.feeReceiver }) - + // Where token0-token1 and token1-WETH pairs exist - it( - 'should receive token0 to fallbackreceiver and ETH to ethReceiver when extracting fee from token0-token1', - async () => - { - const tokenAmount = expandTo18Decimals(100); - const wethAmount = expandTo18Decimals(100); - const amountIn = expandTo18Decimals(10); + it('should receive token0 to fallbackreceiver and ETH to ethReceiver when extracting fee from token0-token1', async () => { + const tokenAmount = expandTo18Decimals(100) + const wethAmount = expandTo18Decimals(100) + const amountIn = expandTo18Decimals(10) await token0.transfer(pair.address, tokenAmount) await token1.transfer(pair.address, tokenAmount) await pair.mint(wallet.address, overrides) - - await token1.transfer(wethPair.address, tokenAmount) - await WETH.transfer(wethPair.address, wethAmount) - await wethPair.mint(wallet.address, overrides) - - let amountOut = await getAmountOut(pair, token0.address, amountIn); - + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(wallet.address, overrides) + + let amountOut = await getAmountOut(pair, token0.address, amountIn) + await token0.transfer(pair.address, amountIn) await pair.swap(0, amountOut, wallet.address, '0x', overrides) - amountOut = await getAmountOut(pair, token1.address, amountIn); + amountOut = await getAmountOut(pair, token1.address, amountIn) await token1.transfer(pair.address, amountIn) await pair.swap(amountOut, 0, wallet.address, '0x', overrides) - - const protocolFeeToReceive = await calcProtocolFee(pair); - + + const protocolFeeToReceive = await calcProtocolFee(pair) + await token0.transfer(pair.address, expandTo18Decimals(10)) await token1.transfer(pair.address, expandTo18Decimals(10)) await pair.mint(wallet.address, overrides) - - const protocolFeeLPToknesReceived = await pair.balanceOf(feeReceiver.address); - expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - + + const protocolFeeLPToknesReceived = await pair.balanceOf(feeReceiver.address) + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)).to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + const token0FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token0.balanceOf(pair.address)).div(await pair.totalSupply()); + .mul(await token0.balanceOf(pair.address)) + .div(await pair.totalSupply()) const token1FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token1.balanceOf(pair.address)).div(await pair.totalSupply()); - - const wethFromToken1FromProtocolFee = await getAmountOut(wethPair, token1.address, token1FromProtocolFee); + .mul(await token1.balanceOf(pair.address)) + .div(await pair.totalSupply()) + + const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee) const protocolFeeReceiverBalanceBeforeTake = await provider.getBalance(protocolFeeReceiver.address) @@ -149,131 +149,140 @@ describe('DXswapFeeReceiver', () => { expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) expect(await pair.balanceOf(feeReceiver.address)).to.eq(0) expect(await provider.getBalance(feeReceiver.address)).to.eq(0) - - expect((await provider.getBalance(protocolFeeReceiver.address))) - .to.be.eq(protocolFeeReceiverBalanceBeforeTake.add(wethFromToken1FromProtocolFee)) - expect((await token0.balanceOf(dxdao.address))) - .to.be.eq(token0FromProtocolFee) + + expect(await provider.getBalance(protocolFeeReceiver.address)).to.be.eq( + protocolFeeReceiverBalanceBeforeTake.add(wethFromToken1FromProtocolFee) + ) + expect(await token0.balanceOf(dxdao.address)).to.be.eq(token0FromProtocolFee) }) it('should receive everything in ETH from one WETH-token1 pair', async () => { - - const tokenAmount = expandTo18Decimals(100); - const wethAmount = expandTo18Decimals(100); - const amountIn = expandTo18Decimals(50); - - await token1.transfer(wethPair.address, tokenAmount) - await WETH.transfer(wethPair.address, wethAmount) - await wethPair.mint(wallet.address, overrides) - - const token1IsFirstToken = (token1.address < WETH.address) - - let amountOut = await getAmountOut(wethPair, token1.address, amountIn); - await token1.transfer(wethPair.address, amountIn) - await wethPair.swap( + const tokenAmount = expandTo18Decimals(100) + const wethAmount = expandTo18Decimals(100) + const amountIn = expandTo18Decimals(50) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(wallet.address, overrides) + + const token1IsFirstToken = token1.address < WETH.address + + let amountOut = await getAmountOut(wethToken1Pair, token1.address, amountIn) + await token1.transfer(wethToken1Pair.address, amountIn) + await wethToken1Pair.swap( token1IsFirstToken ? 0 : amountOut, token1IsFirstToken ? amountOut : 0, - wallet.address, '0x', overrides + wallet.address, + '0x', + overrides ) - amountOut = await getAmountOut(wethPair, WETH.address, amountIn); - await WETH.transfer(wethPair.address, amountIn) - await wethPair.swap( + amountOut = await getAmountOut(wethToken1Pair, WETH.address, amountIn) + await WETH.transfer(wethToken1Pair.address, amountIn) + await wethToken1Pair.swap( token1IsFirstToken ? amountOut : 0, token1IsFirstToken ? 0 : amountOut, - wallet.address, '0x', overrides + wallet.address, + '0x', + overrides ) - const protocolFeeToReceive = await calcProtocolFee(wethPair); + const protocolFeeToReceive = await calcProtocolFee(wethToken1Pair) + + await token1.transfer(wethToken1Pair.address, expandTo18Decimals(10)) + await WETH.transfer(wethToken1Pair.address, expandTo18Decimals(10)) + await wethToken1Pair.mint(wallet.address, overrides) + + const protocolFeeLPToknesReceived = await wethToken1Pair.balanceOf(feeReceiver.address) + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)).to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - await token1.transfer(wethPair.address, expandTo18Decimals(10)) - await WETH.transfer(wethPair.address, expandTo18Decimals(10)) - await wethPair.mint(wallet.address, overrides) - - const protocolFeeLPToknesReceived = await wethPair.balanceOf(feeReceiver.address); - expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - const token1FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token1.balanceOf(wethPair.address)).div(await wethPair.totalSupply()); + .mul(await token1.balanceOf(wethToken1Pair.address)) + .div(await wethToken1Pair.totalSupply()) const wethFromProtocolFee = protocolFeeLPToknesReceived - .mul(await WETH.balanceOf(wethPair.address)).div(await wethPair.totalSupply()); - - const token1ReserveBeforeSwap = (await token1.balanceOf(wethPair.address)).sub(token1FromProtocolFee) - const wethReserveBeforeSwap = (await WETH.balanceOf(wethPair.address)).sub(wethFromProtocolFee) + .mul(await WETH.balanceOf(wethToken1Pair.address)) + .div(await wethToken1Pair.totalSupply()) + + const token1ReserveBeforeSwap = (await token1.balanceOf(wethToken1Pair.address)).sub(token1FromProtocolFee) + const wethReserveBeforeSwap = (await WETH.balanceOf(wethToken1Pair.address)).sub(wethFromProtocolFee) const wethFromToken1FromProtocolFee = await getAmountOutSync( token1IsFirstToken ? token1ReserveBeforeSwap : wethReserveBeforeSwap, token1IsFirstToken ? wethReserveBeforeSwap : token1ReserveBeforeSwap, token1IsFirstToken, token1FromProtocolFee, - await wethPair.swapFee() - ); - + await wethToken1Pair.swapFee() + ) + const protocolFeeReceiverBalanceBeforeTake = await provider.getBalance(protocolFeeReceiver.address) - await feeReceiver.connect(wallet).takeProtocolFee([wethPair.address], overrides) + await feeReceiver.connect(wallet).takeProtocolFee([wethToken1Pair.address], overrides) expect(await token1.balanceOf(feeReceiver.address)).to.eq(0) expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) - expect(await wethPair.balanceOf(feeReceiver.address)).to.eq(0) + expect(await wethToken1Pair.balanceOf(feeReceiver.address)).to.eq(0) expect(await provider.getBalance(feeReceiver.address)).to.eq(0) expect(await token1.balanceOf(dxdao.address)).to.be.eq(0) - expect((await provider.getBalance(protocolFeeReceiver.address))) - .to.be.eq(protocolFeeReceiverBalanceBeforeTake.add(wethFromToken1FromProtocolFee).add(wethFromProtocolFee)) + expect(await provider.getBalance(protocolFeeReceiver.address)).to.be.eq( + protocolFeeReceiverBalanceBeforeTake.add(wethFromToken1FromProtocolFee).add(wethFromProtocolFee) + ) }) - - it( - 'should receive only tokens when extracting fee from tokenA-tokenB pair that has no path to WETH', - async () => - { + + it('should receive only tokens when extracting fee from tokenA-tokenB pair that has no path to WETH', async () => { const tokenA = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) const tokenB = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) - - const tokenAmount = expandTo18Decimals(100); - const amountIn = expandTo18Decimals(50); - - await factory.createPair(tokenA.address, tokenB.address); + + const tokenAmount = expandTo18Decimals(100) + const amountIn = expandTo18Decimals(50) + + await factory.createPair(tokenA.address, tokenB.address) const tokenATokenBPair = new Contract( await factory.getPair( - (tokenA.address < tokenB.address) ? tokenA.address : tokenB.address, - (tokenA.address < tokenB.address) ? tokenB.address : tokenA.address - ), JSON.stringify(DXswapPair.abi), provider + tokenA.address < tokenB.address ? tokenA.address : tokenB.address, + tokenA.address < tokenB.address ? tokenB.address : tokenA.address + ), + JSON.stringify(DXswapPair.abi), + provider ).connect(wallet) await tokenA.transfer(tokenATokenBPair.address, tokenAmount) await tokenB.transfer(tokenATokenBPair.address, tokenAmount) await tokenATokenBPair.mint(wallet.address, overrides) - - let amountOut = await getAmountOut(tokenATokenBPair, tokenA.address, amountIn); + + let amountOut = await getAmountOut(tokenATokenBPair, tokenA.address, amountIn) await tokenA.transfer(tokenATokenBPair.address, amountIn) await tokenATokenBPair.swap( - (tokenA.address < tokenB.address) ? 0 : amountOut, - (tokenA.address < tokenB.address) ? amountOut : 0, - wallet.address, '0x', overrides + tokenA.address < tokenB.address ? 0 : amountOut, + tokenA.address < tokenB.address ? amountOut : 0, + wallet.address, + '0x', + overrides ) - amountOut = await getAmountOut(tokenATokenBPair, tokenB.address, amountIn); + amountOut = await getAmountOut(tokenATokenBPair, tokenB.address, amountIn) await tokenB.transfer(tokenATokenBPair.address, amountIn) await tokenATokenBPair.swap( - (tokenA.address < tokenB.address) ? amountOut : 0, - (tokenA.address < tokenB.address) ? 0 : amountOut, - wallet.address, '0x', overrides + tokenA.address < tokenB.address ? amountOut : 0, + tokenA.address < tokenB.address ? 0 : amountOut, + wallet.address, + '0x', + overrides ) - - const protocolFeeToReceive = await calcProtocolFee(tokenATokenBPair); + + const protocolFeeToReceive = await calcProtocolFee(tokenATokenBPair) await tokenA.transfer(tokenATokenBPair.address, expandTo18Decimals(10)) await tokenB.transfer(tokenATokenBPair.address, expandTo18Decimals(10)) await tokenATokenBPair.mint(wallet.address, overrides) - - const protocolFeeLPTokenAtokenBPair = await tokenATokenBPair.balanceOf(feeReceiver.address); - expect(protocolFeeLPTokenAtokenBPair.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - + + const protocolFeeLPTokenAtokenBPair = await tokenATokenBPair.balanceOf(feeReceiver.address) + expect(protocolFeeLPTokenAtokenBPair.div(ROUND_EXCEPTION)).to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + const tokenAFromProtocolFee = protocolFeeLPTokenAtokenBPair - .mul(await tokenA.balanceOf(tokenATokenBPair.address)).div(await tokenATokenBPair.totalSupply()); + .mul(await tokenA.balanceOf(tokenATokenBPair.address)) + .div(await tokenATokenBPair.totalSupply()) const tokenBFromProtocolFee = protocolFeeLPTokenAtokenBPair - .mul(await tokenB.balanceOf(tokenATokenBPair.address)).div(await tokenATokenBPair.totalSupply()); + .mul(await tokenB.balanceOf(tokenATokenBPair.address)) + .div(await tokenATokenBPair.totalSupply()) const protocolFeeReceiverBalance = await provider.getBalance(protocolFeeReceiver.address) @@ -284,114 +293,122 @@ describe('DXswapFeeReceiver', () => { expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) expect(await tokenATokenBPair.balanceOf(feeReceiver.address)).to.eq(0) expect(await provider.getBalance(feeReceiver.address)).to.eq(0) - - expect((await provider.getBalance(protocolFeeReceiver.address))) - .to.be.eq(protocolFeeReceiverBalance) - expect((await tokenA.balanceOf(dxdao.address))) - .to.be.eq(tokenAFromProtocolFee) - expect((await tokenB.balanceOf(dxdao.address))) - .to.be.eq(tokenBFromProtocolFee) + + expect(await provider.getBalance(protocolFeeReceiver.address)).to.be.eq(protocolFeeReceiverBalance) + expect(await tokenA.balanceOf(dxdao.address)).to.be.eq(tokenAFromProtocolFee) + expect(await tokenB.balanceOf(dxdao.address)).to.be.eq(tokenBFromProtocolFee) }) - - it( - 'should receive only tokens when extracting fee from both tokenA-tonkenB pair and tokenC-tokenD pair', - async () => - { - const tokenAmount = expandTo18Decimals(100); - const amountIn = expandTo18Decimals(50); + + it('should receive only tokens when extracting fee from both tokenA-tonkenB pair and tokenC-tokenD pair', async () => { + const tokenAmount = expandTo18Decimals(100) + const amountIn = expandTo18Decimals(50) // Set up tokenA-tokenB const tokenA = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) const tokenB = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) - - await factory.createPair(tokenA.address, tokenB.address); + + await factory.createPair(tokenA.address, tokenB.address) const tokenATokenBPair = new Contract( await factory.getPair( - (tokenA.address < tokenB.address) ? tokenA.address : tokenB.address, - (tokenA.address < tokenB.address) ? tokenB.address : tokenA.address - ), JSON.stringify(DXswapPair.abi), provider + tokenA.address < tokenB.address ? tokenA.address : tokenB.address, + tokenA.address < tokenB.address ? tokenB.address : tokenA.address + ), + JSON.stringify(DXswapPair.abi), + provider ).connect(wallet) await tokenA.transfer(tokenATokenBPair.address, tokenAmount) await tokenB.transfer(tokenATokenBPair.address, tokenAmount) await tokenATokenBPair.mint(wallet.address, overrides) - - let amountOut = await getAmountOut(tokenATokenBPair, tokenA.address, amountIn); + + let amountOut = await getAmountOut(tokenATokenBPair, tokenA.address, amountIn) await tokenA.transfer(tokenATokenBPair.address, amountIn) await tokenATokenBPair.swap( - (tokenA.address < tokenB.address) ? 0 : amountOut, - (tokenA.address < tokenB.address) ? amountOut : 0, - wallet.address, '0x', overrides + tokenA.address < tokenB.address ? 0 : amountOut, + tokenA.address < tokenB.address ? amountOut : 0, + wallet.address, + '0x', + overrides ) - amountOut = await getAmountOut(tokenATokenBPair, tokenB.address, amountIn); + amountOut = await getAmountOut(tokenATokenBPair, tokenB.address, amountIn) await tokenB.transfer(tokenATokenBPair.address, amountIn) await tokenATokenBPair.swap( - (tokenA.address < tokenB.address) ? amountOut : 0, - (tokenA.address < tokenB.address) ? 0 : amountOut, - wallet.address, '0x', overrides + tokenA.address < tokenB.address ? amountOut : 0, + tokenA.address < tokenB.address ? 0 : amountOut, + wallet.address, + '0x', + overrides ) - - let protocolFeeToReceive = await calcProtocolFee(tokenATokenBPair); - + + let protocolFeeToReceive = await calcProtocolFee(tokenATokenBPair) + await tokenA.transfer(tokenATokenBPair.address, expandTo18Decimals(10)) await tokenB.transfer(tokenATokenBPair.address, expandTo18Decimals(10)) await tokenATokenBPair.mint(wallet.address, overrides) - - const protocolFeeLPTokenAtokenBPair = await tokenATokenBPair.balanceOf(feeReceiver.address); - expect(protocolFeeLPTokenAtokenBPair.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const protocolFeeLPTokenAtokenBPair = await tokenATokenBPair.balanceOf(feeReceiver.address) + expect(protocolFeeLPTokenAtokenBPair.div(ROUND_EXCEPTION)).to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) // Set up tokenC-tokenD pair const tokenC = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) const tokenD = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) - - await factory.createPair(tokenC.address, tokenD.address); + + await factory.createPair(tokenC.address, tokenD.address) const tokenCTokenDPair = new Contract( await factory.getPair( - (tokenC.address < tokenD.address) ? tokenC.address : tokenD.address, - (tokenC.address < tokenD.address) ? tokenD.address : tokenC.address - ), JSON.stringify(DXswapPair.abi), provider + tokenC.address < tokenD.address ? tokenC.address : tokenD.address, + tokenC.address < tokenD.address ? tokenD.address : tokenC.address + ), + JSON.stringify(DXswapPair.abi), + provider ).connect(wallet) await tokenC.transfer(tokenCTokenDPair.address, tokenAmount) await tokenD.transfer(tokenCTokenDPair.address, tokenAmount) await tokenCTokenDPair.mint(wallet.address, overrides) - amountOut = await getAmountOut(tokenCTokenDPair, tokenC.address, amountIn); + amountOut = await getAmountOut(tokenCTokenDPair, tokenC.address, amountIn) await tokenC.transfer(tokenCTokenDPair.address, amountIn) await tokenCTokenDPair.swap( - (tokenC.address < tokenD.address) ? 0 : amountOut, - (tokenC.address < tokenD.address) ? amountOut : 0, - wallet.address, '0x', overrides + tokenC.address < tokenD.address ? 0 : amountOut, + tokenC.address < tokenD.address ? amountOut : 0, + wallet.address, + '0x', + overrides ) - amountOut = await getAmountOut(tokenCTokenDPair, tokenD.address, amountIn); + amountOut = await getAmountOut(tokenCTokenDPair, tokenD.address, amountIn) await tokenD.transfer(tokenCTokenDPair.address, amountIn) await tokenCTokenDPair.swap( - (tokenC.address < tokenD.address) ? amountOut : 0, - (tokenC.address < tokenD.address) ? 0 : amountOut, - wallet.address, '0x', overrides + tokenC.address < tokenD.address ? amountOut : 0, + tokenC.address < tokenD.address ? 0 : amountOut, + wallet.address, + '0x', + overrides ) - - protocolFeeToReceive = await calcProtocolFee(tokenCTokenDPair); + + protocolFeeToReceive = await calcProtocolFee(tokenCTokenDPair) await tokenC.transfer(tokenCTokenDPair.address, expandTo18Decimals(10)) await tokenD.transfer(tokenCTokenDPair.address, expandTo18Decimals(10)) await tokenCTokenDPair.mint(wallet.address, overrides) - - const protocolFeeLPTokenCtokenDPair = await tokenCTokenDPair.balanceOf(feeReceiver.address); - expect(protocolFeeLPTokenCtokenDPair.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - + + const protocolFeeLPTokenCtokenDPair = await tokenCTokenDPair.balanceOf(feeReceiver.address) + expect(protocolFeeLPTokenCtokenDPair.div(ROUND_EXCEPTION)).to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + const tokenAFromProtocolFee = protocolFeeLPTokenAtokenBPair - .mul(await tokenA.balanceOf(tokenATokenBPair.address)).div(await tokenATokenBPair.totalSupply()); + .mul(await tokenA.balanceOf(tokenATokenBPair.address)) + .div(await tokenATokenBPair.totalSupply()) const tokenBFromProtocolFee = protocolFeeLPTokenAtokenBPair - .mul(await tokenB.balanceOf(tokenATokenBPair.address)).div(await tokenATokenBPair.totalSupply()); + .mul(await tokenB.balanceOf(tokenATokenBPair.address)) + .div(await tokenATokenBPair.totalSupply()) const tokenCFromProtocolFee = protocolFeeLPTokenCtokenDPair - .mul(await tokenC.balanceOf(tokenCTokenDPair.address)).div(await tokenCTokenDPair.totalSupply()); + .mul(await tokenC.balanceOf(tokenCTokenDPair.address)) + .div(await tokenCTokenDPair.totalSupply()) const tokenDFromProtocolFee = protocolFeeLPTokenCtokenDPair - .mul(await tokenD.balanceOf(tokenCTokenDPair.address)).div(await tokenCTokenDPair.totalSupply()); + .mul(await tokenD.balanceOf(tokenCTokenDPair.address)) + .div(await tokenCTokenDPair.totalSupply()) const protocolFeeReceiverBalance = await provider.getBalance(protocolFeeReceiver.address) @@ -406,85 +423,1224 @@ describe('DXswapFeeReceiver', () => { expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) expect(await pair.balanceOf(feeReceiver.address)).to.eq(0) expect(await provider.getBalance(feeReceiver.address)).to.eq(0) - - expect((await provider.getBalance(protocolFeeReceiver.address))) - .to.be.eq(protocolFeeReceiverBalance) - expect((await tokenA.balanceOf(dxdao.address))) - .to.be.eq(tokenAFromProtocolFee) - expect((await tokenB.balanceOf(dxdao.address))) - .to.be.eq(tokenBFromProtocolFee) - expect((await tokenC.balanceOf(dxdao.address))) - .to.be.eq(tokenCFromProtocolFee) - expect((await tokenD.balanceOf(dxdao.address))) - .to.be.eq(tokenDFromProtocolFee) + + expect(await provider.getBalance(protocolFeeReceiver.address)).to.be.eq(protocolFeeReceiverBalance) + expect(await tokenA.balanceOf(dxdao.address)).to.be.eq(tokenAFromProtocolFee) + expect(await tokenB.balanceOf(dxdao.address)).to.be.eq(tokenBFromProtocolFee) + expect(await tokenC.balanceOf(dxdao.address)).to.be.eq(tokenCFromProtocolFee) + expect(await tokenD.balanceOf(dxdao.address)).to.be.eq(tokenDFromProtocolFee) }) - it( - 'should only allow owner to transfer ownership', - async () => - { - await expect(feeReceiver.connect(other).transferOwnership(other.address)) - .to.be.revertedWith('DXswapFeeReceiver: FORBIDDEN') - await feeReceiver.connect(dxdao).transferOwnership(other.address); + it('should only allow owner to transfer ownership', async () => { + await expect(feeReceiver.connect(other).transferOwnership(other.address)).to.be.revertedWith( + 'DXswapFeeReceiver: FORBIDDEN' + ) + await feeReceiver.connect(dxdao).transferOwnership(other.address) expect(await feeReceiver.owner()).to.be.eq(other.address) }) - it( - 'should only allow owner to change receivers', - async () => - { - await expect(feeReceiver.connect(other).changeReceivers(other.address, other.address)) - .to.be.revertedWith('DXswapFeeReceiver: FORBIDDEN') - await feeReceiver.connect(dxdao).changeReceivers(other.address, other.address); + it('should only allow owner to change receivers', async () => { + await expect(feeReceiver.connect(other).changeReceivers(other.address, other.address)).to.be.revertedWith( + 'DXswapFeeReceiver: FORBIDDEN' + ) + await feeReceiver.connect(dxdao).changeReceivers(other.address, other.address) expect(await feeReceiver.ethReceiver()).to.be.eq(other.address) expect(await feeReceiver.fallbackReceiver()).to.be.eq(other.address) }) - it( - 'should revert with insufficient liquidity error if there is not any liquidity in the WETH pair', - async () => - { - const tokenAmount = expandTo18Decimals(100); - const wethAmount = expandTo18Decimals(100); - const amountIn = expandTo18Decimals(50); + it('should send tokens if there is not any liquidity in the WETH pair', async () => { + const tokenAmount = expandTo18Decimals(100) + const wethAmount = expandTo18Decimals(100) + const amountIn = expandTo18Decimals(50) await token0.transfer(pair.address, tokenAmount) await token1.transfer(pair.address, tokenAmount) await pair.mint(wallet.address, overrides) - - let amountOut = await getAmountOut(pair, token0.address, amountIn); + + let amountOut = await getAmountOut(pair, token0.address, amountIn) await token0.transfer(pair.address, amountIn) await pair.swap(0, amountOut, wallet.address, '0x', overrides) - amountOut = await getAmountOut(pair, token1.address, amountIn); + amountOut = await getAmountOut(pair, token1.address, amountIn) await token1.transfer(pair.address, amountIn) await pair.swap(amountOut, 0, wallet.address, '0x', overrides) - - const protocolFeeToReceive = await calcProtocolFee(pair); - + + const protocolFeeToReceive = await calcProtocolFee(pair) + await token0.transfer(pair.address, expandTo18Decimals(10)) await token1.transfer(pair.address, expandTo18Decimals(10)) await pair.mint(wallet.address, overrides) - - const protocolFeeLPToknesReceived = await pair.balanceOf(feeReceiver.address); - expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - + + const protocolFeeLPToknesReceived = await pair.balanceOf(feeReceiver.address) + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)).to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair.address)) + .div(await pair.totalSupply()) + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair.address)) + .div(await pair.totalSupply()) + + const protocolFeeReceiverBalance = await provider.getBalance(protocolFeeReceiver.address) - await expect(feeReceiver.connect(wallet).takeProtocolFee([pair.address], overrides)).to.be.revertedWith('DXswapFeeReceiver: INSUFFICIENT_LIQUIDITY') + feeReceiver.connect(wallet).takeProtocolFee([pair.address], overrides) expect(await pair.balanceOf(feeReceiver.address)).to.eq(protocolFeeLPToknesReceived) expect(await token0.balanceOf(feeReceiver.address)).to.eq(0) expect(await token1.balanceOf(feeReceiver.address)).to.eq(0) expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) expect(await provider.getBalance(feeReceiver.address)).to.eq(0) - - expect((await provider.getBalance(protocolFeeReceiver.address))) - .to.be.eq(protocolFeeReceiverBalance) - expect((await token0.balanceOf(dxdao.address))) - .to.be.eq(0) - expect((await token1.balanceOf(dxdao.address))) - .to.be.eq(0) + + expect(await provider.getBalance(protocolFeeReceiver.address)).to.be.eq(protocolFeeReceiverBalance) + expect(await token0.balanceOf(dxdao.address)).to.be.eq(token0FromProtocolFee) + expect(await token1.balanceOf(dxdao.address)).to.be.eq(token1FromProtocolFee) }) + + + // Where token0-token1 and token1-WETH pairs exist AND PRICE IMPACT TOO HIGH + it( + 'should receive token0 and token1 if price impact token1-weth pool is too high', + async () => { + const tokenAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(1); + // add very small liquidity to weth-token1 pool + const wethTknAmountLowLP = bigNumberify(1).mul(bigNumberify(10).pow(15)); + + await token0.transfer(pair.address, tokenAmount) + await token1.transfer(pair.address, tokenAmount) + await pair.mint(wallet.address, overrides) + + await token1.transfer(wethToken1Pair.address, wethTknAmountLowLP) + await WETH.transfer(wethToken1Pair.address, wethTknAmountLowLP) + await wethToken1Pair.mint(wallet.address, overrides) + + let amountOut = await getAmountOut(pair, token0.address, amountIn); + + await token0.transfer(pair.address, amountIn) + await pair.swap(0, amountOut, wallet.address, '0x', overrides) + + amountOut = await getAmountOut(pair, token1.address, amountIn); + await token1.transfer(pair.address, amountIn) + + const protocolFeeToReceive = await calcProtocolFee(pair); + + await token0.transfer(pair.address, expandTo18Decimals(15)) + await token1.transfer(pair.address, expandTo18Decimals(15)) + await pair.mint(wallet.address, overrides) + + const protocolFeeLPToknesReceived = await pair.balanceOf(feeReceiver.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair.address)).div(await pair.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair.address)).div(await pair.totalSupply()); + + const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); + + const protocolFeeReceiverBalanceBeforeTake = await provider.getBalance(protocolFeeReceiver.address) + + await feeReceiver.connect(wallet).takeProtocolFee([pair.address], overrides) + + expect(await token0.balanceOf(feeReceiver.address)).to.eq(0) + expect(await token1.balanceOf(feeReceiver.address)).to.eq(0) + expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) + expect(await pair.balanceOf(feeReceiver.address)).to.eq(0) + expect(await provider.getBalance(feeReceiver.address)).to.eq(0) + + expect((await provider.getBalance(protocolFeeReceiver.address))) + .to.be.eq(protocolFeeReceiverBalanceBeforeTake) + expect((await token0.balanceOf(dxdao.address))) + .to.be.eq(token0FromProtocolFee) + expect((await token1.balanceOf(dxdao.address))) + .to.be.eq(token1FromProtocolFee) + }) + + it( + 'should only allow owner to set max price impact', + async () => { + await expect(feeReceiver.connect(other).setMaxSwapPriceImpact(500)) + .to.be.revertedWith('DXswapFeeReceiver: CALLER_NOT_OWNER') + await feeReceiver.connect(dxdao).setMaxSwapPriceImpact(500); + expect(await feeReceiver.maxSwapPriceImpact()).to.be.eq(500) + }) + + it( + 'should set max price impact within the range 0 - 10000', + async () => { + expect(await feeReceiver.maxSwapPriceImpact()).to.be.eq(100) + await expect(feeReceiver.connect(dxdao).setMaxSwapPriceImpact(0)) + .to.be.revertedWith('DXswapFeeReceiver: FORBIDDEN_PRICE_IMPACT') + await expect(feeReceiver.connect(dxdao).setMaxSwapPriceImpact(10000)) + .to.be.revertedWith('DXswapFeeReceiver: FORBIDDEN_PRICE_IMPACT') + await feeReceiver.connect(dxdao).setMaxSwapPriceImpact(500); + expect(await feeReceiver.maxSwapPriceImpact()).to.be.eq(500) + }) + + it( + 'should send tokenA & tokenB default 100% fee to dxdao and 0% fee to external receiver', + async () => { + const tokenAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(50); + + // Set up tokenA-tokenB + const tokenA = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) + const tokenB = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) + + await factory.createPair(tokenA.address, tokenB.address) + const tokenATokenBPair = new Contract( + await factory.getPair( + (tokenA.address < tokenB.address) ? tokenA.address : tokenB.address, + (tokenA.address < tokenB.address) ? tokenB.address : tokenA.address + ), JSON.stringify(DXswapPair.abi), provider + ).connect(wallet) + + await feeReceiver.setExternalFeeReceiver(tokenATokenBPair.address, externalFeeReceiver.address) + + await tokenA.transfer(tokenATokenBPair.address, tokenAmount) + await tokenB.transfer(tokenATokenBPair.address, tokenAmount) + await tokenATokenBPair.mint(wallet.address, overrides) + + let amountOut = await getAmountOut(tokenATokenBPair, tokenA.address, amountIn) + await tokenA.transfer(tokenATokenBPair.address, amountIn) + await tokenATokenBPair.swap( + (tokenA.address < tokenB.address) ? 0 : amountOut, + (tokenA.address < tokenB.address) ? amountOut : 0, + wallet.address, '0x', overrides + ) + + amountOut = await getAmountOut(tokenATokenBPair, tokenB.address, amountIn) + await tokenB.transfer(tokenATokenBPair.address, amountIn) + await tokenATokenBPair.swap( + (tokenA.address < tokenB.address) ? amountOut : 0, + (tokenA.address < tokenB.address) ? 0 : amountOut, + wallet.address, '0x', overrides + ) + + let protocolFeeToReceive = await calcProtocolFee(tokenATokenBPair); + + await tokenA.transfer(tokenATokenBPair.address, expandTo18Decimals(10)) + await tokenB.transfer(tokenATokenBPair.address, expandTo18Decimals(10)) + await tokenATokenBPair.mint(wallet.address, overrides) + + const protocolFeeLPTokenAtokenBPair = await tokenATokenBPair.balanceOf(feeReceiver.address); + expect(protocolFeeLPTokenAtokenBPair.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const tokenAFromProtocolFee = protocolFeeLPTokenAtokenBPair + .mul(await tokenA.balanceOf(tokenATokenBPair.address)).div(await tokenATokenBPair.totalSupply()); + const tokenBFromProtocolFee = protocolFeeLPTokenAtokenBPair + .mul(await tokenB.balanceOf(tokenATokenBPair.address)).div(await tokenATokenBPair.totalSupply()); + + const protocolFeeReceiverBalance = await provider.getBalance(protocolFeeReceiver.address) + + await feeReceiver.connect(wallet).takeProtocolFee([tokenATokenBPair.address], overrides) + + const [externalReceiver, percentFeeToExternalReceiver] = await feeReceiver.externalFeeReceivers(pair.address) + expect(percentFeeToExternalReceiver).to.eq(0) + + const feeToEthReceiver = (bigNumberify(10000).sub(percentFeeToExternalReceiver)) + + expect(await provider.getBalance(protocolFeeReceiver.address)).to.eq(protocolFeeReceiverBalance.toString()) + + expect(await tokenA.balanceOf(feeReceiver.address)).to.eq(0) + expect(await tokenB.balanceOf(feeReceiver.address)).to.eq(0) + expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) + expect(await pair.balanceOf(feeReceiver.address)).to.eq(0) + expect(await provider.getBalance(feeReceiver.address)).to.eq(0) + + expect((await provider.getBalance(protocolFeeReceiver.address))) + .to.be.eq(protocolFeeReceiverBalance) + + expect((await tokenA.balanceOf(dxdao.address))) + .to.be.eq(tokenAFromProtocolFee) + expect((await tokenA.balanceOf(externalFeeReceiver.address))) + .to.be.eq(0) + + expect((await tokenB.balanceOf(dxdao.address))) + .to.be.eq(tokenBFromProtocolFee) + expect((await tokenB.balanceOf(externalFeeReceiver.address))) + .to.be.eq(0) + }) + + it( + 'should split protocol fee and send tokenA & tokenB to dxdao and external fee receiver', + async () => { + const tokenAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(50); + const newPercentFeeToExternalReceiver = 2000 //20% + + // Set up tokenA-tokenB + const tokenA = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) + const tokenB = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) + + await factory.createPair(tokenA.address, tokenB.address) + const tokenATokenBPair = new Contract( + await factory.getPair( + (tokenA.address < tokenB.address) ? tokenA.address : tokenB.address, + (tokenA.address < tokenB.address) ? tokenB.address : tokenA.address + ), JSON.stringify(DXswapPair.abi), provider + ).connect(wallet) + + // set external fee receiver + await feeReceiver.setExternalFeeReceiver(tokenATokenBPair.address, externalFeeReceiver.address) + await feeReceiver.setFeePercentageToExternalReceiver(tokenATokenBPair.address, newPercentFeeToExternalReceiver) + const [newExternalReceiver, percentFeeToExternalReceiver] = await feeReceiver.externalFeeReceivers(tokenATokenBPair.address) + expect(percentFeeToExternalReceiver).to.eq(newPercentFeeToExternalReceiver) + + await tokenA.transfer(tokenATokenBPair.address, tokenAmount) + await tokenB.transfer(tokenATokenBPair.address, tokenAmount) + await tokenATokenBPair.mint(wallet.address, overrides) + + let amountOut = await getAmountOut(tokenATokenBPair, tokenA.address, amountIn) + await tokenA.transfer(tokenATokenBPair.address, amountIn) + await tokenATokenBPair.swap( + (tokenA.address < tokenB.address) ? 0 : amountOut, + (tokenA.address < tokenB.address) ? amountOut : 0, + wallet.address, '0x', overrides + ) + + let protocolFeeToReceive = await calcProtocolFee(tokenATokenBPair); + + await tokenA.transfer(tokenATokenBPair.address, expandTo18Decimals(10)) + await tokenB.transfer(tokenATokenBPair.address, expandTo18Decimals(10)) + await tokenATokenBPair.mint(wallet.address, overrides) + + const protocolFeeLPTokenAtokenBPair = await tokenATokenBPair.balanceOf(feeReceiver.address); + expect(protocolFeeLPTokenAtokenBPair.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const tokenAFromProtocolFee = protocolFeeLPTokenAtokenBPair + .mul(await tokenA.balanceOf(tokenATokenBPair.address)).div(await tokenATokenBPair.totalSupply()); + const tokenBFromProtocolFee = protocolFeeLPTokenAtokenBPair + .mul(await tokenB.balanceOf(tokenATokenBPair.address)).div(await tokenATokenBPair.totalSupply()); + + const tokenAExternal = tokenAFromProtocolFee.mul(percentFeeToExternalReceiver).div(10000); + const tokenBExternal = tokenBFromProtocolFee.mul(percentFeeToExternalReceiver).div(10000); + const tokenAFeeReceiver = tokenAFromProtocolFee.sub(tokenAExternal); + const tokenBFeeReceiver = tokenBFromProtocolFee.sub(tokenBExternal); + + const protocolFeeReceiverBalance = await provider.getBalance(protocolFeeReceiver.address); + + await feeReceiver.connect(wallet).takeProtocolFee([tokenATokenBPair.address], overrides) + + expect(await provider.getBalance(protocolFeeReceiver.address)).to.eq(protocolFeeReceiverBalance) + + expect(await tokenA.balanceOf(feeReceiver.address)).to.eq(0) + expect(await tokenB.balanceOf(feeReceiver.address)).to.eq(0) + expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) + expect(await pair.balanceOf(feeReceiver.address)).to.eq(0) + expect(await provider.getBalance(feeReceiver.address)).to.eq(0) + + expect((await provider.getBalance(protocolFeeReceiver.address))) + .to.be.eq(protocolFeeReceiverBalance) + + expect((await tokenA.balanceOf(dxdao.address))) + .to.be.eq(tokenAFeeReceiver) + expect((await tokenA.balanceOf(externalFeeReceiver.address))) + .to.be.eq(tokenAExternal) + expect((await tokenB.balanceOf(dxdao.address))) + .to.be.eq(tokenBFeeReceiver) + expect((await tokenB.balanceOf(externalFeeReceiver.address))) + .to.be.eq(tokenBExternal) + }) + + // Where token0-token1, token0-WETH and token1-WETH pairs exist + it( + 'should swap token0 & token1 to ETH and sent to ethReceiver when extracting fee from token0-token1', + async () => { + const tokenAmount = expandTo18Decimals(100); + const wethAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(10); + + await token0.transfer(pair.address, tokenAmount) + await token1.transfer(pair.address, tokenAmount) + await pair.mint(wallet.address, overrides) + + await token0.transfer(wethToken0Pair.address, tokenAmount) + await WETH.transfer(wethToken0Pair.address, wethAmount) + await wethToken0Pair.mint(wallet.address, overrides) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(wallet.address, overrides) + + let amountOut = await getAmountOut(pair, token0.address, amountIn); + + await token0.transfer(pair.address, amountIn) + await pair.swap(0, amountOut, wallet.address, '0x', overrides) + + amountOut = await getAmountOut(pair, token1.address, amountIn); + await token1.transfer(pair.address, amountIn) + await pair.swap(amountOut, 0, wallet.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair); + + await token0.transfer(pair.address, expandTo18Decimals(10)) + await token1.transfer(pair.address, expandTo18Decimals(10)) + await pair.mint(wallet.address, overrides) + + const protocolFeeLPToknesReceived = await pair.balanceOf(feeReceiver.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair.address)).div(await pair.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair.address)).div(await pair.totalSupply()); + + const wethFromToken0FromProtocolFee = await getAmountOut(wethToken0Pair, token0.address, token0FromProtocolFee); + const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); + + const protocolFeeReceiverBalanceBeforeTake = await provider.getBalance(protocolFeeReceiver.address) + + await feeReceiver.connect(wallet).takeProtocolFee([pair.address], overrides) + + expect(await token0.balanceOf(feeReceiver.address)).to.eq(0) + expect(await token1.balanceOf(feeReceiver.address)).to.eq(0) + expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) + expect(await pair.balanceOf(feeReceiver.address)).to.eq(0) + expect(await provider.getBalance(feeReceiver.address)).to.eq(0) + + expect((await token0.balanceOf(dxdao.address))) + .to.eq(0) + expect((await token1.balanceOf(dxdao.address))) + .to.eq(0) + expect((await provider.getBalance(protocolFeeReceiver.address))) + .to.be.eq(protocolFeeReceiverBalanceBeforeTake.add(wethFromToken0FromProtocolFee).add(wethFromToken1FromProtocolFee)) + }) + + // Where token0-token1, token0-WETH and token1-WETH pairs exist + it( + 'should receive token0 and ETH when extracting fee from token0-token1 and swap LPs exist but not enough liquidity', + async () => { + const tokenAmount = expandTo18Decimals(100); + const wethAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(10); + // add very small liquidity to weth-token0 pool + const wethTknAmountLowLP = bigNumberify(1).mul(bigNumberify(10).pow(6)); + + await token0.transfer(pair.address, tokenAmount) + await token1.transfer(pair.address, tokenAmount) + await pair.mint(wallet.address, overrides) + + await token0.transfer(wethToken0Pair.address, wethTknAmountLowLP) + await WETH.transfer(wethToken0Pair.address, wethTknAmountLowLP) + await wethToken0Pair.mint(wallet.address, overrides) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(wallet.address, overrides) + + let amountOut = await getAmountOut(pair, token0.address, amountIn); + + await token0.transfer(pair.address, amountIn) + await pair.swap(0, amountOut, wallet.address, '0x', overrides) + + amountOut = await getAmountOut(pair, token1.address, amountIn); + await token1.transfer(pair.address, amountIn) + await pair.swap(amountOut, 0, wallet.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair); + + await token0.transfer(pair.address, expandTo18Decimals(10)) + await token1.transfer(pair.address, expandTo18Decimals(10)) + await pair.mint(wallet.address, overrides) + + const protocolFeeLPToknesReceived = await pair.balanceOf(feeReceiver.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair.address)).div(await pair.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair.address)).div(await pair.totalSupply()); + + const wethFromToken0FromProtocolFee = await getAmountOut(wethToken0Pair, token0.address, token0FromProtocolFee); + const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); + + const protocolFeeReceiverBalanceBeforeTake = await provider.getBalance(protocolFeeReceiver.address) + + await feeReceiver.connect(wallet).takeProtocolFee([pair.address], overrides) + + expect(await token0.balanceOf(feeReceiver.address)).to.eq(0) + expect(await token1.balanceOf(feeReceiver.address)).to.eq(0) + expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) + expect(await pair.balanceOf(feeReceiver.address)).to.eq(0) + expect(await provider.getBalance(feeReceiver.address)).to.eq(0) + + expect((await token0.balanceOf(dxdao.address))) + .to.eq(token0FromProtocolFee) + expect((await token1.balanceOf(dxdao.address))) + .to.eq(0) + expect((await provider.getBalance(protocolFeeReceiver.address))) + .to.be.eq(protocolFeeReceiverBalanceBeforeTake.add(wethFromToken1FromProtocolFee)) + }) + + // Where token0-token1, token0-WETH and token1-WETH pairs exist + it( + 'should receive token0 and ETH when extracting fee from token0-token1 and swap LPs exist but token reserve is 0', + async () => { + const tokenAmount = expandTo18Decimals(100); + const wethAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(10); + // add very small liquidity to weth-token0 pool + const wethTknAmountLowLP = bigNumberify(1).mul(bigNumberify(10).pow(6)); + + await token0.transfer(pair.address, tokenAmount) + await token1.transfer(pair.address, tokenAmount) + await pair.mint(wallet.address, overrides) + + // dont transfer token0 to the pool and dont mint lp tokens + await WETH.transfer(wethToken0Pair.address, wethTknAmountLowLP) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(wallet.address, overrides) + + let amountOut = await getAmountOut(pair, token0.address, amountIn); + + await token0.transfer(pair.address, amountIn) + await pair.swap(0, amountOut, wallet.address, '0x', overrides) + + amountOut = await getAmountOut(pair, token1.address, amountIn); + await token1.transfer(pair.address, amountIn) + await pair.swap(amountOut, 0, wallet.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair); + + await token0.transfer(pair.address, expandTo18Decimals(10)) + await token1.transfer(pair.address, expandTo18Decimals(10)) + await pair.mint(wallet.address, overrides) + + const protocolFeeLPToknesReceived = await pair.balanceOf(feeReceiver.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair.address)).div(await pair.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair.address)).div(await pair.totalSupply()); + + const wethFromToken0FromProtocolFee = await getAmountOut(wethToken0Pair, token0.address, token0FromProtocolFee); + const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); + + const protocolFeeReceiverBalanceBeforeTake = await provider.getBalance(protocolFeeReceiver.address) + + await feeReceiver.connect(wallet).takeProtocolFee([pair.address], overrides) + + expect(await token0.balanceOf(feeReceiver.address)).to.eq(0) + expect(await token1.balanceOf(feeReceiver.address)).to.eq(0) + expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) + expect(await pair.balanceOf(feeReceiver.address)).to.eq(0) + expect(await provider.getBalance(feeReceiver.address)).to.eq(0) + + expect((await token0.balanceOf(dxdao.address))) + .to.eq(token0FromProtocolFee) + expect((await token1.balanceOf(dxdao.address))) + .to.eq(0) + expect((await provider.getBalance(protocolFeeReceiver.address))) + .to.be.eq(protocolFeeReceiverBalanceBeforeTake.add(wethFromToken1FromProtocolFee)) + }) + + // Where token0-token1, token0-WETH and token1-WETH pairs exist + it( + 'should swap tkn0 & tkn1 to ETH and split fee when extracting from tkn0-tkn1', + async () => { + const tokenAmount = expandTo18Decimals(100); + const wethAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(10); + const newPercentFeeToExternalReceiver = 2000 //20% + + + await token0.transfer(pair.address, tokenAmount) + await token1.transfer(pair.address, tokenAmount) + await pair.mint(wallet.address, overrides) + + // set external fee receiver + await feeReceiver.setExternalFeeReceiver(pair.address, externalFeeReceiver.address) + await feeReceiver.setFeePercentageToExternalReceiver(pair.address, newPercentFeeToExternalReceiver) + const [externalReceiver, percentFeeToExternalReceiver] = await feeReceiver.externalFeeReceivers(pair.address) + expect(percentFeeToExternalReceiver).to.eq(newPercentFeeToExternalReceiver) + + await token0.transfer(wethToken0Pair.address, tokenAmount) + await WETH.transfer(wethToken0Pair.address, wethAmount) + await wethToken0Pair.mint(wallet.address, overrides) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(wallet.address, overrides) + + + let amountOut = await getAmountOut(pair, token0.address, amountIn); + + await token0.transfer(pair.address, amountIn) + await pair.swap(0, amountOut, wallet.address, '0x', overrides) + + amountOut = await getAmountOut(pair, token1.address, amountIn); + await token1.transfer(pair.address, amountIn) + await pair.swap(amountOut, 0, wallet.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair); + + await token0.transfer(pair.address, expandTo18Decimals(10)) + await token1.transfer(pair.address, expandTo18Decimals(10)) + await pair.mint(wallet.address, overrides) + + const protocolFeeLPToknesReceived = await pair.balanceOf(feeReceiver.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair.address)).div(await pair.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair.address)).div(await pair.totalSupply()); + + const wethFromToken0FromProtocolFee = await getAmountOut(wethToken0Pair, token0.address, token0FromProtocolFee); + const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); + + const protocolFeeReceiverBalanceBeforeTake = await provider.getBalance(protocolFeeReceiver.address) + const externalFeeReceiverBalanceBeforeTake = await provider.getBalance(externalFeeReceiver.address) + + await feeReceiver.connect(wallet).takeProtocolFee([pair.address], overrides) + + expect(await token0.balanceOf(feeReceiver.address)).to.eq(0) + expect(await token1.balanceOf(feeReceiver.address)).to.eq(0) + expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) + expect(await pair.balanceOf(feeReceiver.address)).to.eq(0) + expect(await provider.getBalance(feeReceiver.address)).to.eq(0) + + expect((await token0.balanceOf(dxdao.address))) + .to.eq(0) + expect((await token1.balanceOf(dxdao.address))) + .to.eq(0) + expect((await token0.balanceOf(externalFeeReceiver.address))) + .to.eq(0) + expect((await token1.balanceOf(externalFeeReceiver.address))) + .to.eq(0) + + const totalWethFromFees = wethFromToken0FromProtocolFee.add(wethFromToken1FromProtocolFee) + const wethToExternalReceiver = totalWethFromFees.mul(percentFeeToExternalReceiver).div(10000) + const wethToProtocolFeeReceiver = totalWethFromFees.sub(wethToExternalReceiver) + + expect((await provider.getBalance(protocolFeeReceiver.address)).div(ROUND_EXCEPTION)) + .to.be.eq((protocolFeeReceiverBalanceBeforeTake.add(wethToProtocolFeeReceiver)).div(ROUND_EXCEPTION)) + expect((await provider.getBalance(externalFeeReceiver.address)).div(ROUND_EXCEPTION)) + .to.be.eq((externalFeeReceiverBalanceBeforeTake.add(wethToExternalReceiver)).div(ROUND_EXCEPTION)) + }) + + // Where token0-token1, token0-WETH and token1-WETH pairs exist + it( + 'should split tkn0 & tkn1 fee when extracting from tkn0-tkn1 and swap to weth impossible', + async () => { + const tokenAmount = expandTo18Decimals(100); + const wethAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(10); + const newPercentFeeToExternalReceiver = 2000 //20% + + await token0.transfer(pair.address, tokenAmount) + await token1.transfer(pair.address, tokenAmount) + await pair.mint(wallet.address, overrides) + + // set external fee receiver + await feeReceiver.setExternalFeeReceiver(pair.address, externalFeeReceiver.address) + await feeReceiver.setFeePercentageToExternalReceiver(pair.address, newPercentFeeToExternalReceiver) + const [externalReceiver, percentFeeToExternalReceiver] = await feeReceiver.externalFeeReceivers(pair.address) + expect(percentFeeToExternalReceiver).to.eq(newPercentFeeToExternalReceiver) + + let amountOut = await getAmountOut(pair, token0.address, amountIn); + + await token0.transfer(pair.address, amountIn) + await pair.swap(0, amountOut, wallet.address, '0x', overrides) + + amountOut = await getAmountOut(pair, token1.address, amountIn); + await token1.transfer(pair.address, amountIn) + await pair.swap(amountOut, 0, wallet.address, '0x', overrides) + + amountOut = await getAmountOut(pair, token1.address, amountIn); + await token1.transfer(pair.address, amountIn) + await pair.swap(amountOut, 0, wallet.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair); + + await token0.transfer(pair.address, expandTo18Decimals(10)) + await token1.transfer(pair.address, expandTo18Decimals(10)) + await pair.mint(wallet.address, overrides) + + const protocolFeeLPToknesReceived = await pair.balanceOf(feeReceiver.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair.address)).div(await pair.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair.address)).div(await pair.totalSupply()); + + const dxdaoBalanceBeforeTake = await provider.getBalance(dxdao.address) + const protocolFeeReceiverBalanceBeforeTake = await provider.getBalance(protocolFeeReceiver.address) + const externalFeeReceiverBalanceBeforeTake = await provider.getBalance(externalFeeReceiver.address) + + await feeReceiver.connect(wallet).takeProtocolFee([pair.address], overrides) + + const tkn0ToExternalReceiver = token0FromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) + const tkn1ToExternalReceiver = token1FromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) + const tkn0ToProtocolFeeReceiver = token0FromProtocolFee.sub(tkn0ToExternalReceiver) + const tkn1ToProtocolFeeReceiver = token1FromProtocolFee.sub(tkn1ToExternalReceiver) + + expect(await token0.balanceOf(feeReceiver.address)).to.eq(0) + expect(await token1.balanceOf(feeReceiver.address)).to.eq(0) + expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) + expect(await pair.balanceOf(feeReceiver.address)).to.eq(0) + expect(await provider.getBalance(feeReceiver.address)).to.eq(0) + + // send token0 and token1 to fallbackreceiver and external fee receiver + expect((await token0.balanceOf(dxdao.address))) + .to.eq(tkn0ToProtocolFeeReceiver) + expect((await token1.balanceOf(dxdao.address))) + .to.eq(tkn1ToProtocolFeeReceiver) + expect((await token0.balanceOf(externalFeeReceiver.address))) + .to.eq(tkn0ToExternalReceiver) + expect((await token1.balanceOf(externalFeeReceiver.address))) + .to.eq(tkn1ToExternalReceiver) + + // should not change eth balance + expect((await provider.getBalance(dxdao.address))) + .to.eq(dxdaoBalanceBeforeTake) + expect((await provider.getBalance(protocolFeeReceiver.address))) + .to.eq(protocolFeeReceiverBalanceBeforeTake) + expect((await provider.getBalance(externalFeeReceiver.address))) + .to.eq(externalFeeReceiverBalanceBeforeTake) + }) + + // Where token0-token1, token0-WETH and token1-WETH pairs exist + it( + 'should update protocol fee and split tkn0 & tkn1 fee when extracting from tkn0-tkn1 and swap to weth impossible', + async () => { + const tokenAmount = expandTo18Decimals(100); + const wethAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(10); + const newPercentFeeToExternalReceiver = 2000 //20% + + await token0.transfer(pair.address, tokenAmount) + await token1.transfer(pair.address, tokenAmount) + await pair.mint(wallet.address, overrides) + + // set external fee receiver + await feeReceiver.setExternalFeeReceiver(pair.address, externalFeeReceiver.address) + await feeReceiver.setFeePercentageToExternalReceiver(pair.address, newPercentFeeToExternalReceiver) + const [externalReceiver, percentFeeToExternalReceiver] = await feeReceiver.externalFeeReceivers(pair.address) + expect(percentFeeToExternalReceiver).to.eq(newPercentFeeToExternalReceiver) + + let amountOut = await getAmountOut(pair, token0.address, amountIn); + + await token0.transfer(pair.address, amountIn) + await pair.swap(0, amountOut, wallet.address, '0x', overrides) + + amountOut = await getAmountOut(pair, token1.address, amountIn); + await token1.transfer(pair.address, amountIn) + await pair.swap(amountOut, 0, wallet.address, '0x', overrides) + + amountOut = await getAmountOut(pair, token1.address, amountIn); + await token1.transfer(pair.address, amountIn) + await pair.swap(amountOut, 0, wallet.address, '0x', overrides) + + // change protocol fee + await feeSetter.connect(dxdao).setProtocolFee(20) + expect(await factory.protocolFeeDenominator()).to.eq(20) + + amountOut = await getAmountOut(pair, token1.address, amountIn); + await token1.transfer(pair.address, amountIn) + await pair.swap(amountOut, 0, wallet.address, '0x', overrides) + + amountOut = await getAmountOut(pair, token1.address, amountIn); + await token1.transfer(pair.address, amountIn) + await pair.swap(amountOut, 0, wallet.address, '0x', overrides) + + + const protocolFeeToReceive = await calcProtocolFee(pair); + + await token0.transfer(pair.address, expandTo18Decimals(10)) + await token1.transfer(pair.address, expandTo18Decimals(10)) + await pair.mint(wallet.address, overrides) + + const protocolFeeLPToknesReceived = await pair.balanceOf(feeReceiver.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair.address)).div(await pair.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair.address)).div(await pair.totalSupply()); + + const dxdaoBalanceBeforeTake = await provider.getBalance(dxdao.address) + const protocolFeeReceiverBalanceBeforeTake = await provider.getBalance(protocolFeeReceiver.address) + const externalFeeReceiverBalanceBeforeTake = await provider.getBalance(externalFeeReceiver.address) + + await feeReceiver.connect(wallet).takeProtocolFee([pair.address], overrides) + + const tkn0ToExternalReceiver = token0FromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) + const tkn1ToExternalReceiver = token1FromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) + const tkn0ToProtocolFeeReceiver = token0FromProtocolFee.sub(tkn0ToExternalReceiver) + const tkn1ToProtocolFeeReceiver = token1FromProtocolFee.sub(tkn1ToExternalReceiver) + + expect(await token0.balanceOf(feeReceiver.address)).to.eq(0) + expect(await token1.balanceOf(feeReceiver.address)).to.eq(0) + expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) + expect(await pair.balanceOf(feeReceiver.address)).to.eq(0) + expect(await provider.getBalance(feeReceiver.address)).to.eq(0) + + // send token0 and token1 to fallbackreceiver and external fee receiver + expect((await token0.balanceOf(dxdao.address))) + .to.eq(tkn0ToProtocolFeeReceiver) + expect((await token1.balanceOf(dxdao.address))) + .to.eq(tkn1ToProtocolFeeReceiver) + expect((await token0.balanceOf(externalFeeReceiver.address))) + .to.eq(tkn0ToExternalReceiver) + expect((await token1.balanceOf(externalFeeReceiver.address))) + .to.eq(tkn1ToExternalReceiver) + + // should not change eth balance + expect((await provider.getBalance(dxdao.address))) + .to.eq(dxdaoBalanceBeforeTake) + expect((await provider.getBalance(protocolFeeReceiver.address))) + .to.eq(protocolFeeReceiverBalanceBeforeTake) + expect((await provider.getBalance(externalFeeReceiver.address))) + .to.eq(externalFeeReceiverBalanceBeforeTake) + }) + + // Where tokenA-tokenB, tokenC-tokenD and tokenC-WETH pairs exist + it( + 'should receive tokens A,B,D and ETH (tokenC swapped) from tknA-tknB and tknC-tknD pairs', + async () => { + const tokenAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(50); + + // Set up tokenA-tokenB + const tokenA = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) + const tokenB = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) + + await factory.createPair(tokenA.address, tokenB.address); + const tokenATokenBPair = new Contract( + await factory.getPair( + (tokenA.address < tokenB.address) ? tokenA.address : tokenB.address, + (tokenA.address < tokenB.address) ? tokenB.address : tokenA.address + ), JSON.stringify(DXswapPair.abi), provider + ).connect(wallet) + + await tokenA.transfer(tokenATokenBPair.address, tokenAmount) + await tokenB.transfer(tokenATokenBPair.address, tokenAmount) + await tokenATokenBPair.mint(wallet.address, overrides) + + let amountOut = await getAmountOut(tokenATokenBPair, tokenA.address, amountIn); + await tokenA.transfer(tokenATokenBPair.address, amountIn) + await tokenATokenBPair.swap( + (tokenA.address < tokenB.address) ? 0 : amountOut, + (tokenA.address < tokenB.address) ? amountOut : 0, + wallet.address, '0x', overrides + ) + + amountOut = await getAmountOut(tokenATokenBPair, tokenB.address, amountIn); + await tokenB.transfer(tokenATokenBPair.address, amountIn) + await tokenATokenBPair.swap( + (tokenA.address < tokenB.address) ? amountOut : 0, + (tokenA.address < tokenB.address) ? 0 : amountOut, + wallet.address, '0x', overrides + ) + + let protocolFeeToReceive = await calcProtocolFee(tokenATokenBPair); + + await tokenA.transfer(tokenATokenBPair.address, expandTo18Decimals(10)) + await tokenB.transfer(tokenATokenBPair.address, expandTo18Decimals(10)) + await tokenATokenBPair.mint(wallet.address, overrides) + + const protocolFeeLPTokenAtokenBPair = await tokenATokenBPair.balanceOf(feeReceiver.address); + expect(protocolFeeLPTokenAtokenBPair.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + // Set up tokenC-tokenD pair + const tokenC = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) + const tokenD = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) + + await factory.createPair(tokenC.address, tokenD.address); + const tokenCTokenDPair = new Contract( + await factory.getPair( + (tokenC.address < tokenD.address) ? tokenC.address : tokenD.address, + (tokenC.address < tokenD.address) ? tokenD.address : tokenC.address + ), JSON.stringify(DXswapPair.abi), provider + ).connect(wallet) + + + await tokenC.transfer(tokenCTokenDPair.address, tokenAmount) + await tokenD.transfer(tokenCTokenDPair.address, tokenAmount) + await tokenCTokenDPair.mint(wallet.address, overrides) + + // Set up tokenC-WETH pair + await factory.createPair(tokenC.address, WETH.address); + const tokenCWETHPair = new Contract( + await factory.getPair( + (tokenC.address < WETH.address) ? tokenC.address : WETH.address, + (tokenC.address < WETH.address) ? WETH.address : tokenC.address + ), JSON.stringify(DXswapPair.abi), provider + ).connect(wallet) + await tokenC.transfer(tokenCWETHPair.address, tokenAmount) + await WETH.transfer(tokenCWETHPair.address, tokenAmount) + await tokenCWETHPair.mint(wallet.address, overrides) + + // swap + amountOut = await getAmountOut(tokenCTokenDPair, tokenC.address, amountIn); + await tokenC.transfer(tokenCTokenDPair.address, amountIn) + await tokenCTokenDPair.swap( + (tokenC.address < tokenD.address) ? 0 : amountOut, + (tokenC.address < tokenD.address) ? amountOut : 0, + wallet.address, '0x', overrides + ) + + amountOut = await getAmountOut(tokenCTokenDPair, tokenD.address, amountIn); + await tokenD.transfer(tokenCTokenDPair.address, amountIn) + await tokenCTokenDPair.swap( + (tokenC.address < tokenD.address) ? amountOut : 0, + (tokenC.address < tokenD.address) ? 0 : amountOut, + wallet.address, '0x', overrides + ) + + protocolFeeToReceive = await calcProtocolFee(tokenCTokenDPair); + + await tokenC.transfer(tokenCTokenDPair.address, expandTo18Decimals(10)) + await tokenD.transfer(tokenCTokenDPair.address, expandTo18Decimals(10)) + await tokenCTokenDPair.mint(wallet.address, overrides) + + const protocolFeeLPTokenCtokenDPair = await tokenCTokenDPair.balanceOf(feeReceiver.address); + expect(protocolFeeLPTokenCtokenDPair.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const tokenAFromProtocolFee = protocolFeeLPTokenAtokenBPair + .mul(await tokenA.balanceOf(tokenATokenBPair.address)).div(await tokenATokenBPair.totalSupply()); + const tokenBFromProtocolFee = protocolFeeLPTokenAtokenBPair + .mul(await tokenB.balanceOf(tokenATokenBPair.address)).div(await tokenATokenBPair.totalSupply()); + const tokenCFromProtocolFee = protocolFeeLPTokenCtokenDPair + .mul(await tokenC.balanceOf(tokenCTokenDPair.address)).div(await tokenCTokenDPair.totalSupply()); + const tokenDFromProtocolFee = protocolFeeLPTokenCtokenDPair + .mul(await tokenD.balanceOf(tokenCTokenDPair.address)).div(await tokenCTokenDPair.totalSupply()); + + + const wethFromTokenCFromProtocolFee = await getAmountOut(tokenCWETHPair, tokenC.address, tokenCFromProtocolFee); + const protocolFeeReceiverBalance = await provider.getBalance(protocolFeeReceiver.address) + + await expect(feeReceiver.connect(wallet).takeProtocolFee([tokenATokenBPair.address, tokenCTokenDPair.address], overrides) + ).to.emit(feeReceiver, 'TakeProtocolFee').withArgs(wallet.address, protocolFeeReceiver.address, 2) + + expect(await tokenA.balanceOf(feeReceiver.address)).to.eq(0) + expect(await tokenB.balanceOf(feeReceiver.address)).to.eq(0) + expect(await tokenC.balanceOf(feeReceiver.address)).to.eq(0) + expect(await tokenD.balanceOf(feeReceiver.address)).to.eq(0) + expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) + expect(await pair.balanceOf(feeReceiver.address)).to.eq(0) + expect(await provider.getBalance(feeReceiver.address)).to.eq(0) + + expect((await tokenA.balanceOf(dxdao.address))) + .to.be.eq(tokenAFromProtocolFee) + expect((await tokenB.balanceOf(dxdao.address))) + .to.be.eq(tokenBFromProtocolFee) + expect((await tokenD.balanceOf(dxdao.address))) + .to.be.eq(tokenDFromProtocolFee) + expect((await tokenC.balanceOf(dxdao.address))) + .to.eq(0) + expect((await provider.getBalance(protocolFeeReceiver.address))) + .to.be.eq(protocolFeeReceiverBalance.add(wethFromTokenCFromProtocolFee)) + }) + + it( + 'should receive tkn0 and eth if split % was updated', + async () => { + const tokenAmount = expandTo18Decimals(100); + const wethAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(10); + + await token0.transfer(pair.address, tokenAmount) + await token1.transfer(pair.address, tokenAmount) + await pair.mint(wallet.address, overrides) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(wallet.address, overrides) + + let amountOut = await getAmountOut(pair, token0.address, amountIn); + + await token0.transfer(pair.address, amountIn) + await pair.swap(0, amountOut, wallet.address, '0x', overrides) + + amountOut = await getAmountOut(pair, token1.address, amountIn); + await token1.transfer(pair.address, amountIn) + await pair.swap(amountOut, 0, wallet.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair); + + await token0.transfer(pair.address, expandTo18Decimals(10)) + await token1.transfer(pair.address, expandTo18Decimals(10)) + await pair.mint(wallet.address, overrides) + + const protocolFeeLPToknesReceived = await pair.balanceOf(feeReceiver.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair.address)).div(await pair.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair.address)).div(await pair.totalSupply()); + + const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); + const protocolFeeReceiverBalanceBeforeTake = await provider.getBalance(protocolFeeReceiver.address) + + // set external fee receiver + await feeReceiver.setExternalFeeReceiver(pair.address, externalFeeReceiver.address) + await feeReceiver.setFeePercentageToExternalReceiver(pair.address, 2000) + const [externalReceiver, percentFeeToExternalReceiver] = await feeReceiver.externalFeeReceivers(pair.address) + expect(percentFeeToExternalReceiver).to.eq(2000) + + expect(await token0.balanceOf(feeReceiver.address)).to.eq(0) + expect(await token1.balanceOf(feeReceiver.address)).to.eq(0) + expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) + expect(await pair.balanceOf(feeReceiver.address)).to.eq(0) + expect(await provider.getBalance(feeReceiver.address)).to.eq(0) + + expect((await token0.balanceOf(dxdao.address))) + .to.be.eq(token0FromProtocolFee) + expect((await provider.getBalance(protocolFeeReceiver.address))) + .to.be.eq(protocolFeeReceiverBalanceBeforeTake.add(wethFromToken1FromProtocolFee)) + }) + + // Where pairs with weth don't exist + it( + 'should split and receive only tokens when extracting fee from tokenA-tokenB pair that has no path to WETH', + async () => { + const tokenA = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) + const tokenB = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) + + const tokenAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(50); + + await factory.createPair(tokenA.address, tokenB.address); + const tokenATokenBPair = new Contract( + await factory.getPair( + (tokenA.address < tokenB.address) ? tokenA.address : tokenB.address, + (tokenA.address < tokenB.address) ? tokenB.address : tokenA.address + ), JSON.stringify(DXswapPair.abi), provider + ).connect(wallet) + + // set external fee receiver + await feeReceiver.setExternalFeeReceiver(tokenATokenBPair.address, externalFeeReceiver.address) + await feeReceiver.setFeePercentageToExternalReceiver(tokenATokenBPair.address, 1000) + + const [externalReceiver, percentFeeToExternalReceiver] = await feeReceiver.externalFeeReceivers(tokenATokenBPair.address) + expect(externalReceiver).to.eq(externalFeeReceiver.address) + expect(percentFeeToExternalReceiver).to.eq(1000) + + await tokenA.transfer(tokenATokenBPair.address, tokenAmount) + await tokenB.transfer(tokenATokenBPair.address, tokenAmount) + await tokenATokenBPair.mint(wallet.address, overrides) + + let amountOut = await getAmountOut(tokenATokenBPair, tokenA.address, amountIn); + await tokenA.transfer(tokenATokenBPair.address, amountIn) + await tokenATokenBPair.swap( + (tokenA.address < tokenB.address) ? 0 : amountOut, + (tokenA.address < tokenB.address) ? amountOut : 0, + wallet.address, '0x', overrides + ) + + amountOut = await getAmountOut(tokenATokenBPair, tokenB.address, amountIn); + await tokenB.transfer(tokenATokenBPair.address, amountIn) + await tokenATokenBPair.swap( + (tokenA.address < tokenB.address) ? amountOut : 0, + (tokenA.address < tokenB.address) ? 0 : amountOut, + wallet.address, '0x', overrides + ) + + const protocolFeeToReceive = await calcProtocolFee(tokenATokenBPair); + + await tokenA.transfer(tokenATokenBPair.address, expandTo18Decimals(10)) + await tokenB.transfer(tokenATokenBPair.address, expandTo18Decimals(10)) + await tokenATokenBPair.mint(wallet.address, overrides) + + const protocolFeeLPTokenAtokenBPair = await tokenATokenBPair.balanceOf(feeReceiver.address); + expect(protocolFeeLPTokenAtokenBPair.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const tokenAFromProtocolFee = protocolFeeLPTokenAtokenBPair + .mul(await tokenA.balanceOf(tokenATokenBPair.address)).div(await tokenATokenBPair.totalSupply()); + const tokenBFromProtocolFee = protocolFeeLPTokenAtokenBPair + .mul(await tokenB.balanceOf(tokenATokenBPair.address)).div(await tokenATokenBPair.totalSupply()); + + const protocolFeeReceiverBalance = await provider.getBalance(protocolFeeReceiver.address) + const externalBalance = await provider.getBalance(externalFeeReceiver.address) + + await feeReceiver.connect(wallet).takeProtocolFee([tokenATokenBPair.address], overrides) + + const tknAExternalReceiver = tokenAFromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) + const tknBExternalReceiver = tokenBFromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) + const tknAProtocolFeeReceiver = tokenAFromProtocolFee.sub(tknAExternalReceiver) + const tknBProtocolFeeReceiver = tokenBFromProtocolFee.sub(tknBExternalReceiver) + + expect(await tokenA.balanceOf(feeReceiver.address)).to.eq(0) + expect(await tokenB.balanceOf(feeReceiver.address)).to.eq(0) + expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) + expect(await tokenATokenBPair.balanceOf(feeReceiver.address)).to.eq(0) + expect(await provider.getBalance(feeReceiver.address)).to.eq(0) + + expect((await provider.getBalance(protocolFeeReceiver.address))) + .to.be.eq(protocolFeeReceiverBalance) + expect((await provider.getBalance(externalFeeReceiver.address))) + .to.be.eq(externalBalance) + expect((await tokenA.balanceOf(dxdao.address))) + .to.be.eq(tknAProtocolFeeReceiver) + expect((await tokenB.balanceOf(dxdao.address))) + .to.be.eq(tknBProtocolFeeReceiver) + expect((await tokenA.balanceOf(externalFeeReceiver.address))) + .to.be.eq(tknAExternalReceiver) + expect((await tokenB.balanceOf(externalFeeReceiver.address))) + .to.be.eq(tknBExternalReceiver) + }) + + // Where token0-token1, token0-WETH and token1-WETH pairs exist + it( + 'should swap tokens, split and sent to ethReceiver when extracting fee from token0-token1', + async () => { + const tokenAmount = expandTo18Decimals(100); + const wethAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(10); + + // set external fee receiver + await feeReceiver.setExternalFeeReceiver(pair.address, externalFeeReceiver.address) + await feeReceiver.setFeePercentageToExternalReceiver(pair.address, 3000) + + const [externalReceiver, percentFeeToExternalReceiver] = await feeReceiver.externalFeeReceivers(pair.address) + expect(externalReceiver).to.eq(externalFeeReceiver.address) + expect(percentFeeToExternalReceiver).to.eq(3000) + + await token0.transfer(pair.address, tokenAmount) + await token1.transfer(pair.address, tokenAmount) + await pair.mint(wallet.address, overrides) + + await token0.transfer(wethToken0Pair.address, tokenAmount) + await WETH.transfer(wethToken0Pair.address, wethAmount) + await wethToken0Pair.mint(wallet.address, overrides) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(wallet.address, overrides) + + let amountOut = await getAmountOut(pair, token0.address, amountIn); + await token0.transfer(pair.address, amountIn) + await pair.swap(0, amountOut, wallet.address, '0x', overrides) + + amountOut = await getAmountOut(pair, token1.address, amountIn); + await token1.transfer(pair.address, amountIn) + await pair.swap(amountOut, 0, wallet.address, '0x', overrides) + + // estimate protocol fee received + const protocolFeeToReceive = await calcProtocolFee(pair); + + await token0.transfer(pair.address, expandTo18Decimals(10)) + await token1.transfer(pair.address, expandTo18Decimals(10)) + await pair.mint(wallet.address, overrides) + + const protocolFeeLPToknesReceived = await pair.balanceOf(feeReceiver.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + // calculate tkn0 & tkn1 amount based on LP + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair.address)).div(await pair.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair.address)).div(await pair.totalSupply()); + + const dxdaoBalanceBeforeTake = await provider.getBalance(dxdao.address) + const protocolFeeReceiverBalanceBeforeTake = await provider.getBalance(protocolFeeReceiver.address) + const externalFeeReceiverBalanceBeforeTake = await provider.getBalance(externalFeeReceiver.address) + + // estimate weth from tokens + const wethFromToken0 = await getAmountOut(wethToken0Pair, token0.address, token0FromProtocolFee); + const wethFromToken1 = await getAmountOut(wethToken1Pair, token0.address, token1FromProtocolFee); + + // set external fee receiver + await feeReceiver.setFeePercentageToExternalReceiver(pair.address, 2000) + const [newExternalReceiver, newPercentFeeToExternalReceiver] = await feeReceiver.externalFeeReceivers(pair.address) + expect(newExternalReceiver).to.eq(externalFeeReceiver.address) + expect(newPercentFeeToExternalReceiver).to.eq(2000) + + // split weth to avatar and external Receiver with OLD fee percentage + const wethTkn0ToExternalReceiver = wethFromToken0.mul(percentFeeToExternalReceiver).div(10000) + const wethTkn1ToExternalReceiver = wethFromToken1.mul(percentFeeToExternalReceiver).div(10000) + const tkn0ToProtocolFeeReceiver = wethFromToken0.sub(wethTkn0ToExternalReceiver) + const tkn1ToProtocolFeeReceiver = wethFromToken1.sub(wethTkn1ToExternalReceiver) + + // weth to external Receiver after token-weth swap + const wethExternal = wethTkn0ToExternalReceiver.add(wethTkn1ToExternalReceiver) + + // weth to dao after token-weth swap + const wethFeeReceiver = tkn0ToProtocolFeeReceiver.add(tkn1ToProtocolFeeReceiver) + + expect(await token0.balanceOf(feeReceiver.address)).to.eq(0) + expect(await token1.balanceOf(feeReceiver.address)).to.eq(0) + expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) + expect(await pair.balanceOf(feeReceiver.address)).to.eq(0) + expect(await provider.getBalance(feeReceiver.address)).to.eq(0) + + // dont send token0 and token1 to fallbackreceiver and external fee receiver + expect((await token0.balanceOf(dxdao.address))) + .to.eq(0) + expect((await token1.balanceOf(dxdao.address))) + .to.eq(0) + expect((await token0.balanceOf(externalFeeReceiver.address))) + .to.eq(0) + expect((await token1.balanceOf(externalFeeReceiver.address))) + .to.eq(0) + + // should change eth balance for avatar and external Receiver + expect((await provider.getBalance(protocolFeeReceiver.address))) + .to.be.eq(protocolFeeReceiverBalanceBeforeTake.add(wethFeeReceiver)) + expect((await provider.getBalance(externalFeeReceiver.address))) + .to.be.eq(externalFeeReceiverBalanceBeforeTake.add(wethExternal)) + + // should not send eth to avatar (gas used for updating split %) + expect((await provider.getBalance(dxdao.address))) + .to.be.lte(dxdaoBalanceBeforeTake) + }) + + // Where token0-token1 and token1-WETH pairs exist + it( + 'should emit TakeProtocolFee event', + async () => { + const tokenAmount = expandTo18Decimals(100); + const wethAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(10); + + await token0.transfer(pair.address, tokenAmount) + await token1.transfer(pair.address, tokenAmount) + await pair.mint(wallet.address, overrides) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(wallet.address, overrides) + + let amountOut = await getAmountOut(pair, token0.address, amountIn); + await token0.transfer(pair.address, amountIn) + await pair.swap(0, amountOut, wallet.address, '0x', overrides) + + amountOut = await getAmountOut(wethToken1Pair, token1.address, amountIn); + await token1.transfer(wethToken1Pair.address, amountIn) + await wethToken1Pair.swap(0, amountOut, wallet.address, '0x', overrides) + + await token0.transfer(pair.address, expandTo18Decimals(10)) + await token1.transfer(pair.address, expandTo18Decimals(10)) + await pair.mint(wallet.address, overrides) + + await token1.transfer(wethToken1Pair.address, expandTo18Decimals(10)) + await WETH.transfer(wethToken1Pair.address, expandTo18Decimals(10)) + await wethToken1Pair.mint(wallet.address, overrides) + + await expect(feeReceiver.connect(wallet).takeProtocolFee([pair.address, wethToken1Pair.address], overrides) + ).to.emit(feeReceiver, 'TakeProtocolFee').withArgs(wallet.address, protocolFeeReceiver.address, 2) + }) }) diff --git a/test/shared/fixtures.ts b/test/shared/fixtures.ts index faa508f5e..c81375916 100644 --- a/test/shared/fixtures.ts +++ b/test/shared/fixtures.ts @@ -27,9 +27,9 @@ const overrides = { export async function factoryFixture(provider: Web3Provider, [dxdao, ethReceiver]: Wallet[]): Promise { const WETH = await deployContract(dxdao, WETH9) const dxSwapDeployer = await deployContract( - dxdao, DXswapDeployer, [ ethReceiver.address, dxdao.address, WETH.address, [], [], [], ], overrides + dxdao, DXswapDeployer, [ethReceiver.address, dxdao.address, WETH.address, [], [], [],], overrides ) - await dxdao.sendTransaction({to: dxSwapDeployer.address, gasPrice: 0, value: 1}) + await dxdao.sendTransaction({ to: dxSwapDeployer.address, gasPrice: 0, value: 1 }) const deployTx = await dxSwapDeployer.deploy() const deployTxReceipt = await provider.getTransactionReceipt(deployTx.hash); const factoryAddress = deployTxReceipt.logs !== undefined @@ -47,47 +47,52 @@ interface PairFixture extends FactoryFixture { token0: Contract token1: Contract pair: Contract - wethPair: Contract + wethToken0Pair: Contract + wethToken1Pair: Contract } export async function pairFixture(provider: Web3Provider, [dxdao, wallet, ethReceiver]: Wallet[]): Promise { const tokenA = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) const tokenB = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) const WETH = await deployContract(wallet, WETH9) - await WETH.deposit({value: expandTo18Decimals(1000)}) + await WETH.deposit({ value: expandTo18Decimals(1000) }) const token0 = tokenA.address < tokenB.address ? tokenA : tokenB const token1 = token0.address === tokenA.address ? tokenB : tokenA - + const dxSwapDeployer = await deployContract( dxdao, DXswapDeployer, [ - ethReceiver.address, - dxdao.address, - WETH.address, - [token0.address, token1.address], - [token1.address, WETH.address], - [15, 15], - ], overrides + ethReceiver.address, + dxdao.address, + WETH.address, + [token0.address, token0.address, token1.address], + [token1.address, WETH.address, WETH.address], + [15, 15, 15], + ], overrides ) - await dxdao.sendTransaction({to: dxSwapDeployer.address, gasPrice: 0, value: 1}) + await dxdao.sendTransaction({ to: dxSwapDeployer.address, gasPrice: 0, value: 1 }) const deployTx = await dxSwapDeployer.deploy() const deployTxReceipt = await provider.getTransactionReceipt(deployTx.hash); const factoryAddress = deployTxReceipt.logs !== undefined ? defaultAbiCoder.decode(['address'], deployTxReceipt.logs[0].data)[0] : null - + const factory = new Contract(factoryAddress, JSON.stringify(DXswapFactory.abi), provider).connect(dxdao) const feeSetterAddress = await factory.feeToSetter() const feeSetter = new Contract(feeSetterAddress, JSON.stringify(DXswapFeeSetter.abi), provider).connect(dxdao) const feeReceiverAddress = await factory.feeTo() const feeReceiver = new Contract(feeReceiverAddress, JSON.stringify(DXswapFeeReceiver.abi), provider).connect(dxdao) const pair = new Contract( - await factory.getPair(token0.address, token1.address), - JSON.stringify(DXswapPair.abi), provider - ).connect(dxdao) - const wethPair = new Contract( - await factory.getPair(token1.address, WETH.address), - JSON.stringify(DXswapPair.abi), provider - ).connect(dxdao) + await factory.getPair(token0.address, token1.address), + JSON.stringify(DXswapPair.abi), provider + ).connect(dxdao) + const wethToken0Pair = new Contract( + await factory.getPair(token0.address, WETH.address), + JSON.stringify(DXswapPair.abi), provider + ).connect(dxdao) + const wethToken1Pair = new Contract( + await factory.getPair(token1.address, WETH.address), + JSON.stringify(DXswapPair.abi), provider + ).connect(dxdao) - return { factory, feeSetter, feeReceiver, WETH, token0, token1, pair, wethPair } + return { factory, feeSetter, feeReceiver, WETH, token0, token1, pair, wethToken0Pair, wethToken1Pair } } From 48a0c85b3c7816f51752c7bca01f18a02eb85753 Mon Sep 17 00:00:00 2001 From: Oskar Karcz Date: Wed, 11 May 2022 16:19:13 +0200 Subject: [PATCH 03/11] test: increase gas limit --- test/DXswapFeeSetter.spec.ts | 14 ++--- test/DXswapPair.spec.ts | 20 +++---- test/DynamicFees.spec.ts | 106 +++++++++++++++++------------------ 3 files changed, 70 insertions(+), 70 deletions(-) diff --git a/test/DXswapFeeSetter.spec.ts b/test/DXswapFeeSetter.spec.ts index 4ca390acd..58e05ed94 100644 --- a/test/DXswapFeeSetter.spec.ts +++ b/test/DXswapFeeSetter.spec.ts @@ -21,7 +21,7 @@ describe('DXswapFeeSetter', () => { const provider = new MockProvider({ hardfork: 'istanbul', mnemonic: 'horn horn horn horn horn horn horn horn horn horn horn horn', - gasLimit: 9999999 + gasLimit: 15000000 }) const [dxdao, pairOwner, protocolFeeReceiver, other] = provider.getWallets() const loadFixture = createFixtureLoader(provider, [dxdao, other, protocolFeeReceiver]) @@ -57,24 +57,24 @@ describe('DXswapFeeSetter', () => { await feeSetter.connect(dxdao).setFeeToSetter(other.address) await expect(feeSetter.connect(dxdao).setFeeTo(dxdao.address)).to.be.revertedWith('DXswapFactory: FORBIDDEN') }) - + it('setProtocolFee', async () => { // Should not allow to setProtocolFee from other address taht is not owner calling feeSetter await expect(feeSetter.connect(other).setProtocolFee(5)).to.be.revertedWith('DXswapFeeSetter: FORBIDDEN') await feeSetter.connect(dxdao).setProtocolFee(5) expect(await factory.protocolFeeDenominator()).to.eq(5) - + // If feeToSetter changes it will will fail in DXswapFactory check when trying to setProtocolFee from FeeSetter. await feeSetter.connect(dxdao).setFeeToSetter(other.address) await expect(feeSetter.connect(dxdao).setProtocolFee(5)).to.be.revertedWith('DXswapFactory: FORBIDDEN') }) - + it('setSwapFee', async () => { // Should not allow to setSwapFee from other address taht is not owner calling feeSetter await expect(feeSetter.connect(other).setSwapFee(pair.address, 5)).to.be.revertedWith('DXswapFeeSetter: FORBIDDEN') await feeSetter.connect(dxdao).setSwapFee(pair.address, 5) expect(await pair.swapFee()).to.eq(5) - + // If ownership of the pair is given to other address both addresses (FeeSetter owner and Pair owner) should be // able to change the swap fee await expect(feeSetter.connect(pairOwner).setSwapFee(pair.address, 5)).to.be.revertedWith('DXswapFeeSetter: FORBIDDEN') @@ -83,7 +83,7 @@ describe('DXswapFeeSetter', () => { expect(await pair.swapFee()).to.eq(3) await feeSetter.connect(dxdao).setSwapFee(pair.address, 7) expect(await pair.swapFee()).to.eq(7) - + // If ownership of the pair is removed by setting it to zero the pair owner should not be able to change the // fee anymore. await feeSetter.connect(dxdao).transferPairOwnership(pair.address, AddressZero) @@ -93,7 +93,7 @@ describe('DXswapFeeSetter', () => { await feeSetter.connect(dxdao).setFeeToSetter(other.address) await expect(feeSetter.connect(dxdao).setSwapFee(pair.address, 5)).to.be.revertedWith('DXswapFactory: FORBIDDEN') }) - + it('setFeeToSetter', async () => { // Should not allow to setFeeToSetter from other address taht is not owner calling feeSetter await expect(feeSetter.connect(other).setFeeToSetter(other.address)).to.be.revertedWith('DXswapFeeSetter: FORBIDDEN') diff --git a/test/DXswapPair.spec.ts b/test/DXswapPair.spec.ts index e37c17e65..07c66612c 100644 --- a/test/DXswapPair.spec.ts +++ b/test/DXswapPair.spec.ts @@ -14,14 +14,14 @@ const FEE_DENOMINATOR = bigNumberify(10).pow(4) chai.use(solidity) const overrides = { - gasLimit: 9999999 + gasLimit: 15000000 } describe('DXswapPair', () => { const provider = new MockProvider({ hardfork: 'istanbul', mnemonic: 'horn horn horn horn horn horn horn horn horn horn horn horn', - gasLimit: 9999999 + gasLimit: 15000000 }) const [dxdao, wallet, protocolFeeReceiver, other] = provider.getWallets() const loadFixture = createFixtureLoader(provider, [dxdao, wallet, protocolFeeReceiver]) @@ -267,18 +267,18 @@ describe('DXswapPair', () => { await pair.connect(wallet).burn(wallet.address, overrides) expect(await pair.totalSupply()).to.eq(MINIMUM_LIQUIDITY) }) - + it('feeTo:off, swapFee:0 attack', async () => { await feeSetter.setSwapFee(pair.address, 0) const token0Amount = expandTo18Decimals(1000) const token1Amount = expandTo18Decimals(1000) await addLiquidity(token0Amount, token1Amount) - + expect(await token0.balanceOf(pair.address)).to.eq(expandTo18Decimals(1000)) expect(await token1.balanceOf(pair.address)).to.eq(expandTo18Decimals(1000)) expect(await token0.balanceOf(wallet.address)).to.eq(expandTo18Decimals(9000)) expect(await token1.balanceOf(wallet.address)).to.eq(expandTo18Decimals(9000)) - + // Attack pool await token1.transfer(pair.address, expandTo18Decimals(1)) await expect(pair.connect(wallet).swap(expandTo18Decimals(999), 0, wallet.address, '0x', overrides)).to.be.revertedWith( @@ -292,8 +292,8 @@ describe('DXswapPair', () => { expect(await token0.balanceOf(pair.address)).to.eq(expandTo18Decimals(1001)) expect(await token1.balanceOf(pair.address)).to.eq(expandTo18Decimals(1001)) expect(await token0.balanceOf(wallet.address)).to.eq(expandTo18Decimals(8999)) - expect(await token1.balanceOf(wallet.address)).to.eq(expandTo18Decimals(8999)) - + expect(await token1.balanceOf(wallet.address)).to.eq(expandTo18Decimals(8999)) + const expectedLiquidity = expandTo18Decimals(1000) await pair.connect(wallet).transfer(pair.address, expectedLiquidity.sub(MINIMUM_LIQUIDITY)) await pair.connect(wallet).burn(wallet.address, overrides) @@ -323,7 +323,7 @@ describe('DXswapPair', () => { expect(await token0.balanceOf(pair.address)).to.eq(bigNumberify(1000).add('149701010218466')) expect(await token1.balanceOf(pair.address)).to.eq(bigNumberify(1000).add('150000112387782')) }) - + it('feeTo:on:0.025', async () => { await feeSetter.setFeeTo(other.address) await feeSetter.setProtocolFee(11) @@ -354,7 +354,7 @@ describe('DXswapPair', () => { expect((await token1.balanceOf(pair.address)).div(ROUND_EXCEPTION)) .to.eq(bigNumberify(1000).add('125000093656485').div(ROUND_EXCEPTION)) }) - + it('feeTo:on:0.1:swapFee:0.20', async () => { await feeSetter.setFeeTo(other.address) await feeSetter.setProtocolFee(1) @@ -386,7 +386,7 @@ describe('DXswapPair', () => { expect((await token1.balanceOf(pair.address)).div(ROUND_EXCEPTION)) .to.eq(bigNumberify(1000).add('4759687103171089').div(ROUND_EXCEPTION)) }) - + it('fail on trying to set swap fee higher than 10%', async () => { await feeSetter.setSwapFee(pair.address, 0) await feeSetter.setSwapFee(pair.address, 1000) diff --git a/test/DynamicFees.spec.ts b/test/DynamicFees.spec.ts index 65023bee8..25c295acb 100644 --- a/test/DynamicFees.spec.ts +++ b/test/DynamicFees.spec.ts @@ -16,14 +16,14 @@ const ROUND_EXCEPTION = bigNumberify(10000) chai.use(solidity) const overrides = { - gasLimit: 9999999 + gasLimit: 15000000 } describe('DynamicFees', () => { const provider = new MockProvider({ hardfork: 'istanbul', mnemonic: 'horn horn horn horn horn horn horn horn horn horn horn horn', - gasLimit: 9999999 + gasLimit: 15000000 }) const [dxdao, wallet, protocolFeeReceiver, other] = provider.getWallets() const loadFixture = createFixtureLoader(provider, [dxdao, wallet, protocolFeeReceiver]) @@ -49,13 +49,13 @@ describe('DynamicFees', () => { await token1.transfer(pair.address, token1Amount) await pair.mint(wallet.address, overrides) } - + // Calculate the total supply based on actual reserves async function calcTotalSupply() { const [token0Reserve, token1Reserve, _] = await pair.getReserves() return bigNumberify(Math.sqrt(token0Reserve.mul(token1Reserve)).toString()) - } - + } + // Calculate how much will be payed from liquidity as protocol fee in the next mint/burn async function calcProtocolFee() { const [token0Reserve, token1Reserve, _] = await pair.getReserves() @@ -67,7 +67,7 @@ describe('DynamicFees', () => { if (feeTo != AddressZero) { // Check for math overflow when dealing with big big balances if (Math.sqrt((token0Reserve).mul(token1Reserve)) > Math.pow(10, 19)) { - const denominator = 10 ** ( Number(Math.log10(Math.sqrt((token0Reserve).mul(token1Reserve))).toFixed(0)) - 18); + const denominator = 10 ** (Number(Math.log10(Math.sqrt((token0Reserve).mul(token1Reserve))).toFixed(0)) - 18); rootK = bigNumberify((Math.sqrt( token0Reserve.mul(token1Reserve) ) / denominator).toString()) @@ -76,22 +76,22 @@ describe('DynamicFees', () => { rootK = bigNumberify(Math.sqrt((token0Reserve).mul(token1Reserve)).toString()) rootKLast = bigNumberify(Math.sqrt(kLast).toString()) } - + return (totalSupply.mul(rootK.sub(rootKLast))) .div(rootK.mul(protocolFeeDenominator).add(rootKLast)) } else { return bigNumberify(0) } - } - + } + // Calculate the output of tokens for an specific input - async function calcOutput(token0In : BigNumber, token1In: BigNumber) { + async function calcOutput(token0In: BigNumber, token1In: BigNumber) { const reserves = await pair.getReserves() const token0Reserve = reserves[0] const token1Reserve = reserves[1] const swapFee = await pair.swapFee() const kReserve = token0Reserve.mul(token1Reserve) - + const token0Out = token0Reserve.sub( kReserve.div(token1Reserve.add(token1In.mul(SWAP_DEN.sub(swapFee)).div(SWAP_DEN))) ).sub(bigNumberify(1)) @@ -101,18 +101,18 @@ describe('DynamicFees', () => { return [token0Out < 0 ? bigNumberify(0) : token0Out, token1Out < 0 ? bigNumberify(0) : token1Out]; } - + // Execute a transfer and swap, since the tokens has to be transfered before traded - async function execTransferAndSwap(_token0In : BigNumber, _token1In: BigNumber) { + async function execTransferAndSwap(_token0In: BigNumber, _token1In: BigNumber) { const reserveBefore = await pair.getReserves() - + if (_token0In.gt(0)) await token0.transfer(pair.address, _token0In) if (_token1In.gt(0)) await token1.transfer(pair.address, _token1In) const outputs = await calcOutput(_token0In, _token1In); await pair.swap(outputs[0], outputs[1], wallet.address, '0x', overrides) - + // Check value swaped between wallet and pair expect(await token0.balanceOf(pair.address)).to.eq(reserveBefore[0].add(_token0In).sub(outputs[0])) expect(await token1.balanceOf(pair.address)).to.eq(reserveBefore[1].add(_token1In).sub(outputs[1])) @@ -122,32 +122,32 @@ describe('DynamicFees', () => { .to.eq(totalSupplyToken0.sub(reserveBefore[0]).sub(_token0In).add(outputs[0])) expect(await token1.balanceOf(wallet.address)) .to.eq(totalSupplyToken1.sub(reserveBefore[1]).sub(_token1In).add(outputs[1])) - + return outputs; } - + it('feeTo:on, swapFee:default, protocolFeeDenominator:default', async () => { await feeSetter.setFeeTo(other.address) expect(await factory.protocolFeeDenominator()).to.eq(9) await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) - + await execTransferAndSwap(expandTo18Decimals(1), bigNumberify(0)); await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(1)); - + const toMintForProtocol = await calcProtocolFee(); await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) - expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) + expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) }) - + it('feeTo:on, swapFee:default, protocolFeeDenominator:0.025%', async () => { await feeSetter.setFeeTo(other.address) await feeSetter.setProtocolFee(11) expect(await factory.protocolFeeDenominator()).to.eq(11) - + await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) - + await execTransferAndSwap(expandTo18Decimals(1), bigNumberify(0)); await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(1)); await execTransferAndSwap(expandTo18Decimals(2), bigNumberify(0)); @@ -156,14 +156,14 @@ describe('DynamicFees', () => { await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(4)); await execTransferAndSwap(expandTo18Decimals(6), bigNumberify(0)); await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(6)); - + const toMintForProtocol = await calcProtocolFee(); await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) - + }) - + it('feeTo:on, swapFee:0.2%, protocolFeeDenominator:0.1%', async () => { await feeSetter.setFeeTo(other.address) await feeSetter.setProtocolFee(1) @@ -172,41 +172,41 @@ describe('DynamicFees', () => { expect(await pair.swapFee()).to.eq(20) await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) - + await execTransferAndSwap(expandTo18Decimals(1), bigNumberify(0)); await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(1)); await execTransferAndSwap(expandTo18Decimals(2), bigNumberify(0)); await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(2)); - + const toMintForProtocol = await calcProtocolFee(); await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) }) - + it('feeTo:on, swapFee:0.2%, protocolFeeDenominator:disabled', async () => { await feeSetter.setSwapFee(pair.address, 20) expect(await factory.protocolFeeDenominator()).to.eq(9) expect(await pair.swapFee()).to.eq(20) await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) - + await execTransferAndSwap(expandTo18Decimals(1), bigNumberify(0)); await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(1)); await execTransferAndSwap(expandTo18Decimals(2), bigNumberify(0)); await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(2)); - + const toMintForProtocol = await calcProtocolFee(); await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(0) }) - + it('MULTIPLE_TRADES:feeTo:on, swapFee:default, protocolFeeDenominator:default', async () => { await feeSetter.setFeeTo(other.address) - + await addLiquidity(expandTo18Decimals(800), expandTo18Decimals(10)) - + await execTransferAndSwap(expandTo18Decimals(100), bigNumberify(0)); await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(50)); await execTransferAndSwap(expandTo18Decimals(20), bigNumberify(0)); @@ -215,22 +215,22 @@ describe('DynamicFees', () => { await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(66)); await execTransferAndSwap(expandTo18Decimals(1), bigNumberify(0)); await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(5)); - + const toMintForProtocol = await calcProtocolFee(); await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) - expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) + expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) }) - + it('MULTIPLE_TRADES:feeTo:on, swapFee:0.01, protocolFeeDenominator:0.0005', async () => { await feeSetter.setFeeTo(other.address) await feeSetter.setSwapFee(pair.address, 1) await feeSetter.setProtocolFee(19) expect(await factory.protocolFeeDenominator()).to.eq(19) expect(await pair.swapFee()).to.eq(1) - + await addLiquidity(expandTo18Decimals(800), expandTo18Decimals(10)) - + await execTransferAndSwap(expandTo18Decimals(100), bigNumberify(0)); await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(50)); await execTransferAndSwap(expandTo18Decimals(20), bigNumberify(0)); @@ -239,20 +239,20 @@ describe('DynamicFees', () => { await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(66)); await execTransferAndSwap(expandTo18Decimals(1), bigNumberify(0)); await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(5)); - + const toMintForProtocol = await calcProtocolFee(); await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) - expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) + expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) }) - + it('MULTIPLE_TRADES:feeTo:on, swapFee:0, protocolFeeDenominator:default', async () => { await feeSetter.setFeeTo(other.address) await feeSetter.setSwapFee(pair.address, 0) expect(await pair.swapFee()).to.eq(0) - + await addLiquidity(expandTo18Decimals(800), expandTo18Decimals(10)) - + await execTransferAndSwap(expandTo18Decimals(100), bigNumberify(0)); await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(50)); await execTransferAndSwap(expandTo18Decimals(20), bigNumberify(0)); @@ -261,19 +261,19 @@ describe('DynamicFees', () => { await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(66)); await execTransferAndSwap(expandTo18Decimals(1), bigNumberify(0)); await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(5)); - + const toMintForProtocol = await calcProtocolFee(); - + await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) - expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) + expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) }) - + it('MULTIPLE_TRADES:feeTo:on, swapFee:0, protocolFeeDenominator:0', async () => { await feeSetter.setSwapFee(pair.address, 0) expect(await pair.swapFee()).to.eq(0) - + await addLiquidity(expandTo18Decimals(800), expandTo18Decimals(10)) - + await execTransferAndSwap(expandTo18Decimals(100), bigNumberify(0)); await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(50)); await execTransferAndSwap(expandTo18Decimals(20), bigNumberify(0)); @@ -282,11 +282,11 @@ describe('DynamicFees', () => { await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(66)); await execTransferAndSwap(expandTo18Decimals(1), bigNumberify(0)); await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(5)); - + const toMintForProtocol = await calcProtocolFee(); await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) - expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) + expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) }) - + }) From 08e3a5c485d362825e32942504b1d4c6a6d54687 Mon Sep 17 00:00:00 2001 From: karczu Date: Tue, 28 Jun 2022 15:41:04 +0200 Subject: [PATCH 04/11] refactor: migrate to hardhat --- .gitignore | 11 + .waffle.json | 23 - build/Combined-Json.json | 60653 --------------------- build/DXswapDeployer.json | 409 - build/DXswapERC20.json | 705 - build/DXswapFactory.json | 533 - build/DXswapFeeReceiver.json | 345 - build/DXswapFeeSetter.json | 357 - build/DXswapPair.json | 1503 - build/ERC20.json | 717 - build/IDXswapCallee.json | 81 - build/IDXswapERC20.json | 693 - build/IDXswapFactory.json | 509 - build/IDXswapPair.json | 1491 - build/IERC20.json | 501 - build/IWETH.json | 163 - build/Math.json | 19 - build/SafeMath.json | 19 - build/TransferHelper.json | 19 - build/UQ112x112.json | 19 - build/WETH9.json | 625 - contracts/DXswapFeeSplitter.sol | 230 + contracts/libraries/TransferHelperV2.sol | 27 + hardhat.config.ts | 80 + package.json | 67 +- test/DXswapDeployer.spec.ts | 176 +- test/DXswapERC20.spec.ts | 153 +- test/DXswapFactory.spec.ts | 95 +- test/DXswapFeeReceiver.spec.ts | 792 +- test/DXswapFeeSetter.spec.ts | 88 +- test/DXswapFeeSplitter.spec.ts | 1524 + test/DXswapPair.spec.ts | 255 +- test/DynamicFees.spec.ts | 342 +- test/shared/fixtures.ts | 182 +- test/shared/utilities.ts | 79 +- truffle-config.js | 79 - yarn.lock | 7225 ++- 37 files changed, 8096 insertions(+), 72693 deletions(-) delete mode 100644 .waffle.json delete mode 100644 build/Combined-Json.json delete mode 100644 build/DXswapDeployer.json delete mode 100644 build/DXswapERC20.json delete mode 100644 build/DXswapFactory.json delete mode 100644 build/DXswapFeeReceiver.json delete mode 100644 build/DXswapFeeSetter.json delete mode 100644 build/DXswapPair.json delete mode 100644 build/ERC20.json delete mode 100644 build/IDXswapCallee.json delete mode 100644 build/IDXswapERC20.json delete mode 100644 build/IDXswapFactory.json delete mode 100644 build/IDXswapPair.json delete mode 100644 build/IERC20.json delete mode 100644 build/IWETH.json delete mode 100644 build/Math.json delete mode 100644 build/SafeMath.json delete mode 100644 build/TransferHelper.json delete mode 100644 build/UQ112x112.json delete mode 100644 build/WETH9.json create mode 100644 contracts/DXswapFeeSplitter.sol create mode 100644 contracts/libraries/TransferHelperV2.sol create mode 100644 hardhat.config.ts create mode 100644 test/DXswapFeeSplitter.spec.ts delete mode 100644 truffle-config.js diff --git a/.gitignore b/.gitignore index c786f7f11..50c9c2726 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,14 @@ node_modules/ contracts/.flattened .openzeppelin/.session .env +build +env/* +coverage/* +coverage.json +cache/ +yarn.lock +coverage/ +coverage.json +typechain +deployments/hardhat +deployments/localhost \ No newline at end of file diff --git a/.waffle.json b/.waffle.json deleted file mode 100644 index fc41d4f60..000000000 --- a/.waffle.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "compilerVersion": "./node_modules/solc", - "outputType": "all", - "compilerOptions": { - "outputSelection": { - "*": { - "*": [ - "evm.bytecode.object", - "evm.deployedBytecode.object", - "abi", - "evm.bytecode.sourceMap", - "evm.deployedBytecode.sourceMap" - ], - "": ["ast"] - } - }, - "evmVersion": "istanbul", - "optimizer": { - "enabled": true, - "runs": 200 - } - } -} diff --git a/build/Combined-Json.json b/build/Combined-Json.json deleted file mode 100644 index ce89054be..000000000 --- a/build/Combined-Json.json +++ /dev/null @@ -1,60653 +0,0 @@ -{ - "contracts": { - "contracts/DXswapDeployer.sol:DXswapDeployer": { - "abi": [ - { - "inputs": [ - { - "internalType": "address payable", - "name": "_protocolFeeReceiver", - "type": "address" - }, - { - "internalType": "address payable", - "name": "_dxdaoAvatar", - "type": "address" - }, - { - "internalType": "address", - "name": "_WETH", - "type": "address" - }, - { - "internalType": "address[]", - "name": "tokensA", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "tokensB", - "type": "address[]" - }, - { - "internalType": "uint32[]", - "name": "swapFees", - "type": "uint32[]" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "feeReceiver", - "type": "address" - } - ], - "name": "FeeReceiverDeployed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "feeSetter", - "type": "address" - } - ], - "name": "FeeSetterDeployed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "pair", - "type": "address" - } - ], - "name": "PairDeployed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "factory", - "type": "address" - } - ], - "name": "PairFactoryDeployed", - "type": "event" - }, - { - "payable": true, - "stateMutability": "payable", - "type": "fallback" - }, - { - "constant": true, - "inputs": [], - "name": "WETH", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "deploy", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "dxdaoAvatar", - "outputs": [ - { - "internalType": "address payable", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "initialTokenPairs", - "outputs": [ - { - "internalType": "address", - "name": "tokenA", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenB", - "type": "address" - }, - { - "internalType": "uint32", - "name": "swapFee", - "type": "uint32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "protocolFeeReceiver", - "outputs": [ - { - "internalType": "address payable", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "state", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "60806040526002805460ff60a01b1916905534801561001d57600080fd5b506040516200533838038062005338833981810160405260c081101561004257600080fd5b81516020830151604080850151606086018051925194969395919493918201928464010000000082111561007557600080fd5b90830190602082018581111561008a57600080fd5b82518660208202830111640100000000821117156100a757600080fd5b82525081516020918201928201910280838360005b838110156100d45781810151838201526020016100bc565b50505050905001604052602001805160405193929190846401000000008211156100fd57600080fd5b90830190602082018581111561011257600080fd5b825186602082028301116401000000008211171561012f57600080fd5b82525081516020918201928201910280838360005b8381101561015c578181015183820152602001610144565b505050509050016040526020018051604051939291908464010000000082111561018557600080fd5b90830190602082018581111561019a57600080fd5b82518660208202830111640100000000821117156101b757600080fd5b82525081516020918201928201910280838360005b838110156101e45781810151838201526020016101cc565b50505050919091016040525050600180546001600160a01b03808a166001600160a01b0319928316179092556002805489841690831617905560008054928b16929091169190911781559150505b83518160ff1610156103275760036040518060600160405280868460ff168151811061025a57fe5b60200260200101516001600160a01b03168152602001858460ff168151811061027f57fe5b60200260200101516001600160a01b03168152602001848460ff16815181106102a457fe5b60209081029190910181015163ffffffff908116909252835460018082018655600095865294829020845160029092020180546001600160a01b03199081166001600160a01b039384161782559285015190860180546040909601519590931691161763ffffffff60a01b1916600160a01b939092169290920217905501610232565b50505050505050614ffa806200033e6000396000f3fe6080604052600436106100555760003560e01c806339a51be5146100fc578063775c300c1461012d578063ad5c464814610144578063c19d93fb14610159578063e07d14b414610184578063e5fdf8de146101de575b600254600160a01b900460ff161561009e5760405162461bcd60e51b8152600401808060200182810382526024815260200180614f7a6024913960400191505060405180910390fd5b6001546001600160a01b031633146100e75760405162461bcd60e51b8152600401808060200182810382526028815260200180614f9e6028913960400191505060405180910390fd5b6002805460ff60a01b1916600160a01b179055005b34801561010857600080fd5b506101116101f3565b604080516001600160a01b039092168252519081900360200190f35b34801561013957600080fd5b50610142610202565b005b34801561015057600080fd5b50610111610725565b34801561016557600080fd5b5061016e610734565b6040805160ff9092168252519081900360200190f35b34801561019057600080fd5b506101ae600480360360208110156101a757600080fd5b5035610744565b604080516001600160a01b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b3480156101ea57600080fd5b5061011161078a565b6000546001600160a01b031681565b600254600160a01b900460ff1660011461024d5760405162461bcd60e51b8152600401808060200182810382526024815260200180614f7a6024913960400191505060405180910390fd5b60003060405161025c90610799565b6001600160a01b03909116815260405190819003602001906000f080158015610289573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507f8eef7239ce5bc4f9918f5584befdc2ee2113478098db0ca89bdf5f0d6ff32a6f919081900360200190a160005b60035460ff821610156104a9576000826001600160a01b031663c9c6539660038460ff16815481106102fb57fe5b6000918252602090912060029091020154600380546001600160a01b039092169160ff871690811061032957fe5b6000918252602080832060016002909302019190910154604080516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909116602485015251604480850194929391928390030190829087803b15801561038f57600080fd5b505af11580156103a3573d6000803e3d6000fd5b505050506040513d60208110156103b957600080fd5b5051600380549192506001600160a01b03851691639e68ceb891849160ff87169081106103e257fe5b60009182526020822060029190910201600101546040805160e086901b6001600160e01b03191681526001600160a01b03949094166004850152600160a01b90910463ffffffff1660248401525160448084019382900301818387803b15801561044b57600080fd5b505af115801561045f573d6000803e3d6000fd5b5050604080516001600160a01b038516815290517f29548d6a519d97e51db535dddb28bc2c7f262348939f8c389a0fe32591848e7d9350908190036020019150a1506001016102cd565b506001546002546000805460405191936001600160a01b03908116938693908216929091169084906104da906107a6565b6001600160a01b039586168152938516602085015291841660408085019190915290841660608401529216608082015290519081900360a001906000f080158015610529573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507f7c450ceeab8451c8a098a92a1867a12d3a3495dafd319c2aece20b2587a50c3c919081900360200190a1816001600160a01b031663f46901ed826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b1580156105c257600080fd5b505af11580156105d6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b03909116915084906105fa906107b3565b6001600160a01b03928316815291166020820152604080519182900301906000f08015801561062d573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507fc8de8af6dbce59b45166a45b74012db8d28162a620199b081b3453c42dcca7ea919081900360200190a1826001600160a01b031663a2e74af6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b1580156106c657600080fd5b505af11580156106da573d6000803e3d6000fd5b505060028054600160a11b60ff60a01b19909116179055505060405133904780156108fc02916000818181858888f1935050505015801561071f573d6000803e3d6000fd5b50505050565b6002546001600160a01b031681565b600254600160a01b900460ff1681565b6003818154811061075157fe5b6000918252602090912060029091020180546001909101546001600160a01b03918216925090811690600160a01b900463ffffffff1683565b6001546001600160a01b031681565b612f9c806107c183390190565b6111798061375d83390190565b6106a4806148d68339019056fe60806040526001805460ff60a01b1916600960a01b17905534801561002357600080fd5b50604051612f9c380380612f9c8339818101604052602081101561004657600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055612f26806100766000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80635855a25a116100715780635855a25a1461015c5780639e68ceb814610164578063a2e74af614610196578063c9c65396146101bc578063e6a43905146101ea578063f46901ed14610218576100b4565b8063017e7e58146100b9578063094b7415146100dd5780631e3dd18b146100e55780632ff7042a146101025780634e91f81114610120578063574f2ba314610142575b600080fd5b6100c161023e565b604080516001600160a01b039092168252519081900360200190f35b6100c161024d565b6100c1600480360360208110156100fb57600080fd5b503561025c565b61010a610283565b6040805160ff9092168252519081900360200190f35b6101406004803603602081101561013657600080fd5b503560ff16610293565b005b61014a610365565b60408051918252519081900360200190f35b61014a61036b565b6101406004803603604081101561017a57600080fd5b5080356001600160a01b0316906020013563ffffffff166103fe565b610140600480360360208110156101ac57600080fd5b50356001600160a01b03166104c1565b6100c1600480360360408110156101d257600080fd5b506001600160a01b038135811691602001351661053d565b6100c16004803603604081101561020057600080fd5b506001600160a01b038135811691602001351661085f565b6101406004803603602081101561022e57600080fd5b50356001600160a01b0316610885565b6000546001600160a01b031681565b6001546001600160a01b031681565b6003818154811061026957fe5b6000918252602090912001546001600160a01b0316905081565b600154600160a01b900460ff1681565b6001546001600160a01b031633146102ed576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b60008160ff1611610345576040805162461bcd60e51b815260206004820152601c60248201527f445873776170466163746f72793a20464f5242494444454e5f46454500000000604482015290519081900360640190fd5b6001805460ff909216600160a01b0260ff60a01b19909216919091179055565b60035490565b60405161037a60208201610901565b6020820181038252601f19601f820116604052506040516020018082805190602001908083835b602083106103c05780518252601f1990920191602091820191016103a1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b6001546001600160a01b03163314610458576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b6040805163d6d788c360e01b815263ffffffff8316600482015290516001600160a01b0384169163d6d788c391602480830192600092919082900301818387803b1580156104a557600080fd5b505af11580156104b9573d6000803e3d6000fd5b505050505050565b6001546001600160a01b0316331461051b576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b031614156105905760405162461bcd60e51b8152600401808060200182810382526022815260200180612ed06022913960400191505060405180910390fd5b600080836001600160a01b0316856001600160a01b0316106105b35783856105b6565b84845b90925090506001600160a01b038216610616576040805162461bcd60e51b815260206004820152601b60248201527f445873776170466163746f72793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615610690576040805162461bcd60e51b815260206004820152601a60248201527f445873776170466163746f72793a20504149525f455849535453000000000000604482015290519081900360640190fd5b6060604051806020016106a290610901565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f56040805163485cc95560e01b81526001600160a01b038781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561077557600080fd5b505af1158015610789573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b031633146108df576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6125c18061090f8339019056fe6080604052600c805463ffffffff191660191790556001600d5534801561002557600080fd5b50604051469080605261256f8239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561245e806101116000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429445873776170466163746f72793a204944454e544943414c5f414444524553534553a265627a7a72315820c6fa710efa4f71df9b005295f714d02cccf70f7f9c7bc282fca1f7f11487da9064736f6c63430005100032608060405234801561001057600080fd5b50604051611179380380611179833981810160405260a081101561003357600080fd5b508051602082015160408301516060840151608090940151600080546001600160a01b039586166001600160a01b031991821617909155600180549486169482169490941790935560028054928516928416929092179091556003805494841694831694909417909355600480549290931691161790556110c0806100b96000396000f3fe60806040526004361061007b5760003560e01c8063c1f4381d1161004e578063c1f4381d14610155578063c45a015514610190578063f2269521146101a5578063f2fde38b146101ba5761007b565b80635cb9c4ec1461007d5780638da5cb5b146100fa578063ad5c46481461012b578063b988847214610140575b005b34801561008957600080fd5b5061007b600480360360208110156100a057600080fd5b8101906020810181356401000000008111156100bb57600080fd5b8201836020820111156100cd57600080fd5b803590602001918460208302840111640100000000831117156100ef57600080fd5b5090925090506101ed565b34801561010657600080fd5b5061010f610511565b604080516001600160a01b039092168252519081900360200190f35b34801561013757600080fd5b5061010f610520565b34801561014c57600080fd5b5061010f61052f565b34801561016157600080fd5b5061007b6004803603604081101561017857600080fd5b506001600160a01b038135811691602001351661053e565b34801561019c57600080fd5b5061010f6105cb565b3480156101b157600080fd5b5061010f6105da565b3480156101c657600080fd5b5061007b600480360360208110156101dd57600080fd5b50356001600160a01b03166105e9565b60005b8181101561050c57600083838381811061020657fe5b905060200201356001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561024e57600080fd5b505afa158015610262573d6000803e3d6000fd5b505050506040513d602081101561027857600080fd5b50519050600084848481811061028a57fe5b905060200201356001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156102d257600080fd5b505afa1580156102e6573d6000803e3d6000fd5b505050506040513d60208110156102fc57600080fd5b5051905084848481811061030c57fe5b905060200201356001600160a01b03166001600160a01b031663a9059cbb86868681811061033657fe5b905060200201356001600160a01b031687878781811061035257fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561039e57600080fd5b505afa1580156103b2573d6000803e3d6000fd5b505050506040513d60208110156103c857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561041957600080fd5b505af115801561042d573d6000803e3d6000fd5b505050506040513d602081101561044357600080fd5b50600090508086868681811061045557fe5b6040805163226bf2d160e21b8152306004820152815160209390930294909401356001600160a01b0316936389afcb449350602480820193918290030181600087803b1580156104a457600080fd5b505af11580156104b8573d6000803e3d6000fd5b505050506040513d60408110156104ce57600080fd5b508051602090910151909250905081156104ec576104ec848361066a565b80156104fc576104fc838261066a565b5050600190920191506101f09050565b505050565b6000546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b031681565b6000546001600160a01b0316331461059d576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6001546001600160a01b031681565b6004546001600160a01b031681565b6000546001600160a01b03163314610648576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03838116911614156107015760025460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b50506003546106fc92506001600160a01b031690508261074c565b610748565b6002546107219061071c9084906001600160a01b031661083f565b6108fe565b15610730576106fc8183610904565b6004546107489083906001600160a01b031683610cc9565b5050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106107985780518252601f199092019160209182019101610779565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146107fa576040519150601f19603f3d011682016040523d82523d6000602084013e6107ff565b606091505b505090508061050c5760405162461bcd60e51b81526004018080602001828103825260238152602001806110696023913960400191505060405180910390fd5b600080600061084e8585610e33565b600154604080516bffffffffffffffffffffffff19606095861b811660208084019190915294861b81166034830152825160288184030181526048830184528051908601206001600160f81b031960688401529390951b9094166069850152607d8401919091527fd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776609d808501919091528151808503909101815260bd9093019052815191012095945050505050565b3b151590565b60025460009061091e9083906001600160a01b031661083f565b9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561095c57600080fd5b505afa158015610970573d6000803e3d6000fd5b505050506040513d606081101561098657600080fd5b5080516020909101516002546dffffffffffffffffffffffffffff92831694509116915060009081906001600160a01b03908116908716106109c95782846109cc565b83835b915091506000821180156109e05750600081115b610a1b5760405162461bcd60e51b815260040180806020018281038252602981526020018061101a6029913960400191505060405180910390fd5b6000610aa8610a9b876001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5c57600080fd5b505afa158015610a70573d6000803e3d6000fd5b505050506040513d6020811015610a8657600080fd5b50516127109063ffffffff90811690610f1116565b899063ffffffff610f6716565b90506000610abc828463ffffffff610f6716565b90506000610ae283610ad68761271063ffffffff610f6716565b9063ffffffff610fca16565b90506000818381610aef57fe5b049050610afd8a8a8d610cc9565b60025460009081906001600160a01b03908116908d1610610b2057826000610b24565b6000835b915091508a6001600160a01b031663022c0d9f83833060006040519080825280601f01601f191660200182016040528015610b66576020820181803883390190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610bd7578181015183820152602001610bbf565b50505050905090810190601f168015610c045780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610c2657600080fd5b505af1158015610c3a573d6000803e3d6000fd5b505060025460408051632e1a7d4d60e01b81526004810188905290516001600160a01b039092169350632e1a7d4d925060248082019260009290919082900301818387803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b5050600354610cba92506001600160a01b031690508461074c565b50505050505050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310610d465780518252601f199092019160209182019101610d27565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610da8576040519150601f19603f3d011682016040523d82523d6000602084013e610dad565b606091505b5091509150818015610ddb575080511580610ddb5750808060200190516020811015610dd857600080fd5b50515b610e2c576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b600080826001600160a01b0316846001600160a01b03161415610e875760405162461bcd60e51b81526004018080602001828103825260268152602001806110436026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610610ea7578284610eaa565b83835b90925090506001600160a01b038216610f0a576040805162461bcd60e51b815260206004820152601f60248201527f44587377617046656552656365697665723a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b80820382811115610f61576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b92915050565b6000811580610f8257505080820282828281610f7f57fe5b04145b610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe44587377617046656552656365697665723a20494e53554646494349454e545f4c495155494449545944587377617046656552656365697665723a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158204488a5c6d24546776395f2d8e5b107b99bb124fd814a71281fc10579ac69368864736f6c63430005100032608060405234801561001057600080fd5b506040516106a43803806106a48339818101604052604081101561003357600080fd5b508051602090910151600080546001600160a01b039384166001600160a01b0319918216179091556002805493909216921691909117905561062a8061007a6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a2e74af611610066578063a2e74af614610136578063a6dab93f1461015c578063c45a01551461018a578063f2fde38b14610192578063f46901ed146101b857610093565b806317c06b34146100985780634e91f811146100da5780638da5cb5b146100fc5780639e68ceb814610104575b600080fd5b6100be600480360360208110156100ae57600080fd5b50356001600160a01b03166101de565b604080516001600160a01b039092168252519081900360200190f35b6100fa600480360360208110156100f057600080fd5b503560ff166101f9565b005b6100be6102b0565b6100fa6004803603604081101561011a57600080fd5b5080356001600160a01b0316906020013563ffffffff166102bf565b6100fa6004803603602081101561014c57600080fd5b50356001600160a01b03166103a6565b6100fa6004803603604081101561017257600080fd5b506001600160a01b0381358116916020013516610441565b6100be6104bc565b6100fa600480360360208110156101a857600080fd5b50356001600160a01b03166104cb565b6100fa600480360360208110156101ce57600080fd5b50356001600160a01b031661053a565b6001602052600090815260409020546001600160a01b031681565b6000546001600160a01b03163314610246576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051634e91f81160e01b815260ff8416600482015290516001600160a01b0390921691634e91f8119160248082019260009290919082900301818387803b15801561029557600080fd5b505af11580156102a9573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031681565b6000546001600160a01b03163314806102f157506001600160a01b038281166000908152600160205260409020541633145b610330576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600254604080516313cd19d760e31b81526001600160a01b03858116600483015263ffffffff8516602483015291519190921691639e68ceb891604480830192600092919082900301818387803b15801561038a57600080fd5b505af115801561039e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146103f3576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051635173a57b60e11b81526001600160a01b0384811660048301529151919092169163a2e74af691602480830192600092919082900301818387803b15801561029557600080fd5b6000546001600160a01b0316331461048e576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6002546001600160a01b031681565b6000546001600160a01b03163314610518576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610587576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6002546040805163f46901ed60e01b81526001600160a01b0384811660048301529151919092169163f46901ed91602480830192600092919082900301818387803b15801561029557600080fdfe4458737761704665655365747465723a20464f5242494444454e000000000000a265627a7a72315820a0be763e035529abb8cc9d7d753668d36fa96da26d709983f608f42e5b3d615964736f6c634300051000324458737761704465706c6f7965723a2057524f4e475f4445504c4f5945525f53544154454458737761704465706c6f7965723a2043414c4c45525f4e4f545f4645455f544f5f534554544552a265627a7a72315820f21258416ec6a704eb1b3b2327ba2cad2a5062ee9f012b0de5c7632a8796809064736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x2 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x5338 CODESIZE SUB DUP1 PUSH3 0x5338 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD DUP1 MLOAD SWAP3 MLOAD SWAP5 SWAP7 SWAP4 SWAP6 SWAP2 SWAP5 SWAP4 SWAP2 DUP3 ADD SWAP3 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0xA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xBC JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0xFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x112 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x12F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x15C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x144 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x19A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x1B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1E4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1CC JUMP JUMPDEST POP POP POP POP SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 MSTORE POP POP PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP11 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x2 DUP1 SLOAD DUP10 DUP5 AND SWAP1 DUP4 AND OR SWAP1 SSTORE PUSH1 0x0 DUP1 SLOAD SWAP3 DUP12 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 POP POP JUMPDEST DUP4 MLOAD DUP2 PUSH1 0xFF AND LT ISZERO PUSH2 0x327 JUMPI PUSH1 0x3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP7 DUP5 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x25A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP5 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x27F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP5 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x2A4 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 SWAP3 MSTORE DUP4 SLOAD PUSH1 0x1 DUP1 DUP3 ADD DUP7 SSTORE PUSH1 0x0 SWAP6 DUP7 MSTORE SWAP5 DUP3 SWAP1 KECCAK256 DUP5 MLOAD PUSH1 0x2 SWAP1 SWAP3 MUL ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR DUP3 SSTORE SWAP3 DUP6 ADD MLOAD SWAP1 DUP7 ADD DUP1 SLOAD PUSH1 0x40 SWAP1 SWAP7 ADD MLOAD SWAP6 SWAP1 SWAP4 AND SWAP2 AND OR PUSH4 0xFFFFFFFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL SWAP4 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL OR SWAP1 SSTORE ADD PUSH2 0x232 JUMP JUMPDEST POP POP POP POP POP POP POP PUSH2 0x4FFA DUP1 PUSH3 0x33E PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x55 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39A51BE5 EQ PUSH2 0xFC JUMPI DUP1 PUSH4 0x775C300C EQ PUSH2 0x12D JUMPI DUP1 PUSH4 0xAD5C4648 EQ PUSH2 0x144 JUMPI DUP1 PUSH4 0xC19D93FB EQ PUSH2 0x159 JUMPI DUP1 PUSH4 0xE07D14B4 EQ PUSH2 0x184 JUMPI DUP1 PUSH4 0xE5FDF8DE EQ PUSH2 0x1DE JUMPI JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x9E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4F7A PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4F9E PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x108 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x111 PUSH2 0x1F3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x142 PUSH2 0x202 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x150 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x111 PUSH2 0x725 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x165 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x16E PUSH2 0x734 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x190 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x744 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x111 PUSH2 0x78A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH1 0x1 EQ PUSH2 0x24D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4F7A PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x40 MLOAD PUSH2 0x25C SWAP1 PUSH2 0x799 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x289 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH32 0x8EEF7239CE5BC4F9918F5584BEFDC2EE2113478098DB0CA89BDF5F0D6FF32A6F SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 PUSH1 0x0 JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF DUP3 AND LT ISZERO PUSH2 0x4A9 JUMPI PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC9C65396 PUSH1 0x3 DUP5 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2FB JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 PUSH1 0x2 SWAP1 SWAP2 MUL ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH1 0xFF DUP8 AND SWAP1 DUP2 LT PUSH2 0x329 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 SWAP1 SWAP2 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP9 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP5 SWAP1 SWAP2 AND PUSH1 0x24 DUP6 ADD MSTORE MLOAD PUSH1 0x44 DUP1 DUP6 ADD SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP1 SUB ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x38F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3A3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x9E68CEB8 SWAP2 DUP5 SWAP2 PUSH1 0xFF DUP8 AND SWAP1 DUP2 LT PUSH2 0x3E2 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 KECCAK256 PUSH1 0x2 SWAP2 SWAP1 SWAP2 MUL ADD PUSH1 0x1 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0xE0 DUP7 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH4 0xFFFFFFFF AND PUSH1 0x24 DUP5 ADD MSTORE MLOAD PUSH1 0x44 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x44B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x45F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x29548D6A519D97E51DB535DDDB28BC2C7F262348939F8C389A0FE32591848E7D SWAP4 POP SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP2 POP LOG1 POP PUSH1 0x1 ADD PUSH2 0x2CD JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x2 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 DUP7 SWAP4 SWAP1 DUP3 AND SWAP3 SWAP1 SWAP2 AND SWAP1 DUP5 SWAP1 PUSH2 0x4DA SWAP1 PUSH2 0x7A6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND DUP2 MSTORE SWAP4 DUP6 AND PUSH1 0x20 DUP6 ADD MSTORE SWAP2 DUP5 AND PUSH1 0x40 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP5 AND PUSH1 0x60 DUP5 ADD MSTORE SWAP3 AND PUSH1 0x80 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x529 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH32 0x7C450CEEAB8451C8A098A92A1867A12D3A3495DAFD319C2AECE20B2587A50C3C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF46901ED DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP5 SWAP1 PUSH2 0x5FA SWAP1 PUSH2 0x7B3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x62D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH32 0xC8DE8AF6DBCE59B45166A45B74012DB8D28162A620199B081B3453C42DCCA7EA SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA2E74AF6 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA1 SHL PUSH1 0xFF PUSH1 0xA0 SHL NOT SWAP1 SWAP2 AND OR SWAP1 SSTORE POP POP PUSH1 0x40 MLOAD CALLER SWAP1 SELFBALANCE DUP1 ISZERO PUSH2 0x8FC MUL SWAP2 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x71F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x751 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 PUSH1 0x2 SWAP1 SWAP2 MUL ADD DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP3 POP SWAP1 DUP2 AND SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP4 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2F9C DUP1 PUSH2 0x7C1 DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH2 0x1179 DUP1 PUSH2 0x375D DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH2 0x6A4 DUP1 PUSH2 0x48D6 DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x9 PUSH1 0xA0 SHL OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x2F9C CODESIZE SUB DUP1 PUSH2 0x2F9C DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2F26 DUP1 PUSH2 0x76 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5855A25A GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x5855A25A EQ PUSH2 0x15C JUMPI DUP1 PUSH4 0x9E68CEB8 EQ PUSH2 0x164 JUMPI DUP1 PUSH4 0xA2E74AF6 EQ PUSH2 0x196 JUMPI DUP1 PUSH4 0xC9C65396 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0xE6A43905 EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0xF46901ED EQ PUSH2 0x218 JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x17E7E58 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x94B7415 EQ PUSH2 0xDD JUMPI DUP1 PUSH4 0x1E3DD18B EQ PUSH2 0xE5 JUMPI DUP1 PUSH4 0x2FF7042A EQ PUSH2 0x102 JUMPI DUP1 PUSH4 0x4E91F811 EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0x574F2BA3 EQ PUSH2 0x142 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0x23E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xC1 PUSH2 0x24D JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x25C JUMP JUMPDEST PUSH2 0x10A PUSH2 0x283 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xFF AND PUSH2 0x293 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x14A PUSH2 0x365 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x14A PUSH2 0x36B JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x17A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x3FE JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4C1 JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x53D JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x200 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x85F JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x885 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x269 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2ED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND GT PUSH2 0x345 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A20464F5242494444454E5F46454500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH1 0xFF PUSH1 0xA0 SHL NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37A PUSH1 0x20 DUP3 ADD PUSH2 0x901 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3C0 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x458 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xD6D788C3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0xD6D788C3 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4B9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x51B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x590 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2ED0 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x5B3 JUMPI DUP4 DUP6 PUSH2 0x5B6 JUMP JUMPDEST DUP5 DUP5 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x616 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A205A45524F5F414444524553530000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD AND ISZERO PUSH2 0x690 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A20504149525F455849535453000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0x6A2 SWAP1 PUSH2 0x901 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP SWAP1 POP PUSH1 0x0 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 DUP3 MLOAD PUSH1 0x20 DUP5 ADD PUSH1 0x0 CREATE2 PUSH1 0x40 DUP1 MLOAD PUSH4 0x485CC955 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP8 POP SWAP1 DUP8 AND SWAP2 PUSH4 0x485CC955 SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x775 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x789 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP10 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP1 SLOAD SWAP8 DUP14 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP9 DUP10 AND DUP2 OR SWAP1 SWAP2 SSTORE SWAP4 DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP7 DUP7 MSTORE DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP1 SLOAD DUP9 AND DUP6 OR SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE SWAP6 DUP2 SWAP1 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 SWAP6 ADD DUP1 SLOAD SWAP1 SWAP8 AND DUP5 OR SWAP1 SWAP7 SSTORE SWAP3 SLOAD DUP4 MLOAD SWAP3 DUP4 MSTORE SWAP1 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0xD3648BD0F6BA80134A33BA9275AC585D9D315F0AD8355CDDEFDE31AFA28D0E9 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x8DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x25C1 DUP1 PUSH2 0x90F DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH1 0x19 OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0xD SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD CHAINID SWAP1 DUP1 PUSH1 0x52 PUSH2 0x256F DUP3 CODECOPY PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB PUSH1 0x52 ADD DUP3 KECCAK256 DUP3 DUP3 ADD DUP3 MSTORE PUSH1 0x6 DUP4 MSTORE PUSH6 0x44587377617 PUSH1 0xD4 SHL PUSH1 0x20 SWAP4 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD DUP4 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL SWAP1 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x3649D708A7ABF9E212D0A587955EAD4123223014B2E46201DFB587457CBD4591 DUP2 DUP4 ADD MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP1 MSTORE DUP3 MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x3 SSTORE POP PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0x245E DUP1 PUSH2 0x111 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1CF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6A627842 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xBA9A7A56 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x583 JUMPI DUP1 PUSH4 0xD6D788C3 EQ PUSH2 0x5D4 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x5F7 JUMPI DUP1 PUSH4 0xFFF6CAE9 EQ PUSH2 0x625 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0xBA9A7A56 EQ PUSH2 0x545 JUMPI DUP1 PUSH4 0xBC25CF77 EQ PUSH2 0x54D JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xD21220A7 EQ PUSH2 0x57B JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0x89AFCB44 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x511 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x519 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x6A627842 EQ PUSH2 0x458 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x47E JUMPI DUP1 PUSH4 0x7464FC3D EQ PUSH2 0x4A4 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x485CC955 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x485CC955 EQ PUSH2 0x3F9 JUMPI DUP1 PUSH4 0x54CF2AEB EQ PUSH2 0x427 JUMPI DUP1 PUSH4 0x5909C0D5 EQ PUSH2 0x448 JUMPI DUP1 PUSH4 0x5A3D5493 EQ PUSH2 0x450 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x3D3 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x3F1 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x1AD JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x317 JUMPI DUP1 PUSH4 0xDFE1681 EQ PUSH2 0x357 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x37B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x395 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x22C0D9F EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x262 JUMPI DUP1 PUSH4 0x902F1AC EQ PUSH2 0x2DF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP4 ADD CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x62D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26A PUSH2 0xB7F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x28C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2D1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2E7 PUSH2 0xBA1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x32D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xBCB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x35F PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xBF1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xBF7 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xC91 JUMP JUMPDEST PUSH2 0x3DB PUSH2 0xCB5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xCBA JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x40F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xCC0 JUMP JUMPDEST PUSH2 0x42F PUSH2 0xD45 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xD51 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xD57 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD5D JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x494 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x105E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1076 JUMP JUMPDEST PUSH2 0x4F8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1088 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x26A PUSH2 0x142F JUMP JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x52F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x144E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x145B JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x563 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1461 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15CD JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15DC JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x17EF JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x60D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x18BF JUMP JUMPDEST PUSH2 0x260 PUSH2 0x18DC JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x679 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE DUP5 ISZERO ISZERO DUP1 PUSH2 0x68C JUMPI POP PUSH1 0x0 DUP5 GT JUMPDEST PUSH2 0x6C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23B6 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6D2 PUSH2 0xBA1 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP8 LT DUP1 ISZERO PUSH2 0x6F7 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP7 LT JUMPDEST PUSH2 0x732 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2394 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 SWAP1 DUP2 AND SWAP1 DUP10 AND DUP3 EQ DUP1 ISZERO SWAP1 PUSH2 0x770 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST PUSH2 0x7BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x445873776170506169723A20494E56414C49445F544F PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP11 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x7CB DUP3 DUP11 DUP14 PUSH2 0x1A3F JUMP JUMPDEST DUP10 ISZERO PUSH2 0x7DC JUMPI PUSH2 0x7DC DUP2 DUP11 DUP13 PUSH2 0x1A3F JUMP JUMPDEST DUP7 ISZERO PUSH2 0x897 JUMPI DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x78B94AE6 CALLER DUP14 DUP14 DUP13 DUP13 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x87E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x892 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8F1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x907 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x953 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x967 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x97D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP PUSH1 0x0 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP6 AND DUP11 SWAP1 SUB DUP4 GT PUSH2 0x9A0 JUMPI PUSH1 0x0 PUSH2 0x9AF JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 GT PUSH2 0x9CC JUMPI PUSH1 0x0 PUSH2 0x9DB JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 GT DUP1 PUSH2 0x9EC JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST PUSH2 0xA27 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23DC PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC SLOAD PUSH1 0x0 SWAP1 PUSH2 0xA64 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xA58 DUP8 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0xC SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0xA86 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH2 0xAB8 PUSH4 0x5F5E100 PUSH2 0xAAC PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP12 DUP2 AND SWAP1 DUP12 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xAC8 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST LT ISZERO PUSH2 0xB0B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x445873776170506169723A204B PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH2 0xB19 DUP5 DUP5 DUP9 DUP9 PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP14 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP13 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND SWAP2 CALLER SWAP2 PUSH32 0xD78AD95FA46C994B6551D0DA85FC275FE613CE37657FB8D5E3D130840159D822 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x44587377617 PUSH1 0xD4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP3 PUSH1 0x1 PUSH1 0x70 SHL DUP4 DIV SWAP1 SWAP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1E52 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x0 NOT EQ PUSH2 0xC7C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xC57 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE JUMPDEST PUSH2 0xC87 DUP5 DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD17 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x7 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xC SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0xDAB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0xDBB PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP4 SWAP6 POP SWAP2 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 PUSH2 0xED5 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xEF2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF00 DUP8 DUP8 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0xF3D JUMPI PUSH2 0xF29 PUSH2 0x3E8 PUSH2 0xA58 PUSH2 0xF24 DUP8 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0x2146 JUMP JUMPDEST SWAP9 POP PUSH2 0xF38 PUSH1 0x0 PUSH2 0x3E8 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xF8C JUMP JUMPDEST PUSH2 0xF89 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF5A DUP7 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF61 JUMPI INVALID JUMPDEST DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF7C DUP7 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF83 JUMPI INVALID JUMPDEST DIV PUSH2 0x222E JUMP JUMPDEST SWAP9 POP JUMPDEST PUSH1 0x0 DUP10 GT PUSH2 0xFCB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x236B PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFD5 DUP11 DUP11 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xFE1 DUP7 DUP7 DUP11 DUP11 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x1011 JUMPI PUSH1 0x8 SLOAD PUSH2 0x100D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP2 MLOAD CALLER SWAP3 PUSH32 0x4C209B5FC8AD50758F13E2E1088BA56A560DFF690A1C6FEF26394F4C03821C4F SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP SWAP5 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xB SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x10D7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0x10E7 PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP5 SWAP7 POP SWAP3 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP4 SWAP2 AND SWAP2 PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1143 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1157 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x116D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ADDRESS PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0x1204 DUP9 DUP9 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x121B DUP5 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x1222 JUMPI INVALID JUMPDEST DIV SWAP11 POP DUP1 PUSH2 0x1236 DUP5 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x123D JUMPI INVALID JUMPDEST DIV SWAP10 POP PUSH1 0x0 DUP12 GT DUP1 ISZERO PUSH2 0x1250 JUMPI POP PUSH1 0x0 DUP11 GT JUMPDEST PUSH2 0x128B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2401 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1295 ADDRESS DUP5 PUSH2 0x2246 JUMP JUMPDEST PUSH2 0x12A0 DUP8 DUP14 DUP14 PUSH2 0x1A3F JUMP JUMPDEST PUSH2 0x12AB DUP7 DUP14 DUP13 PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1305 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x131B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1367 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x137B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP PUSH2 0x13A1 DUP6 DUP6 DUP12 DUP12 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x13D1 JUMPI PUSH1 0x8 SLOAD PUSH2 0x13CD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP13 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND SWAP3 CALLER SWAP3 PUSH32 0xDCCD412F0B1252819CB1FD330B93224CA42612892BB3F4F789976E6D81936496 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP POP POP POP POP POP PUSH1 0x1 PUSH1 0xD DUP2 SWAP1 SSTORE POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x445853 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST PUSH2 0x3E8 DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x14AD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP5 SWAP1 SWAP4 AND SWAP3 PUSH2 0x155C SWAP3 DUP6 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 DUP6 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1533 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1549 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x15C3 SWAP3 DUP5 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST TIMESTAMP DUP5 LT ISZERO PUSH2 0x1637 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x11161CDDD85C115490CC8C0E8811561412549151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP12 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP6 ADD DUP3 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x102 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH2 0x122 DUP1 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP7 ADD DUP7 MSTORE PUSH2 0x142 DUP5 ADD DUP1 DUP3 MSTORE DUP7 MLOAD SWAP7 DUP4 ADD SWAP7 SWAP1 SWAP7 KECCAK256 SWAP6 DUP4 SWAP1 MSTORE PUSH2 0x162 DUP5 ADD DUP1 DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0xFF DUP10 AND PUSH2 0x182 DUP6 ADD MSTORE PUSH2 0x1A2 DUP5 ADD DUP9 SWAP1 MSTORE PUSH2 0x1C2 DUP5 ADD DUP8 SWAP1 MSTORE MLOAD SWAP2 SWAP4 SWAP3 PUSH2 0x1E2 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1752 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1788 JUMPI POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x17D9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617045524332303A20494E56414C49445F5349474E41545552450000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x17E4 DUP10 DUP10 DUP10 PUSH2 0x1E52 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1846 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3E8 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x18A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A20464F5242494444454E5F46454500000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x1928 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x1A38 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1979 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x198D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x19A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A04 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x1 PUSH1 0xD SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH32 0x7472616E7366657228616464726573732C75696E743235362900000000000000 PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP7 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP5 MSTORE SWAP2 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP2 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1AEC JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1ACD JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1B4E JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1B53 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x1B81 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x1B81 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x1BD2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A205452414E534645525F4641494C45440000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0x1BF4 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0x1BF1 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 GT DUP1 ISZERO SWAP1 PUSH2 0x1CAA JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 GT ISZERO JUMPDEST PUSH2 0x1CF2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x445873776170506169723A204F564552464C4F57 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH4 0xFFFFFFFF TIMESTAMP DUP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV DUP2 AND DUP3 SUB SWAP1 DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1D22 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 AND ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1D36 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1DA7 JUMPI DUP1 PUSH4 0xFFFFFFFF AND PUSH2 0x1D64 DUP6 PUSH2 0x1D4F DUP7 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x22F6 AND JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE PUSH4 0xFFFFFFFF DUP2 AND PUSH2 0x1D8F DUP5 PUSH2 0x1D4F DUP8 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP9 DUP2 AND SWAP2 SWAP1 SWAP2 OR PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x70 SHL NOT AND PUSH1 0x1 PUSH1 0x70 SHL DUP9 DUP4 AND DUP2 MUL SWAP2 SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0xE0 SHL PUSH4 0xFFFFFFFF DUP8 AND MUL OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP4 DIV SWAP1 SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x1C411E9A96E071241C2F21F7726B17AE89E3CAB4C78BE50E062B03A9FFFBBAD1 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1EDD SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x1F12 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17E7E58 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1FE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x17FB8215 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2FF7042A SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2036 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x204A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2060 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO DUP1 ISZERO SWAP6 POP SWAP2 SWAP3 POP SWAP1 PUSH2 0x2131 JUMPI DUP1 ISZERO PUSH2 0x212C JUMPI PUSH1 0x0 PUSH2 0x20A3 PUSH2 0xF24 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 DUP2 AND SWAP1 DUP10 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x20B0 DUP4 PUSH2 0x2146 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x2129 JUMPI PUSH1 0x0 PUSH2 0x20DE PUSH2 0x20CF DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2105 DUP4 PUSH2 0x20F9 DUP7 PUSH1 0xFF DUP11 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0x2112 JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 ISZERO PUSH2 0x2125 JUMPI PUSH2 0x2125 DUP9 DUP3 PUSH2 0x2198 JUMP JUMPDEST POP POP POP JUMPDEST POP POP JUMPDEST PUSH2 0x213D JUMP JUMPDEST DUP1 ISZERO PUSH2 0x213D JUMPI PUSH1 0x0 PUSH1 0xB SSTORE JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 GT ISZERO PUSH2 0x2189 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x2 DUP3 DIV ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2183 JUMPI DUP1 SWAP2 POP PUSH1 0x2 DUP2 DUP3 DUP6 DUP2 PUSH2 0x2172 JUMPI INVALID JUMPDEST DIV ADD DUP2 PUSH2 0x217B JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x215B JUMP JUMPDEST POP PUSH2 0x2193 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2193 JUMPI POP PUSH1 0x1 JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x21AB SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x21D6 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x223D JUMPI DUP2 PUSH2 0x223F JUMP JUMPDEST DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x226F SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SLOAD PUSH2 0x229C SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH1 0x1 PUSH1 0x70 SHL MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP5 AND DUP2 PUSH2 0x2313 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F 0x4D 0x49 0x4E SLOAD GASLIMIT DIFFICULTY DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4F SSTORE SLOAD POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x49 0x4E POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F TIMESTAMP SSTORE MSTORE 0x4E GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 0xBC SWAP15 MSTORE 0xC6 0x22 0xA7 RETURN PUSH25 0xA026EE16432D9BBC35CC0DB3D76CFAFD5D67631F595A9B1864 PUSH20 0x6F6C63430005100032454950373132446F6D6169 PUSH15 0x28737472696E67206E616D652C7374 PUSH19 0x696E672076657273696F6E2C75696E74323536 KECCAK256 PUSH4 0x6861696E 0x49 PUSH5 0x2C61646472 PUSH6 0x737320766572 PUSH10 0x6679696E67436F6E7472 PUSH2 0x6374 0x29 DIFFICULTY PC PUSH20 0x776170466163746F72793A204944454E54494341 0x4C 0x5F COINBASE DIFFICULTY DIFFICULTY MSTORE GASLIMIT MSTORE8 MSTORE8 GASLIMIT MSTORE8 LOG2 PUSH6 0x627A7A723158 KECCAK256 0xC6 STATICCALL PUSH18 0xEFA4F71DF9B005295F714D02CCCF70F7F9C PUSH28 0xC282FCA1F7F11487DA9064736F6C6343000510003260806040523480 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1179 CODESIZE SUB DUP1 PUSH2 0x1179 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x80 SWAP1 SWAP5 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP5 DUP7 AND SWAP5 DUP3 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 DUP6 AND SWAP3 DUP5 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP5 DUP5 AND SWAP5 DUP4 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE PUSH1 0x4 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH2 0x10C0 DUP1 PUSH2 0xB9 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC1F4381D GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xC1F4381D EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0xF2269521 EQ PUSH2 0x1A5 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1BA JUMPI PUSH2 0x7B JUMP JUMPDEST DUP1 PUSH4 0x5CB9C4EC EQ PUSH2 0x7D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0xAD5C4648 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0xB9888472 EQ PUSH2 0x140 JUMPI JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x106 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x511 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x520 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x52F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x53E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x19C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x5CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x5DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5E9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x50C JUMPI PUSH1 0x0 DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0x206 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x262 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x28A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x30C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP7 DUP7 DUP7 DUP2 DUP2 LT PUSH2 0x336 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP8 DUP8 DUP2 DUP2 LT PUSH2 0x352 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x20 SWAP3 DUP4 MUL SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH4 0x70A08231 SWAP4 POP PUSH1 0x24 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x39E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP7 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x419 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x42D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x443 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP1 POP DUP1 DUP7 DUP7 DUP7 DUP2 DUP2 LT PUSH2 0x455 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x226BF2D1 PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 MUL SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH4 0x89AFCB44 SWAP4 POP PUSH1 0x24 DUP1 DUP3 ADD SWAP4 SWAP2 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4B8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP DUP2 ISZERO PUSH2 0x4EC JUMPI PUSH2 0x4EC DUP5 DUP4 PUSH2 0x66A JUMP JUMPDEST DUP1 ISZERO PUSH2 0x4FC JUMPI PUSH2 0x4FC DUP4 DUP3 PUSH2 0x66A JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 POP PUSH2 0x1F0 SWAP1 POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x59D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A20464F5242494444454E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x4 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x648 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A20464F5242494444454E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x701 JUMPI PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2E1A7D4D SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6E1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x3 SLOAD PUSH2 0x6FC SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP3 PUSH2 0x74C JUMP JUMPDEST PUSH2 0x748 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x721 SWAP1 PUSH2 0x71C SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x83F JUMP JUMPDEST PUSH2 0x8FE JUMP JUMPDEST ISZERO PUSH2 0x730 JUMPI PUSH2 0x6FC DUP2 DUP4 PUSH2 0x904 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x748 SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH2 0xCC9 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP4 SWAP1 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x798 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x779 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x7FA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x7FF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x50C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1069 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x84E DUP6 DUP6 PUSH2 0xE33 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH1 0x60 SWAP6 DUP7 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP5 DUP7 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP7 ADD KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT PUSH1 0x68 DUP5 ADD MSTORE SWAP4 SWAP1 SWAP6 SHL SWAP1 SWAP5 AND PUSH1 0x69 DUP6 ADD MSTORE PUSH1 0x7D DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xD306A548755B9295EE49CC729E13CA4A45E00199BBD890FA146DA43A50571776 PUSH1 0x9D DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP4 ADD SWAP1 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x91E SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x83F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x970 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x986 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x2 SLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP5 POP SWAP2 AND SWAP2 POP PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP8 AND LT PUSH2 0x9C9 JUMPI DUP3 DUP5 PUSH2 0x9CC JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 GT DUP1 ISZERO PUSH2 0x9E0 JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST PUSH2 0xA1B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x101A PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAA8 PUSH2 0xA9B DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x54CF2AEB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA70 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x2710 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0xF11 AND JUMP JUMPDEST DUP10 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xABC DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xAE2 DUP4 PUSH2 0xAD6 DUP8 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xFCA AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0xAEF JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0xAFD DUP11 DUP11 DUP14 PUSH2 0xCC9 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP14 AND LT PUSH2 0xB20 JUMPI DUP3 PUSH1 0x0 PUSH2 0xB24 JUMP JUMPDEST PUSH1 0x0 DUP4 JUMPDEST SWAP2 POP SWAP2 POP DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x22C0D9F DUP4 DUP4 ADDRESS PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB66 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xBD7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xBBF JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xC04 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC3A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP4 POP PUSH4 0x2E1A7D4D SWAP3 POP PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC9F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x3 SLOAD PUSH2 0xCBA SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP5 PUSH2 0x74C JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP3 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 SWAP4 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xD46 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xD27 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xDA8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xDAD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0xDDB JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0xDDB JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0xE2C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E7366657248656C7065723A205452414E534645525F4641494C454400 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xE87 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1043 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0xEA7 JUMPI DUP3 DUP5 PUSH2 0xEAA JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xF0A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A205A45524F5F4144445245535300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0xF82 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0xF7F JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID DIFFICULTY PC PUSH20 0x77617046656552656365697665723A20494E5355 CHAINID CHAINID 0x49 NUMBER 0x49 GASLIMIT 0x4E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE DIFFICULTY PC PUSH20 0x77617046656552656365697665723A204944454E SLOAD 0x49 NUMBER COINBASE 0x4C 0x5F COINBASE DIFFICULTY DIFFICULTY MSTORE GASLIMIT MSTORE8 MSTORE8 GASLIMIT MSTORE8 SLOAD PUSH19 0x616E7366657248656C7065723A204554485F54 MSTORE COINBASE 0x4E MSTORE8 CHAINID GASLIMIT MSTORE 0x5F CHAINID COINBASE 0x49 0x4C GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 DIFFICULTY DUP9 0xA5 0xC6 0xD2 GASLIMIT CHAINID PUSH24 0x6395F2D8E5B107B99BB124FD814A71281FC10579AC693688 PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x6A4 CODESIZE SUB DUP1 PUSH2 0x6A4 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP4 SWAP1 SWAP3 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x62A DUP1 PUSH2 0x7A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA2E74AF6 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA2E74AF6 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0xA6DAB93F EQ PUSH2 0x15C JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x18A JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x192 JUMPI DUP1 PUSH4 0xF46901ED EQ PUSH2 0x1B8 JUMPI PUSH2 0x93 JUMP JUMPDEST DUP1 PUSH4 0x17C06B34 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x4E91F811 EQ PUSH2 0xDA JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xFC JUMPI DUP1 PUSH4 0x9E68CEB8 EQ PUSH2 0x104 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xFF AND PUSH2 0x1F9 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xBE PUSH2 0x2B0 JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x11A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x2BF JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A6 JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x172 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x441 JUMP JUMPDEST PUSH2 0xBE PUSH2 0x4BC JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4CB JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x53A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x246 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4E91F811 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x4E91F811 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH2 0x2F1 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND CALLER EQ JUMPDEST PUSH2 0x330 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x13CD19D7 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0x9E68CEB8 SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x38A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x39E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3F3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x5173A57B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xA2E74AF6 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x48E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x518 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x587 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xF46901ED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xF46901ED SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT INVALID DIFFICULTY PC PUSH20 0x7761704665655365747465723A20464F52424944 DIFFICULTY GASLIMIT 0x4E STOP STOP STOP STOP STOP STOP LOG2 PUSH6 0x627A7A723158 KECCAK256 LOG0 0xBE PUSH23 0x3E035529ABB8CC9D7D753668D36FA96DA26D709983F608 DELEGATECALL 0x2E JUMPDEST RETURNDATASIZE PUSH2 0x5964 PUSH20 0x6F6C634300051000324458737761704465706C6F PUSH26 0x65723A2057524F4E475F4445504C4F5945525F53544154454458 PUSH20 0x7761704465706C6F7965723A2043414C4C45525F 0x4E 0x4F SLOAD 0x5F CHAINID GASLIMIT GASLIMIT 0x5F SLOAD 0x4F 0x5F MSTORE8 GASLIMIT SLOAD SLOAD GASLIMIT MSTORE LOG2 PUSH6 0x627A7A723158 KECCAK256 CALLCODE SLT PC COINBASE PUSH15 0xC6A704EB1B3B2327BA2CAD2A5062EE SWAP16 ADD 0x2B 0xD 0xE5 0xC7 PUSH4 0x2A879680 SWAP1 PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ", - "sourceMap": "163:2781:0:-;;;311:22;;;-1:-1:-1;;;;311:22:0;;;780:606;5:2:-1;;;;30:1;27;20:12;5:2;780:606:0;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;780:606:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;780:606:0;;421:4:-1;412:14;;;;780:606:0;;;;;412:14:-1;780:606:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;780:606:0;;;;;;;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;780:606:0;;421:4:-1;412:14;;;;780:606:0;;;;;412:14:-1;780:606:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;780:606:0;;;;;;;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;780:606:0;;421:4:-1;412:14;;;;780:606:0;;;;;412:14:-1;780:606:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;;;780:606:0;;;;;;-1:-1:-1;;1024:11:0;:26;;-1:-1:-1;;;;;1024:26:0;;;-1:-1:-1;;;;;;1024:26:0;;;;;;;1060:4;:12;;;;;;;;;;;1024:11;1082:42;;;;;;;;;;;;;;;1024:11;-1:-1:-1;;1134:246:0;1155:7;:14;1151:1;:18;;;1134:246;;;1191:17;1231:124;;;;;;;;1262:7;1270:1;1262:10;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1231:124:0;;;;;1294:7;1302:1;1294:10;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1231:124:0;;;;;1326:8;1335:1;1326:11;;;;;;;;;;;;;;;;;;;;;1231:124;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;1191:178:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1191:178:0;;;-1:-1:-1;;;;;1191:178:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;1191:178:0;-1:-1:-1;;;1191:178:0;;;;;;;;;;;1171:4;1134:246;;;;780:606;;;;;;163:2781;;;;;;" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "6080604052600436106100555760003560e01c806339a51be5146100fc578063775c300c1461012d578063ad5c464814610144578063c19d93fb14610159578063e07d14b414610184578063e5fdf8de146101de575b600254600160a01b900460ff161561009e5760405162461bcd60e51b8152600401808060200182810382526024815260200180614f7a6024913960400191505060405180910390fd5b6001546001600160a01b031633146100e75760405162461bcd60e51b8152600401808060200182810382526028815260200180614f9e6028913960400191505060405180910390fd5b6002805460ff60a01b1916600160a01b179055005b34801561010857600080fd5b506101116101f3565b604080516001600160a01b039092168252519081900360200190f35b34801561013957600080fd5b50610142610202565b005b34801561015057600080fd5b50610111610725565b34801561016557600080fd5b5061016e610734565b6040805160ff9092168252519081900360200190f35b34801561019057600080fd5b506101ae600480360360208110156101a757600080fd5b5035610744565b604080516001600160a01b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b3480156101ea57600080fd5b5061011161078a565b6000546001600160a01b031681565b600254600160a01b900460ff1660011461024d5760405162461bcd60e51b8152600401808060200182810382526024815260200180614f7a6024913960400191505060405180910390fd5b60003060405161025c90610799565b6001600160a01b03909116815260405190819003602001906000f080158015610289573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507f8eef7239ce5bc4f9918f5584befdc2ee2113478098db0ca89bdf5f0d6ff32a6f919081900360200190a160005b60035460ff821610156104a9576000826001600160a01b031663c9c6539660038460ff16815481106102fb57fe5b6000918252602090912060029091020154600380546001600160a01b039092169160ff871690811061032957fe5b6000918252602080832060016002909302019190910154604080516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909116602485015251604480850194929391928390030190829087803b15801561038f57600080fd5b505af11580156103a3573d6000803e3d6000fd5b505050506040513d60208110156103b957600080fd5b5051600380549192506001600160a01b03851691639e68ceb891849160ff87169081106103e257fe5b60009182526020822060029190910201600101546040805160e086901b6001600160e01b03191681526001600160a01b03949094166004850152600160a01b90910463ffffffff1660248401525160448084019382900301818387803b15801561044b57600080fd5b505af115801561045f573d6000803e3d6000fd5b5050604080516001600160a01b038516815290517f29548d6a519d97e51db535dddb28bc2c7f262348939f8c389a0fe32591848e7d9350908190036020019150a1506001016102cd565b506001546002546000805460405191936001600160a01b03908116938693908216929091169084906104da906107a6565b6001600160a01b039586168152938516602085015291841660408085019190915290841660608401529216608082015290519081900360a001906000f080158015610529573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507f7c450ceeab8451c8a098a92a1867a12d3a3495dafd319c2aece20b2587a50c3c919081900360200190a1816001600160a01b031663f46901ed826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b1580156105c257600080fd5b505af11580156105d6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b03909116915084906105fa906107b3565b6001600160a01b03928316815291166020820152604080519182900301906000f08015801561062d573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507fc8de8af6dbce59b45166a45b74012db8d28162a620199b081b3453c42dcca7ea919081900360200190a1826001600160a01b031663a2e74af6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b1580156106c657600080fd5b505af11580156106da573d6000803e3d6000fd5b505060028054600160a11b60ff60a01b19909116179055505060405133904780156108fc02916000818181858888f1935050505015801561071f573d6000803e3d6000fd5b50505050565b6002546001600160a01b031681565b600254600160a01b900460ff1681565b6003818154811061075157fe5b6000918252602090912060029091020180546001909101546001600160a01b03918216925090811690600160a01b900463ffffffff1683565b6001546001600160a01b031681565b612f9c806107c183390190565b6111798061375d83390190565b6106a4806148d68339019056fe60806040526001805460ff60a01b1916600960a01b17905534801561002357600080fd5b50604051612f9c380380612f9c8339818101604052602081101561004657600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055612f26806100766000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80635855a25a116100715780635855a25a1461015c5780639e68ceb814610164578063a2e74af614610196578063c9c65396146101bc578063e6a43905146101ea578063f46901ed14610218576100b4565b8063017e7e58146100b9578063094b7415146100dd5780631e3dd18b146100e55780632ff7042a146101025780634e91f81114610120578063574f2ba314610142575b600080fd5b6100c161023e565b604080516001600160a01b039092168252519081900360200190f35b6100c161024d565b6100c1600480360360208110156100fb57600080fd5b503561025c565b61010a610283565b6040805160ff9092168252519081900360200190f35b6101406004803603602081101561013657600080fd5b503560ff16610293565b005b61014a610365565b60408051918252519081900360200190f35b61014a61036b565b6101406004803603604081101561017a57600080fd5b5080356001600160a01b0316906020013563ffffffff166103fe565b610140600480360360208110156101ac57600080fd5b50356001600160a01b03166104c1565b6100c1600480360360408110156101d257600080fd5b506001600160a01b038135811691602001351661053d565b6100c16004803603604081101561020057600080fd5b506001600160a01b038135811691602001351661085f565b6101406004803603602081101561022e57600080fd5b50356001600160a01b0316610885565b6000546001600160a01b031681565b6001546001600160a01b031681565b6003818154811061026957fe5b6000918252602090912001546001600160a01b0316905081565b600154600160a01b900460ff1681565b6001546001600160a01b031633146102ed576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b60008160ff1611610345576040805162461bcd60e51b815260206004820152601c60248201527f445873776170466163746f72793a20464f5242494444454e5f46454500000000604482015290519081900360640190fd5b6001805460ff909216600160a01b0260ff60a01b19909216919091179055565b60035490565b60405161037a60208201610901565b6020820181038252601f19601f820116604052506040516020018082805190602001908083835b602083106103c05780518252601f1990920191602091820191016103a1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b6001546001600160a01b03163314610458576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b6040805163d6d788c360e01b815263ffffffff8316600482015290516001600160a01b0384169163d6d788c391602480830192600092919082900301818387803b1580156104a557600080fd5b505af11580156104b9573d6000803e3d6000fd5b505050505050565b6001546001600160a01b0316331461051b576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b031614156105905760405162461bcd60e51b8152600401808060200182810382526022815260200180612ed06022913960400191505060405180910390fd5b600080836001600160a01b0316856001600160a01b0316106105b35783856105b6565b84845b90925090506001600160a01b038216610616576040805162461bcd60e51b815260206004820152601b60248201527f445873776170466163746f72793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615610690576040805162461bcd60e51b815260206004820152601a60248201527f445873776170466163746f72793a20504149525f455849535453000000000000604482015290519081900360640190fd5b6060604051806020016106a290610901565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f56040805163485cc95560e01b81526001600160a01b038781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561077557600080fd5b505af1158015610789573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b031633146108df576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6125c18061090f8339019056fe6080604052600c805463ffffffff191660191790556001600d5534801561002557600080fd5b50604051469080605261256f8239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561245e806101116000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429445873776170466163746f72793a204944454e544943414c5f414444524553534553a265627a7a72315820c6fa710efa4f71df9b005295f714d02cccf70f7f9c7bc282fca1f7f11487da9064736f6c63430005100032608060405234801561001057600080fd5b50604051611179380380611179833981810160405260a081101561003357600080fd5b508051602082015160408301516060840151608090940151600080546001600160a01b039586166001600160a01b031991821617909155600180549486169482169490941790935560028054928516928416929092179091556003805494841694831694909417909355600480549290931691161790556110c0806100b96000396000f3fe60806040526004361061007b5760003560e01c8063c1f4381d1161004e578063c1f4381d14610155578063c45a015514610190578063f2269521146101a5578063f2fde38b146101ba5761007b565b80635cb9c4ec1461007d5780638da5cb5b146100fa578063ad5c46481461012b578063b988847214610140575b005b34801561008957600080fd5b5061007b600480360360208110156100a057600080fd5b8101906020810181356401000000008111156100bb57600080fd5b8201836020820111156100cd57600080fd5b803590602001918460208302840111640100000000831117156100ef57600080fd5b5090925090506101ed565b34801561010657600080fd5b5061010f610511565b604080516001600160a01b039092168252519081900360200190f35b34801561013757600080fd5b5061010f610520565b34801561014c57600080fd5b5061010f61052f565b34801561016157600080fd5b5061007b6004803603604081101561017857600080fd5b506001600160a01b038135811691602001351661053e565b34801561019c57600080fd5b5061010f6105cb565b3480156101b157600080fd5b5061010f6105da565b3480156101c657600080fd5b5061007b600480360360208110156101dd57600080fd5b50356001600160a01b03166105e9565b60005b8181101561050c57600083838381811061020657fe5b905060200201356001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561024e57600080fd5b505afa158015610262573d6000803e3d6000fd5b505050506040513d602081101561027857600080fd5b50519050600084848481811061028a57fe5b905060200201356001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156102d257600080fd5b505afa1580156102e6573d6000803e3d6000fd5b505050506040513d60208110156102fc57600080fd5b5051905084848481811061030c57fe5b905060200201356001600160a01b03166001600160a01b031663a9059cbb86868681811061033657fe5b905060200201356001600160a01b031687878781811061035257fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561039e57600080fd5b505afa1580156103b2573d6000803e3d6000fd5b505050506040513d60208110156103c857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561041957600080fd5b505af115801561042d573d6000803e3d6000fd5b505050506040513d602081101561044357600080fd5b50600090508086868681811061045557fe5b6040805163226bf2d160e21b8152306004820152815160209390930294909401356001600160a01b0316936389afcb449350602480820193918290030181600087803b1580156104a457600080fd5b505af11580156104b8573d6000803e3d6000fd5b505050506040513d60408110156104ce57600080fd5b508051602090910151909250905081156104ec576104ec848361066a565b80156104fc576104fc838261066a565b5050600190920191506101f09050565b505050565b6000546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b031681565b6000546001600160a01b0316331461059d576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6001546001600160a01b031681565b6004546001600160a01b031681565b6000546001600160a01b03163314610648576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03838116911614156107015760025460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b50506003546106fc92506001600160a01b031690508261074c565b610748565b6002546107219061071c9084906001600160a01b031661083f565b6108fe565b15610730576106fc8183610904565b6004546107489083906001600160a01b031683610cc9565b5050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106107985780518252601f199092019160209182019101610779565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146107fa576040519150601f19603f3d011682016040523d82523d6000602084013e6107ff565b606091505b505090508061050c5760405162461bcd60e51b81526004018080602001828103825260238152602001806110696023913960400191505060405180910390fd5b600080600061084e8585610e33565b600154604080516bffffffffffffffffffffffff19606095861b811660208084019190915294861b81166034830152825160288184030181526048830184528051908601206001600160f81b031960688401529390951b9094166069850152607d8401919091527fd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776609d808501919091528151808503909101815260bd9093019052815191012095945050505050565b3b151590565b60025460009061091e9083906001600160a01b031661083f565b9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561095c57600080fd5b505afa158015610970573d6000803e3d6000fd5b505050506040513d606081101561098657600080fd5b5080516020909101516002546dffffffffffffffffffffffffffff92831694509116915060009081906001600160a01b03908116908716106109c95782846109cc565b83835b915091506000821180156109e05750600081115b610a1b5760405162461bcd60e51b815260040180806020018281038252602981526020018061101a6029913960400191505060405180910390fd5b6000610aa8610a9b876001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5c57600080fd5b505afa158015610a70573d6000803e3d6000fd5b505050506040513d6020811015610a8657600080fd5b50516127109063ffffffff90811690610f1116565b899063ffffffff610f6716565b90506000610abc828463ffffffff610f6716565b90506000610ae283610ad68761271063ffffffff610f6716565b9063ffffffff610fca16565b90506000818381610aef57fe5b049050610afd8a8a8d610cc9565b60025460009081906001600160a01b03908116908d1610610b2057826000610b24565b6000835b915091508a6001600160a01b031663022c0d9f83833060006040519080825280601f01601f191660200182016040528015610b66576020820181803883390190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610bd7578181015183820152602001610bbf565b50505050905090810190601f168015610c045780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610c2657600080fd5b505af1158015610c3a573d6000803e3d6000fd5b505060025460408051632e1a7d4d60e01b81526004810188905290516001600160a01b039092169350632e1a7d4d925060248082019260009290919082900301818387803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b5050600354610cba92506001600160a01b031690508461074c565b50505050505050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310610d465780518252601f199092019160209182019101610d27565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610da8576040519150601f19603f3d011682016040523d82523d6000602084013e610dad565b606091505b5091509150818015610ddb575080511580610ddb5750808060200190516020811015610dd857600080fd5b50515b610e2c576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b600080826001600160a01b0316846001600160a01b03161415610e875760405162461bcd60e51b81526004018080602001828103825260268152602001806110436026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610610ea7578284610eaa565b83835b90925090506001600160a01b038216610f0a576040805162461bcd60e51b815260206004820152601f60248201527f44587377617046656552656365697665723a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b80820382811115610f61576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b92915050565b6000811580610f8257505080820282828281610f7f57fe5b04145b610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe44587377617046656552656365697665723a20494e53554646494349454e545f4c495155494449545944587377617046656552656365697665723a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158204488a5c6d24546776395f2d8e5b107b99bb124fd814a71281fc10579ac69368864736f6c63430005100032608060405234801561001057600080fd5b506040516106a43803806106a48339818101604052604081101561003357600080fd5b508051602090910151600080546001600160a01b039384166001600160a01b0319918216179091556002805493909216921691909117905561062a8061007a6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a2e74af611610066578063a2e74af614610136578063a6dab93f1461015c578063c45a01551461018a578063f2fde38b14610192578063f46901ed146101b857610093565b806317c06b34146100985780634e91f811146100da5780638da5cb5b146100fc5780639e68ceb814610104575b600080fd5b6100be600480360360208110156100ae57600080fd5b50356001600160a01b03166101de565b604080516001600160a01b039092168252519081900360200190f35b6100fa600480360360208110156100f057600080fd5b503560ff166101f9565b005b6100be6102b0565b6100fa6004803603604081101561011a57600080fd5b5080356001600160a01b0316906020013563ffffffff166102bf565b6100fa6004803603602081101561014c57600080fd5b50356001600160a01b03166103a6565b6100fa6004803603604081101561017257600080fd5b506001600160a01b0381358116916020013516610441565b6100be6104bc565b6100fa600480360360208110156101a857600080fd5b50356001600160a01b03166104cb565b6100fa600480360360208110156101ce57600080fd5b50356001600160a01b031661053a565b6001602052600090815260409020546001600160a01b031681565b6000546001600160a01b03163314610246576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051634e91f81160e01b815260ff8416600482015290516001600160a01b0390921691634e91f8119160248082019260009290919082900301818387803b15801561029557600080fd5b505af11580156102a9573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031681565b6000546001600160a01b03163314806102f157506001600160a01b038281166000908152600160205260409020541633145b610330576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600254604080516313cd19d760e31b81526001600160a01b03858116600483015263ffffffff8516602483015291519190921691639e68ceb891604480830192600092919082900301818387803b15801561038a57600080fd5b505af115801561039e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146103f3576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051635173a57b60e11b81526001600160a01b0384811660048301529151919092169163a2e74af691602480830192600092919082900301818387803b15801561029557600080fd5b6000546001600160a01b0316331461048e576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6002546001600160a01b031681565b6000546001600160a01b03163314610518576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610587576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6002546040805163f46901ed60e01b81526001600160a01b0384811660048301529151919092169163f46901ed91602480830192600092919082900301818387803b15801561029557600080fdfe4458737761704665655365747465723a20464f5242494444454e000000000000a265627a7a72315820a0be763e035529abb8cc9d7d753668d36fa96da26d709983f608f42e5b3d615964736f6c634300051000324458737761704465706c6f7965723a2057524f4e475f4445504c4f5945525f53544154454458737761704465706c6f7965723a2043414c4c45525f4e4f545f4645455f544f5f534554544552a265627a7a72315820f21258416ec6a704eb1b3b2327ba2cad2a5062ee9f012b0de5c7632a8796809064736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x55 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39A51BE5 EQ PUSH2 0xFC JUMPI DUP1 PUSH4 0x775C300C EQ PUSH2 0x12D JUMPI DUP1 PUSH4 0xAD5C4648 EQ PUSH2 0x144 JUMPI DUP1 PUSH4 0xC19D93FB EQ PUSH2 0x159 JUMPI DUP1 PUSH4 0xE07D14B4 EQ PUSH2 0x184 JUMPI DUP1 PUSH4 0xE5FDF8DE EQ PUSH2 0x1DE JUMPI JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x9E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4F7A PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4F9E PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x108 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x111 PUSH2 0x1F3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x142 PUSH2 0x202 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x150 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x111 PUSH2 0x725 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x165 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x16E PUSH2 0x734 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x190 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x744 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x111 PUSH2 0x78A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH1 0x1 EQ PUSH2 0x24D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4F7A PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x40 MLOAD PUSH2 0x25C SWAP1 PUSH2 0x799 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x289 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH32 0x8EEF7239CE5BC4F9918F5584BEFDC2EE2113478098DB0CA89BDF5F0D6FF32A6F SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 PUSH1 0x0 JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF DUP3 AND LT ISZERO PUSH2 0x4A9 JUMPI PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC9C65396 PUSH1 0x3 DUP5 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2FB JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 PUSH1 0x2 SWAP1 SWAP2 MUL ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH1 0xFF DUP8 AND SWAP1 DUP2 LT PUSH2 0x329 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 SWAP1 SWAP2 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP9 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP5 SWAP1 SWAP2 AND PUSH1 0x24 DUP6 ADD MSTORE MLOAD PUSH1 0x44 DUP1 DUP6 ADD SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP1 SUB ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x38F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3A3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x9E68CEB8 SWAP2 DUP5 SWAP2 PUSH1 0xFF DUP8 AND SWAP1 DUP2 LT PUSH2 0x3E2 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 KECCAK256 PUSH1 0x2 SWAP2 SWAP1 SWAP2 MUL ADD PUSH1 0x1 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0xE0 DUP7 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH4 0xFFFFFFFF AND PUSH1 0x24 DUP5 ADD MSTORE MLOAD PUSH1 0x44 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x44B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x45F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x29548D6A519D97E51DB535DDDB28BC2C7F262348939F8C389A0FE32591848E7D SWAP4 POP SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP2 POP LOG1 POP PUSH1 0x1 ADD PUSH2 0x2CD JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x2 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 DUP7 SWAP4 SWAP1 DUP3 AND SWAP3 SWAP1 SWAP2 AND SWAP1 DUP5 SWAP1 PUSH2 0x4DA SWAP1 PUSH2 0x7A6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND DUP2 MSTORE SWAP4 DUP6 AND PUSH1 0x20 DUP6 ADD MSTORE SWAP2 DUP5 AND PUSH1 0x40 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP5 AND PUSH1 0x60 DUP5 ADD MSTORE SWAP3 AND PUSH1 0x80 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x529 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH32 0x7C450CEEAB8451C8A098A92A1867A12D3A3495DAFD319C2AECE20B2587A50C3C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF46901ED DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP5 SWAP1 PUSH2 0x5FA SWAP1 PUSH2 0x7B3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x62D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH32 0xC8DE8AF6DBCE59B45166A45B74012DB8D28162A620199B081B3453C42DCCA7EA SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA2E74AF6 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA1 SHL PUSH1 0xFF PUSH1 0xA0 SHL NOT SWAP1 SWAP2 AND OR SWAP1 SSTORE POP POP PUSH1 0x40 MLOAD CALLER SWAP1 SELFBALANCE DUP1 ISZERO PUSH2 0x8FC MUL SWAP2 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x71F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x751 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 PUSH1 0x2 SWAP1 SWAP2 MUL ADD DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP3 POP SWAP1 DUP2 AND SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP4 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2F9C DUP1 PUSH2 0x7C1 DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH2 0x1179 DUP1 PUSH2 0x375D DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH2 0x6A4 DUP1 PUSH2 0x48D6 DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x9 PUSH1 0xA0 SHL OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x2F9C CODESIZE SUB DUP1 PUSH2 0x2F9C DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2F26 DUP1 PUSH2 0x76 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5855A25A GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x5855A25A EQ PUSH2 0x15C JUMPI DUP1 PUSH4 0x9E68CEB8 EQ PUSH2 0x164 JUMPI DUP1 PUSH4 0xA2E74AF6 EQ PUSH2 0x196 JUMPI DUP1 PUSH4 0xC9C65396 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0xE6A43905 EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0xF46901ED EQ PUSH2 0x218 JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x17E7E58 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x94B7415 EQ PUSH2 0xDD JUMPI DUP1 PUSH4 0x1E3DD18B EQ PUSH2 0xE5 JUMPI DUP1 PUSH4 0x2FF7042A EQ PUSH2 0x102 JUMPI DUP1 PUSH4 0x4E91F811 EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0x574F2BA3 EQ PUSH2 0x142 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0x23E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xC1 PUSH2 0x24D JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x25C JUMP JUMPDEST PUSH2 0x10A PUSH2 0x283 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xFF AND PUSH2 0x293 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x14A PUSH2 0x365 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x14A PUSH2 0x36B JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x17A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x3FE JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4C1 JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x53D JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x200 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x85F JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x885 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x269 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2ED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND GT PUSH2 0x345 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A20464F5242494444454E5F46454500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH1 0xFF PUSH1 0xA0 SHL NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37A PUSH1 0x20 DUP3 ADD PUSH2 0x901 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3C0 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x458 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xD6D788C3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0xD6D788C3 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4B9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x51B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x590 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2ED0 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x5B3 JUMPI DUP4 DUP6 PUSH2 0x5B6 JUMP JUMPDEST DUP5 DUP5 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x616 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A205A45524F5F414444524553530000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD AND ISZERO PUSH2 0x690 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A20504149525F455849535453000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0x6A2 SWAP1 PUSH2 0x901 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP SWAP1 POP PUSH1 0x0 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 DUP3 MLOAD PUSH1 0x20 DUP5 ADD PUSH1 0x0 CREATE2 PUSH1 0x40 DUP1 MLOAD PUSH4 0x485CC955 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP8 POP SWAP1 DUP8 AND SWAP2 PUSH4 0x485CC955 SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x775 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x789 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP10 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP1 SLOAD SWAP8 DUP14 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP9 DUP10 AND DUP2 OR SWAP1 SWAP2 SSTORE SWAP4 DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP7 DUP7 MSTORE DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP1 SLOAD DUP9 AND DUP6 OR SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE SWAP6 DUP2 SWAP1 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 SWAP6 ADD DUP1 SLOAD SWAP1 SWAP8 AND DUP5 OR SWAP1 SWAP7 SSTORE SWAP3 SLOAD DUP4 MLOAD SWAP3 DUP4 MSTORE SWAP1 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0xD3648BD0F6BA80134A33BA9275AC585D9D315F0AD8355CDDEFDE31AFA28D0E9 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x8DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x25C1 DUP1 PUSH2 0x90F DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH1 0x19 OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0xD SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD CHAINID SWAP1 DUP1 PUSH1 0x52 PUSH2 0x256F DUP3 CODECOPY PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB PUSH1 0x52 ADD DUP3 KECCAK256 DUP3 DUP3 ADD DUP3 MSTORE PUSH1 0x6 DUP4 MSTORE PUSH6 0x44587377617 PUSH1 0xD4 SHL PUSH1 0x20 SWAP4 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD DUP4 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL SWAP1 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x3649D708A7ABF9E212D0A587955EAD4123223014B2E46201DFB587457CBD4591 DUP2 DUP4 ADD MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP1 MSTORE DUP3 MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x3 SSTORE POP PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0x245E DUP1 PUSH2 0x111 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1CF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6A627842 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xBA9A7A56 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x583 JUMPI DUP1 PUSH4 0xD6D788C3 EQ PUSH2 0x5D4 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x5F7 JUMPI DUP1 PUSH4 0xFFF6CAE9 EQ PUSH2 0x625 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0xBA9A7A56 EQ PUSH2 0x545 JUMPI DUP1 PUSH4 0xBC25CF77 EQ PUSH2 0x54D JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xD21220A7 EQ PUSH2 0x57B JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0x89AFCB44 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x511 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x519 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x6A627842 EQ PUSH2 0x458 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x47E JUMPI DUP1 PUSH4 0x7464FC3D EQ PUSH2 0x4A4 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x485CC955 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x485CC955 EQ PUSH2 0x3F9 JUMPI DUP1 PUSH4 0x54CF2AEB EQ PUSH2 0x427 JUMPI DUP1 PUSH4 0x5909C0D5 EQ PUSH2 0x448 JUMPI DUP1 PUSH4 0x5A3D5493 EQ PUSH2 0x450 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x3D3 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x3F1 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x1AD JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x317 JUMPI DUP1 PUSH4 0xDFE1681 EQ PUSH2 0x357 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x37B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x395 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x22C0D9F EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x262 JUMPI DUP1 PUSH4 0x902F1AC EQ PUSH2 0x2DF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP4 ADD CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x62D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26A PUSH2 0xB7F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x28C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2D1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2E7 PUSH2 0xBA1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x32D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xBCB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x35F PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xBF1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xBF7 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xC91 JUMP JUMPDEST PUSH2 0x3DB PUSH2 0xCB5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xCBA JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x40F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xCC0 JUMP JUMPDEST PUSH2 0x42F PUSH2 0xD45 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xD51 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xD57 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD5D JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x494 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x105E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1076 JUMP JUMPDEST PUSH2 0x4F8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1088 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x26A PUSH2 0x142F JUMP JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x52F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x144E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x145B JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x563 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1461 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15CD JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15DC JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x17EF JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x60D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x18BF JUMP JUMPDEST PUSH2 0x260 PUSH2 0x18DC JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x679 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE DUP5 ISZERO ISZERO DUP1 PUSH2 0x68C JUMPI POP PUSH1 0x0 DUP5 GT JUMPDEST PUSH2 0x6C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23B6 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6D2 PUSH2 0xBA1 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP8 LT DUP1 ISZERO PUSH2 0x6F7 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP7 LT JUMPDEST PUSH2 0x732 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2394 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 SWAP1 DUP2 AND SWAP1 DUP10 AND DUP3 EQ DUP1 ISZERO SWAP1 PUSH2 0x770 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST PUSH2 0x7BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x445873776170506169723A20494E56414C49445F544F PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP11 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x7CB DUP3 DUP11 DUP14 PUSH2 0x1A3F JUMP JUMPDEST DUP10 ISZERO PUSH2 0x7DC JUMPI PUSH2 0x7DC DUP2 DUP11 DUP13 PUSH2 0x1A3F JUMP JUMPDEST DUP7 ISZERO PUSH2 0x897 JUMPI DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x78B94AE6 CALLER DUP14 DUP14 DUP13 DUP13 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x87E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x892 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8F1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x907 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x953 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x967 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x97D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP PUSH1 0x0 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP6 AND DUP11 SWAP1 SUB DUP4 GT PUSH2 0x9A0 JUMPI PUSH1 0x0 PUSH2 0x9AF JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 GT PUSH2 0x9CC JUMPI PUSH1 0x0 PUSH2 0x9DB JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 GT DUP1 PUSH2 0x9EC JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST PUSH2 0xA27 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23DC PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC SLOAD PUSH1 0x0 SWAP1 PUSH2 0xA64 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xA58 DUP8 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0xC SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0xA86 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH2 0xAB8 PUSH4 0x5F5E100 PUSH2 0xAAC PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP12 DUP2 AND SWAP1 DUP12 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xAC8 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST LT ISZERO PUSH2 0xB0B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x445873776170506169723A204B PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH2 0xB19 DUP5 DUP5 DUP9 DUP9 PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP14 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP13 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND SWAP2 CALLER SWAP2 PUSH32 0xD78AD95FA46C994B6551D0DA85FC275FE613CE37657FB8D5E3D130840159D822 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x44587377617 PUSH1 0xD4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP3 PUSH1 0x1 PUSH1 0x70 SHL DUP4 DIV SWAP1 SWAP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1E52 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x0 NOT EQ PUSH2 0xC7C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xC57 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE JUMPDEST PUSH2 0xC87 DUP5 DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD17 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x7 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xC SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0xDAB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0xDBB PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP4 SWAP6 POP SWAP2 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 PUSH2 0xED5 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xEF2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF00 DUP8 DUP8 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0xF3D JUMPI PUSH2 0xF29 PUSH2 0x3E8 PUSH2 0xA58 PUSH2 0xF24 DUP8 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0x2146 JUMP JUMPDEST SWAP9 POP PUSH2 0xF38 PUSH1 0x0 PUSH2 0x3E8 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xF8C JUMP JUMPDEST PUSH2 0xF89 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF5A DUP7 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF61 JUMPI INVALID JUMPDEST DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF7C DUP7 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF83 JUMPI INVALID JUMPDEST DIV PUSH2 0x222E JUMP JUMPDEST SWAP9 POP JUMPDEST PUSH1 0x0 DUP10 GT PUSH2 0xFCB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x236B PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFD5 DUP11 DUP11 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xFE1 DUP7 DUP7 DUP11 DUP11 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x1011 JUMPI PUSH1 0x8 SLOAD PUSH2 0x100D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP2 MLOAD CALLER SWAP3 PUSH32 0x4C209B5FC8AD50758F13E2E1088BA56A560DFF690A1C6FEF26394F4C03821C4F SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP SWAP5 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xB SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x10D7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0x10E7 PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP5 SWAP7 POP SWAP3 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP4 SWAP2 AND SWAP2 PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1143 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1157 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x116D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ADDRESS PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0x1204 DUP9 DUP9 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x121B DUP5 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x1222 JUMPI INVALID JUMPDEST DIV SWAP11 POP DUP1 PUSH2 0x1236 DUP5 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x123D JUMPI INVALID JUMPDEST DIV SWAP10 POP PUSH1 0x0 DUP12 GT DUP1 ISZERO PUSH2 0x1250 JUMPI POP PUSH1 0x0 DUP11 GT JUMPDEST PUSH2 0x128B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2401 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1295 ADDRESS DUP5 PUSH2 0x2246 JUMP JUMPDEST PUSH2 0x12A0 DUP8 DUP14 DUP14 PUSH2 0x1A3F JUMP JUMPDEST PUSH2 0x12AB DUP7 DUP14 DUP13 PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1305 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x131B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1367 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x137B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP PUSH2 0x13A1 DUP6 DUP6 DUP12 DUP12 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x13D1 JUMPI PUSH1 0x8 SLOAD PUSH2 0x13CD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP13 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND SWAP3 CALLER SWAP3 PUSH32 0xDCCD412F0B1252819CB1FD330B93224CA42612892BB3F4F789976E6D81936496 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP POP POP POP POP POP PUSH1 0x1 PUSH1 0xD DUP2 SWAP1 SSTORE POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x445853 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST PUSH2 0x3E8 DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x14AD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP5 SWAP1 SWAP4 AND SWAP3 PUSH2 0x155C SWAP3 DUP6 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 DUP6 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1533 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1549 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x15C3 SWAP3 DUP5 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST TIMESTAMP DUP5 LT ISZERO PUSH2 0x1637 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x11161CDDD85C115490CC8C0E8811561412549151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP12 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP6 ADD DUP3 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x102 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH2 0x122 DUP1 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP7 ADD DUP7 MSTORE PUSH2 0x142 DUP5 ADD DUP1 DUP3 MSTORE DUP7 MLOAD SWAP7 DUP4 ADD SWAP7 SWAP1 SWAP7 KECCAK256 SWAP6 DUP4 SWAP1 MSTORE PUSH2 0x162 DUP5 ADD DUP1 DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0xFF DUP10 AND PUSH2 0x182 DUP6 ADD MSTORE PUSH2 0x1A2 DUP5 ADD DUP9 SWAP1 MSTORE PUSH2 0x1C2 DUP5 ADD DUP8 SWAP1 MSTORE MLOAD SWAP2 SWAP4 SWAP3 PUSH2 0x1E2 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1752 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1788 JUMPI POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x17D9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617045524332303A20494E56414C49445F5349474E41545552450000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x17E4 DUP10 DUP10 DUP10 PUSH2 0x1E52 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1846 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3E8 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x18A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A20464F5242494444454E5F46454500000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x1928 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x1A38 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1979 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x198D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x19A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A04 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x1 PUSH1 0xD SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH32 0x7472616E7366657228616464726573732C75696E743235362900000000000000 PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP7 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP5 MSTORE SWAP2 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP2 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1AEC JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1ACD JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1B4E JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1B53 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x1B81 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x1B81 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x1BD2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A205452414E534645525F4641494C45440000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0x1BF4 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0x1BF1 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 GT DUP1 ISZERO SWAP1 PUSH2 0x1CAA JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 GT ISZERO JUMPDEST PUSH2 0x1CF2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x445873776170506169723A204F564552464C4F57 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH4 0xFFFFFFFF TIMESTAMP DUP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV DUP2 AND DUP3 SUB SWAP1 DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1D22 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 AND ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1D36 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1DA7 JUMPI DUP1 PUSH4 0xFFFFFFFF AND PUSH2 0x1D64 DUP6 PUSH2 0x1D4F DUP7 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x22F6 AND JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE PUSH4 0xFFFFFFFF DUP2 AND PUSH2 0x1D8F DUP5 PUSH2 0x1D4F DUP8 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP9 DUP2 AND SWAP2 SWAP1 SWAP2 OR PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x70 SHL NOT AND PUSH1 0x1 PUSH1 0x70 SHL DUP9 DUP4 AND DUP2 MUL SWAP2 SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0xE0 SHL PUSH4 0xFFFFFFFF DUP8 AND MUL OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP4 DIV SWAP1 SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x1C411E9A96E071241C2F21F7726B17AE89E3CAB4C78BE50E062B03A9FFFBBAD1 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1EDD SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x1F12 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17E7E58 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1FE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x17FB8215 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2FF7042A SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2036 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x204A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2060 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO DUP1 ISZERO SWAP6 POP SWAP2 SWAP3 POP SWAP1 PUSH2 0x2131 JUMPI DUP1 ISZERO PUSH2 0x212C JUMPI PUSH1 0x0 PUSH2 0x20A3 PUSH2 0xF24 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 DUP2 AND SWAP1 DUP10 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x20B0 DUP4 PUSH2 0x2146 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x2129 JUMPI PUSH1 0x0 PUSH2 0x20DE PUSH2 0x20CF DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2105 DUP4 PUSH2 0x20F9 DUP7 PUSH1 0xFF DUP11 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0x2112 JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 ISZERO PUSH2 0x2125 JUMPI PUSH2 0x2125 DUP9 DUP3 PUSH2 0x2198 JUMP JUMPDEST POP POP POP JUMPDEST POP POP JUMPDEST PUSH2 0x213D JUMP JUMPDEST DUP1 ISZERO PUSH2 0x213D JUMPI PUSH1 0x0 PUSH1 0xB SSTORE JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 GT ISZERO PUSH2 0x2189 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x2 DUP3 DIV ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2183 JUMPI DUP1 SWAP2 POP PUSH1 0x2 DUP2 DUP3 DUP6 DUP2 PUSH2 0x2172 JUMPI INVALID JUMPDEST DIV ADD DUP2 PUSH2 0x217B JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x215B JUMP JUMPDEST POP PUSH2 0x2193 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2193 JUMPI POP PUSH1 0x1 JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x21AB SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x21D6 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x223D JUMPI DUP2 PUSH2 0x223F JUMP JUMPDEST DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x226F SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SLOAD PUSH2 0x229C SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH1 0x1 PUSH1 0x70 SHL MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP5 AND DUP2 PUSH2 0x2313 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F 0x4D 0x49 0x4E SLOAD GASLIMIT DIFFICULTY DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4F SSTORE SLOAD POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x49 0x4E POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F TIMESTAMP SSTORE MSTORE 0x4E GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 0xBC SWAP15 MSTORE 0xC6 0x22 0xA7 RETURN PUSH25 0xA026EE16432D9BBC35CC0DB3D76CFAFD5D67631F595A9B1864 PUSH20 0x6F6C63430005100032454950373132446F6D6169 PUSH15 0x28737472696E67206E616D652C7374 PUSH19 0x696E672076657273696F6E2C75696E74323536 KECCAK256 PUSH4 0x6861696E 0x49 PUSH5 0x2C61646472 PUSH6 0x737320766572 PUSH10 0x6679696E67436F6E7472 PUSH2 0x6374 0x29 DIFFICULTY PC PUSH20 0x776170466163746F72793A204944454E54494341 0x4C 0x5F COINBASE DIFFICULTY DIFFICULTY MSTORE GASLIMIT MSTORE8 MSTORE8 GASLIMIT MSTORE8 LOG2 PUSH6 0x627A7A723158 KECCAK256 0xC6 STATICCALL PUSH18 0xEFA4F71DF9B005295F714D02CCCF70F7F9C PUSH28 0xC282FCA1F7F11487DA9064736F6C6343000510003260806040523480 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1179 CODESIZE SUB DUP1 PUSH2 0x1179 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x80 SWAP1 SWAP5 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP5 DUP7 AND SWAP5 DUP3 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 DUP6 AND SWAP3 DUP5 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP5 DUP5 AND SWAP5 DUP4 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE PUSH1 0x4 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH2 0x10C0 DUP1 PUSH2 0xB9 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC1F4381D GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xC1F4381D EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0xF2269521 EQ PUSH2 0x1A5 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1BA JUMPI PUSH2 0x7B JUMP JUMPDEST DUP1 PUSH4 0x5CB9C4EC EQ PUSH2 0x7D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0xAD5C4648 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0xB9888472 EQ PUSH2 0x140 JUMPI JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x106 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x511 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x520 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x52F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x53E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x19C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x5CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x5DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5E9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x50C JUMPI PUSH1 0x0 DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0x206 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x262 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x28A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x30C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP7 DUP7 DUP7 DUP2 DUP2 LT PUSH2 0x336 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP8 DUP8 DUP2 DUP2 LT PUSH2 0x352 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x20 SWAP3 DUP4 MUL SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH4 0x70A08231 SWAP4 POP PUSH1 0x24 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x39E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP7 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x419 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x42D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x443 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP1 POP DUP1 DUP7 DUP7 DUP7 DUP2 DUP2 LT PUSH2 0x455 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x226BF2D1 PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 MUL SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH4 0x89AFCB44 SWAP4 POP PUSH1 0x24 DUP1 DUP3 ADD SWAP4 SWAP2 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4B8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP DUP2 ISZERO PUSH2 0x4EC JUMPI PUSH2 0x4EC DUP5 DUP4 PUSH2 0x66A JUMP JUMPDEST DUP1 ISZERO PUSH2 0x4FC JUMPI PUSH2 0x4FC DUP4 DUP3 PUSH2 0x66A JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 POP PUSH2 0x1F0 SWAP1 POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x59D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A20464F5242494444454E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x4 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x648 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A20464F5242494444454E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x701 JUMPI PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2E1A7D4D SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6E1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x3 SLOAD PUSH2 0x6FC SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP3 PUSH2 0x74C JUMP JUMPDEST PUSH2 0x748 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x721 SWAP1 PUSH2 0x71C SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x83F JUMP JUMPDEST PUSH2 0x8FE JUMP JUMPDEST ISZERO PUSH2 0x730 JUMPI PUSH2 0x6FC DUP2 DUP4 PUSH2 0x904 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x748 SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH2 0xCC9 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP4 SWAP1 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x798 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x779 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x7FA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x7FF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x50C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1069 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x84E DUP6 DUP6 PUSH2 0xE33 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH1 0x60 SWAP6 DUP7 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP5 DUP7 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP7 ADD KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT PUSH1 0x68 DUP5 ADD MSTORE SWAP4 SWAP1 SWAP6 SHL SWAP1 SWAP5 AND PUSH1 0x69 DUP6 ADD MSTORE PUSH1 0x7D DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xD306A548755B9295EE49CC729E13CA4A45E00199BBD890FA146DA43A50571776 PUSH1 0x9D DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP4 ADD SWAP1 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x91E SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x83F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x970 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x986 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x2 SLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP5 POP SWAP2 AND SWAP2 POP PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP8 AND LT PUSH2 0x9C9 JUMPI DUP3 DUP5 PUSH2 0x9CC JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 GT DUP1 ISZERO PUSH2 0x9E0 JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST PUSH2 0xA1B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x101A PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAA8 PUSH2 0xA9B DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x54CF2AEB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA70 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x2710 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0xF11 AND JUMP JUMPDEST DUP10 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xABC DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xAE2 DUP4 PUSH2 0xAD6 DUP8 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xFCA AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0xAEF JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0xAFD DUP11 DUP11 DUP14 PUSH2 0xCC9 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP14 AND LT PUSH2 0xB20 JUMPI DUP3 PUSH1 0x0 PUSH2 0xB24 JUMP JUMPDEST PUSH1 0x0 DUP4 JUMPDEST SWAP2 POP SWAP2 POP DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x22C0D9F DUP4 DUP4 ADDRESS PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB66 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xBD7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xBBF JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xC04 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC3A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP4 POP PUSH4 0x2E1A7D4D SWAP3 POP PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC9F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x3 SLOAD PUSH2 0xCBA SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP5 PUSH2 0x74C JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP3 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 SWAP4 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xD46 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xD27 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xDA8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xDAD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0xDDB JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0xDDB JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0xE2C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E7366657248656C7065723A205452414E534645525F4641494C454400 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xE87 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1043 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0xEA7 JUMPI DUP3 DUP5 PUSH2 0xEAA JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xF0A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A205A45524F5F4144445245535300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0xF82 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0xF7F JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID DIFFICULTY PC PUSH20 0x77617046656552656365697665723A20494E5355 CHAINID CHAINID 0x49 NUMBER 0x49 GASLIMIT 0x4E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE DIFFICULTY PC PUSH20 0x77617046656552656365697665723A204944454E SLOAD 0x49 NUMBER COINBASE 0x4C 0x5F COINBASE DIFFICULTY DIFFICULTY MSTORE GASLIMIT MSTORE8 MSTORE8 GASLIMIT MSTORE8 SLOAD PUSH19 0x616E7366657248656C7065723A204554485F54 MSTORE COINBASE 0x4E MSTORE8 CHAINID GASLIMIT MSTORE 0x5F CHAINID COINBASE 0x49 0x4C GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 DIFFICULTY DUP9 0xA5 0xC6 0xD2 GASLIMIT CHAINID PUSH24 0x6395F2D8E5B107B99BB124FD814A71281FC10579AC693688 PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x6A4 CODESIZE SUB DUP1 PUSH2 0x6A4 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP4 SWAP1 SWAP3 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x62A DUP1 PUSH2 0x7A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA2E74AF6 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA2E74AF6 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0xA6DAB93F EQ PUSH2 0x15C JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x18A JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x192 JUMPI DUP1 PUSH4 0xF46901ED EQ PUSH2 0x1B8 JUMPI PUSH2 0x93 JUMP JUMPDEST DUP1 PUSH4 0x17C06B34 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x4E91F811 EQ PUSH2 0xDA JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xFC JUMPI DUP1 PUSH4 0x9E68CEB8 EQ PUSH2 0x104 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xFF AND PUSH2 0x1F9 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xBE PUSH2 0x2B0 JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x11A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x2BF JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A6 JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x172 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x441 JUMP JUMPDEST PUSH2 0xBE PUSH2 0x4BC JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4CB JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x53A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x246 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4E91F811 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x4E91F811 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH2 0x2F1 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND CALLER EQ JUMPDEST PUSH2 0x330 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x13CD19D7 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0x9E68CEB8 SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x38A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x39E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3F3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x5173A57B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xA2E74AF6 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x48E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x518 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x587 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xF46901ED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xF46901ED SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT INVALID DIFFICULTY PC PUSH20 0x7761704665655365747465723A20464F52424944 DIFFICULTY GASLIMIT 0x4E STOP STOP STOP STOP STOP STOP LOG2 PUSH6 0x627A7A723158 KECCAK256 LOG0 0xBE PUSH23 0x3E035529ABB8CC9D7D753668D36FA96DA26D709983F608 DELEGATECALL 0x2E JUMPDEST RETURNDATASIZE PUSH2 0x5964 PUSH20 0x6F6C634300051000324458737761704465706C6F PUSH26 0x65723A2057524F4E475F4445504C4F5945525F53544154454458 PUSH20 0x7761704465706C6F7965723A2043414C4C45525F 0x4E 0x4F SLOAD 0x5F CHAINID GASLIMIT GASLIMIT 0x5F SLOAD 0x4F 0x5F MSTORE8 GASLIMIT SLOAD SLOAD GASLIMIT MSTORE LOG2 PUSH6 0x627A7A723158 KECCAK256 CALLCODE SLT PC COINBASE PUSH15 0xC6A704EB1B3B2327BA2CAD2A5062EE SWAP16 ADD 0x2B 0xD 0xE5 0xC7 PUSH4 0x2A879680 SWAP1 PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ", - "sourceMap": "163:2781:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1535:5;;-1:-1:-1;;;1535:5:0;;;;:10;1527:59;;;;-1:-1:-1;;;1527:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1618:11;;-1:-1:-1;;;;;1618:11:0;1604:10;:25;1596:78;;;;-1:-1:-1;;;1596:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1684:5;:9;;-1:-1:-1;;;;1684:9:0;-1:-1:-1;;;1684:9:0;;;163:2781;198:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;198:42:0;;;:::i;:::-;;;;-1:-1:-1;;;;;198:42:0;;;;;;;;;;;;;;1768:1166;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1768:1166:0;;;:::i;:::-;;286:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;286:19:0;;;:::i;311:22::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;311:22:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;446:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;446:36:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;446:36:0;;:::i;:::-;;;;-1:-1:-1;;;;;446:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;246:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;246:34:0;;;:::i;198:42::-;;;-1:-1:-1;;;;;198:42:0;;:::o;1768:1166::-;1811:5;;-1:-1:-1;;;1811:5:0;;;;1820:1;1811:10;1803:59;;;;-1:-1:-1;;;1803:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1872:27;1928:4;1902:32;;;;;:::i;:::-;-1:-1:-1;;;;;1902:32:0;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;1949:43:0;;;-1:-1:-1;;;;;1949:43:0;;;;;;1872:62;;-1:-1:-1;1949:43:0;;;;;;;;;;2006:7;2002:334;2023:17;:24;2019:28;;;;2002:334;;;2069:15;2087:13;-1:-1:-1;;;;;2087:24:0;;2112:17;2130:1;2112:20;;;;;;;;;;;;;;;;;;;;;;;:27;2141:17;:20;;-1:-1:-1;;;;;2112:27:0;;;;2141:20;;;;;;;;;;;;;;;;;;:27;:20;;;;;:27;;;;;2087:82;;;-1:-1:-1;;;;;;2087:82:0;;;;;;;-1:-1:-1;;;;;2087:82:0;;;;;;;2141:27;;;;2087:82;;;;;;;;;;2141:20;;2087:82;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;2087:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2087:82:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2087:82:0;2217:17;:20;;2087:82;;-1:-1:-1;;;;;;2183:24:0;;;;;2087:82;;2217:20;;;;;;;;;;;;;;;;;;;;;;;:28;;;2183:63;;;;;;;-1:-1:-1;;;;;;2183:63:0;;;-1:-1:-1;;;;;2183:63:0;;;;;;;;-1:-1:-1;;;2217:28:0;;;;;2183:63;;;;;;;;;;;;;;;2217:20;2183:63;;;;5:2:-1;;;;30:1;27;20:12;5:2;2183:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;2265:60:0;;;-1:-1:-1;;;;;2265:60:0;;;;;;;;-1:-1:-1;2265:60:0;;;;;;;-1:-1:-1;2265:60:0;-1:-1:-1;2049:4:0;;2002:334;;;-1:-1:-1;2418:11:0;;2455:4;;2345:35;2461:19;;2383:120;;2345:35;;-1:-1:-1;;;;;2418:11:0;;;;2439:13;;2455:4;;;;2461:19;;;;2418:11;;2383:120;;;:::i;:::-;-1:-1:-1;;;;;2383:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2383:120:0;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;2518:47:0;;;-1:-1:-1;;;;;2518:47:0;;;;;;2345:158;;-1:-1:-1;2518:47:0;;;;;;;;;;2575:13;-1:-1:-1;;;;;2575:22:0;;2606:17;2575:50;;;;;;;;;;;;;-1:-1:-1;;;;;2575:50:0;-1:-1:-1;;;;;2575:50:0;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2575:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;2698:11:0;;2678:56;;2644:31;;-1:-1:-1;;;;;;2698:11:0;;;;-1:-1:-1;2719:13:0;;2678:56;;;:::i;:::-;-1:-1:-1;;;;;2678:56:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2678:56:0;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;2749:43:0;;;-1:-1:-1;;;;;2749:43:0;;;;;;2644:90;;-1:-1:-1;2749:43:0;;;;;;;;;;2802:13;-1:-1:-1;;;;;2802:28:0;;2839:15;2802:54;;;;;;;;;;;;;-1:-1:-1;;;;;2802:54:0;-1:-1:-1;;;;;2802:54:0;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2802:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;2874:1:0;2866:9;;-1:-1:-1;;;;;;;2866:9:0;;;;;;-1:-1:-1;;2885:42:0;;:10;;2905:21;2885:42;;;;;-1:-1:-1;2885:42:0;-1:-1:-1;2885:42:0;2905:21;2885:10;:42;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2885:42:0;1768:1166;;;:::o;286:19::-;;;-1:-1:-1;;;;;286:19:0;;:::o;311:22::-;;;-1:-1:-1;;;311:22:0;;;;;:::o;446:36::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;446:36:0;;;;-1:-1:-1;446:36:0;;;;-1:-1:-1;;;446:36:0;;;;;:::o;246:34::-;;;-1:-1:-1;;;;;246:34:0;;:::o;163:2781::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o" - } - }, - "interface": [ - { - "inputs": [ - { - "internalType": "address payable", - "name": "_protocolFeeReceiver", - "type": "address" - }, - { - "internalType": "address payable", - "name": "_dxdaoAvatar", - "type": "address" - }, - { - "internalType": "address", - "name": "_WETH", - "type": "address" - }, - { - "internalType": "address[]", - "name": "tokensA", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "tokensB", - "type": "address[]" - }, - { - "internalType": "uint32[]", - "name": "swapFees", - "type": "uint32[]" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "feeReceiver", - "type": "address" - } - ], - "name": "FeeReceiverDeployed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "feeSetter", - "type": "address" - } - ], - "name": "FeeSetterDeployed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "pair", - "type": "address" - } - ], - "name": "PairDeployed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "factory", - "type": "address" - } - ], - "name": "PairFactoryDeployed", - "type": "event" - }, - { - "payable": true, - "stateMutability": "payable", - "type": "fallback" - }, - { - "constant": true, - "inputs": [], - "name": "WETH", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "deploy", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "dxdaoAvatar", - "outputs": [ - { - "internalType": "address payable", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "initialTokenPairs", - "outputs": [ - { - "internalType": "address", - "name": "tokenA", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenB", - "type": "address" - }, - { - "internalType": "uint32", - "name": "swapFee", - "type": "uint32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "protocolFeeReceiver", - "outputs": [ - { - "internalType": "address payable", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "state", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "60806040526002805460ff60a01b1916905534801561001d57600080fd5b506040516200533838038062005338833981810160405260c081101561004257600080fd5b81516020830151604080850151606086018051925194969395919493918201928464010000000082111561007557600080fd5b90830190602082018581111561008a57600080fd5b82518660208202830111640100000000821117156100a757600080fd5b82525081516020918201928201910280838360005b838110156100d45781810151838201526020016100bc565b50505050905001604052602001805160405193929190846401000000008211156100fd57600080fd5b90830190602082018581111561011257600080fd5b825186602082028301116401000000008211171561012f57600080fd5b82525081516020918201928201910280838360005b8381101561015c578181015183820152602001610144565b505050509050016040526020018051604051939291908464010000000082111561018557600080fd5b90830190602082018581111561019a57600080fd5b82518660208202830111640100000000821117156101b757600080fd5b82525081516020918201928201910280838360005b838110156101e45781810151838201526020016101cc565b50505050919091016040525050600180546001600160a01b03808a166001600160a01b0319928316179092556002805489841690831617905560008054928b16929091169190911781559150505b83518160ff1610156103275760036040518060600160405280868460ff168151811061025a57fe5b60200260200101516001600160a01b03168152602001858460ff168151811061027f57fe5b60200260200101516001600160a01b03168152602001848460ff16815181106102a457fe5b60209081029190910181015163ffffffff908116909252835460018082018655600095865294829020845160029092020180546001600160a01b03199081166001600160a01b039384161782559285015190860180546040909601519590931691161763ffffffff60a01b1916600160a01b939092169290920217905501610232565b50505050505050614ffa806200033e6000396000f3fe6080604052600436106100555760003560e01c806339a51be5146100fc578063775c300c1461012d578063ad5c464814610144578063c19d93fb14610159578063e07d14b414610184578063e5fdf8de146101de575b600254600160a01b900460ff161561009e5760405162461bcd60e51b8152600401808060200182810382526024815260200180614f7a6024913960400191505060405180910390fd5b6001546001600160a01b031633146100e75760405162461bcd60e51b8152600401808060200182810382526028815260200180614f9e6028913960400191505060405180910390fd5b6002805460ff60a01b1916600160a01b179055005b34801561010857600080fd5b506101116101f3565b604080516001600160a01b039092168252519081900360200190f35b34801561013957600080fd5b50610142610202565b005b34801561015057600080fd5b50610111610725565b34801561016557600080fd5b5061016e610734565b6040805160ff9092168252519081900360200190f35b34801561019057600080fd5b506101ae600480360360208110156101a757600080fd5b5035610744565b604080516001600160a01b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b3480156101ea57600080fd5b5061011161078a565b6000546001600160a01b031681565b600254600160a01b900460ff1660011461024d5760405162461bcd60e51b8152600401808060200182810382526024815260200180614f7a6024913960400191505060405180910390fd5b60003060405161025c90610799565b6001600160a01b03909116815260405190819003602001906000f080158015610289573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507f8eef7239ce5bc4f9918f5584befdc2ee2113478098db0ca89bdf5f0d6ff32a6f919081900360200190a160005b60035460ff821610156104a9576000826001600160a01b031663c9c6539660038460ff16815481106102fb57fe5b6000918252602090912060029091020154600380546001600160a01b039092169160ff871690811061032957fe5b6000918252602080832060016002909302019190910154604080516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909116602485015251604480850194929391928390030190829087803b15801561038f57600080fd5b505af11580156103a3573d6000803e3d6000fd5b505050506040513d60208110156103b957600080fd5b5051600380549192506001600160a01b03851691639e68ceb891849160ff87169081106103e257fe5b60009182526020822060029190910201600101546040805160e086901b6001600160e01b03191681526001600160a01b03949094166004850152600160a01b90910463ffffffff1660248401525160448084019382900301818387803b15801561044b57600080fd5b505af115801561045f573d6000803e3d6000fd5b5050604080516001600160a01b038516815290517f29548d6a519d97e51db535dddb28bc2c7f262348939f8c389a0fe32591848e7d9350908190036020019150a1506001016102cd565b506001546002546000805460405191936001600160a01b03908116938693908216929091169084906104da906107a6565b6001600160a01b039586168152938516602085015291841660408085019190915290841660608401529216608082015290519081900360a001906000f080158015610529573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507f7c450ceeab8451c8a098a92a1867a12d3a3495dafd319c2aece20b2587a50c3c919081900360200190a1816001600160a01b031663f46901ed826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b1580156105c257600080fd5b505af11580156105d6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b03909116915084906105fa906107b3565b6001600160a01b03928316815291166020820152604080519182900301906000f08015801561062d573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507fc8de8af6dbce59b45166a45b74012db8d28162a620199b081b3453c42dcca7ea919081900360200190a1826001600160a01b031663a2e74af6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b1580156106c657600080fd5b505af11580156106da573d6000803e3d6000fd5b505060028054600160a11b60ff60a01b19909116179055505060405133904780156108fc02916000818181858888f1935050505015801561071f573d6000803e3d6000fd5b50505050565b6002546001600160a01b031681565b600254600160a01b900460ff1681565b6003818154811061075157fe5b6000918252602090912060029091020180546001909101546001600160a01b03918216925090811690600160a01b900463ffffffff1683565b6001546001600160a01b031681565b612f9c806107c183390190565b6111798061375d83390190565b6106a4806148d68339019056fe60806040526001805460ff60a01b1916600960a01b17905534801561002357600080fd5b50604051612f9c380380612f9c8339818101604052602081101561004657600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055612f26806100766000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80635855a25a116100715780635855a25a1461015c5780639e68ceb814610164578063a2e74af614610196578063c9c65396146101bc578063e6a43905146101ea578063f46901ed14610218576100b4565b8063017e7e58146100b9578063094b7415146100dd5780631e3dd18b146100e55780632ff7042a146101025780634e91f81114610120578063574f2ba314610142575b600080fd5b6100c161023e565b604080516001600160a01b039092168252519081900360200190f35b6100c161024d565b6100c1600480360360208110156100fb57600080fd5b503561025c565b61010a610283565b6040805160ff9092168252519081900360200190f35b6101406004803603602081101561013657600080fd5b503560ff16610293565b005b61014a610365565b60408051918252519081900360200190f35b61014a61036b565b6101406004803603604081101561017a57600080fd5b5080356001600160a01b0316906020013563ffffffff166103fe565b610140600480360360208110156101ac57600080fd5b50356001600160a01b03166104c1565b6100c1600480360360408110156101d257600080fd5b506001600160a01b038135811691602001351661053d565b6100c16004803603604081101561020057600080fd5b506001600160a01b038135811691602001351661085f565b6101406004803603602081101561022e57600080fd5b50356001600160a01b0316610885565b6000546001600160a01b031681565b6001546001600160a01b031681565b6003818154811061026957fe5b6000918252602090912001546001600160a01b0316905081565b600154600160a01b900460ff1681565b6001546001600160a01b031633146102ed576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b60008160ff1611610345576040805162461bcd60e51b815260206004820152601c60248201527f445873776170466163746f72793a20464f5242494444454e5f46454500000000604482015290519081900360640190fd5b6001805460ff909216600160a01b0260ff60a01b19909216919091179055565b60035490565b60405161037a60208201610901565b6020820181038252601f19601f820116604052506040516020018082805190602001908083835b602083106103c05780518252601f1990920191602091820191016103a1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b6001546001600160a01b03163314610458576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b6040805163d6d788c360e01b815263ffffffff8316600482015290516001600160a01b0384169163d6d788c391602480830192600092919082900301818387803b1580156104a557600080fd5b505af11580156104b9573d6000803e3d6000fd5b505050505050565b6001546001600160a01b0316331461051b576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b031614156105905760405162461bcd60e51b8152600401808060200182810382526022815260200180612ed06022913960400191505060405180910390fd5b600080836001600160a01b0316856001600160a01b0316106105b35783856105b6565b84845b90925090506001600160a01b038216610616576040805162461bcd60e51b815260206004820152601b60248201527f445873776170466163746f72793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615610690576040805162461bcd60e51b815260206004820152601a60248201527f445873776170466163746f72793a20504149525f455849535453000000000000604482015290519081900360640190fd5b6060604051806020016106a290610901565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f56040805163485cc95560e01b81526001600160a01b038781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561077557600080fd5b505af1158015610789573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b031633146108df576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6125c18061090f8339019056fe6080604052600c805463ffffffff191660191790556001600d5534801561002557600080fd5b50604051469080605261256f8239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561245e806101116000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429445873776170466163746f72793a204944454e544943414c5f414444524553534553a265627a7a72315820c6fa710efa4f71df9b005295f714d02cccf70f7f9c7bc282fca1f7f11487da9064736f6c63430005100032608060405234801561001057600080fd5b50604051611179380380611179833981810160405260a081101561003357600080fd5b508051602082015160408301516060840151608090940151600080546001600160a01b039586166001600160a01b031991821617909155600180549486169482169490941790935560028054928516928416929092179091556003805494841694831694909417909355600480549290931691161790556110c0806100b96000396000f3fe60806040526004361061007b5760003560e01c8063c1f4381d1161004e578063c1f4381d14610155578063c45a015514610190578063f2269521146101a5578063f2fde38b146101ba5761007b565b80635cb9c4ec1461007d5780638da5cb5b146100fa578063ad5c46481461012b578063b988847214610140575b005b34801561008957600080fd5b5061007b600480360360208110156100a057600080fd5b8101906020810181356401000000008111156100bb57600080fd5b8201836020820111156100cd57600080fd5b803590602001918460208302840111640100000000831117156100ef57600080fd5b5090925090506101ed565b34801561010657600080fd5b5061010f610511565b604080516001600160a01b039092168252519081900360200190f35b34801561013757600080fd5b5061010f610520565b34801561014c57600080fd5b5061010f61052f565b34801561016157600080fd5b5061007b6004803603604081101561017857600080fd5b506001600160a01b038135811691602001351661053e565b34801561019c57600080fd5b5061010f6105cb565b3480156101b157600080fd5b5061010f6105da565b3480156101c657600080fd5b5061007b600480360360208110156101dd57600080fd5b50356001600160a01b03166105e9565b60005b8181101561050c57600083838381811061020657fe5b905060200201356001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561024e57600080fd5b505afa158015610262573d6000803e3d6000fd5b505050506040513d602081101561027857600080fd5b50519050600084848481811061028a57fe5b905060200201356001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156102d257600080fd5b505afa1580156102e6573d6000803e3d6000fd5b505050506040513d60208110156102fc57600080fd5b5051905084848481811061030c57fe5b905060200201356001600160a01b03166001600160a01b031663a9059cbb86868681811061033657fe5b905060200201356001600160a01b031687878781811061035257fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561039e57600080fd5b505afa1580156103b2573d6000803e3d6000fd5b505050506040513d60208110156103c857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561041957600080fd5b505af115801561042d573d6000803e3d6000fd5b505050506040513d602081101561044357600080fd5b50600090508086868681811061045557fe5b6040805163226bf2d160e21b8152306004820152815160209390930294909401356001600160a01b0316936389afcb449350602480820193918290030181600087803b1580156104a457600080fd5b505af11580156104b8573d6000803e3d6000fd5b505050506040513d60408110156104ce57600080fd5b508051602090910151909250905081156104ec576104ec848361066a565b80156104fc576104fc838261066a565b5050600190920191506101f09050565b505050565b6000546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b031681565b6000546001600160a01b0316331461059d576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6001546001600160a01b031681565b6004546001600160a01b031681565b6000546001600160a01b03163314610648576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03838116911614156107015760025460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b50506003546106fc92506001600160a01b031690508261074c565b610748565b6002546107219061071c9084906001600160a01b031661083f565b6108fe565b15610730576106fc8183610904565b6004546107489083906001600160a01b031683610cc9565b5050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106107985780518252601f199092019160209182019101610779565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146107fa576040519150601f19603f3d011682016040523d82523d6000602084013e6107ff565b606091505b505090508061050c5760405162461bcd60e51b81526004018080602001828103825260238152602001806110696023913960400191505060405180910390fd5b600080600061084e8585610e33565b600154604080516bffffffffffffffffffffffff19606095861b811660208084019190915294861b81166034830152825160288184030181526048830184528051908601206001600160f81b031960688401529390951b9094166069850152607d8401919091527fd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776609d808501919091528151808503909101815260bd9093019052815191012095945050505050565b3b151590565b60025460009061091e9083906001600160a01b031661083f565b9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561095c57600080fd5b505afa158015610970573d6000803e3d6000fd5b505050506040513d606081101561098657600080fd5b5080516020909101516002546dffffffffffffffffffffffffffff92831694509116915060009081906001600160a01b03908116908716106109c95782846109cc565b83835b915091506000821180156109e05750600081115b610a1b5760405162461bcd60e51b815260040180806020018281038252602981526020018061101a6029913960400191505060405180910390fd5b6000610aa8610a9b876001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5c57600080fd5b505afa158015610a70573d6000803e3d6000fd5b505050506040513d6020811015610a8657600080fd5b50516127109063ffffffff90811690610f1116565b899063ffffffff610f6716565b90506000610abc828463ffffffff610f6716565b90506000610ae283610ad68761271063ffffffff610f6716565b9063ffffffff610fca16565b90506000818381610aef57fe5b049050610afd8a8a8d610cc9565b60025460009081906001600160a01b03908116908d1610610b2057826000610b24565b6000835b915091508a6001600160a01b031663022c0d9f83833060006040519080825280601f01601f191660200182016040528015610b66576020820181803883390190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610bd7578181015183820152602001610bbf565b50505050905090810190601f168015610c045780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610c2657600080fd5b505af1158015610c3a573d6000803e3d6000fd5b505060025460408051632e1a7d4d60e01b81526004810188905290516001600160a01b039092169350632e1a7d4d925060248082019260009290919082900301818387803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b5050600354610cba92506001600160a01b031690508461074c565b50505050505050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310610d465780518252601f199092019160209182019101610d27565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610da8576040519150601f19603f3d011682016040523d82523d6000602084013e610dad565b606091505b5091509150818015610ddb575080511580610ddb5750808060200190516020811015610dd857600080fd5b50515b610e2c576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b600080826001600160a01b0316846001600160a01b03161415610e875760405162461bcd60e51b81526004018080602001828103825260268152602001806110436026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610610ea7578284610eaa565b83835b90925090506001600160a01b038216610f0a576040805162461bcd60e51b815260206004820152601f60248201527f44587377617046656552656365697665723a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b80820382811115610f61576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b92915050565b6000811580610f8257505080820282828281610f7f57fe5b04145b610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe44587377617046656552656365697665723a20494e53554646494349454e545f4c495155494449545944587377617046656552656365697665723a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158204488a5c6d24546776395f2d8e5b107b99bb124fd814a71281fc10579ac69368864736f6c63430005100032608060405234801561001057600080fd5b506040516106a43803806106a48339818101604052604081101561003357600080fd5b508051602090910151600080546001600160a01b039384166001600160a01b0319918216179091556002805493909216921691909117905561062a8061007a6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a2e74af611610066578063a2e74af614610136578063a6dab93f1461015c578063c45a01551461018a578063f2fde38b14610192578063f46901ed146101b857610093565b806317c06b34146100985780634e91f811146100da5780638da5cb5b146100fc5780639e68ceb814610104575b600080fd5b6100be600480360360208110156100ae57600080fd5b50356001600160a01b03166101de565b604080516001600160a01b039092168252519081900360200190f35b6100fa600480360360208110156100f057600080fd5b503560ff166101f9565b005b6100be6102b0565b6100fa6004803603604081101561011a57600080fd5b5080356001600160a01b0316906020013563ffffffff166102bf565b6100fa6004803603602081101561014c57600080fd5b50356001600160a01b03166103a6565b6100fa6004803603604081101561017257600080fd5b506001600160a01b0381358116916020013516610441565b6100be6104bc565b6100fa600480360360208110156101a857600080fd5b50356001600160a01b03166104cb565b6100fa600480360360208110156101ce57600080fd5b50356001600160a01b031661053a565b6001602052600090815260409020546001600160a01b031681565b6000546001600160a01b03163314610246576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051634e91f81160e01b815260ff8416600482015290516001600160a01b0390921691634e91f8119160248082019260009290919082900301818387803b15801561029557600080fd5b505af11580156102a9573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031681565b6000546001600160a01b03163314806102f157506001600160a01b038281166000908152600160205260409020541633145b610330576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600254604080516313cd19d760e31b81526001600160a01b03858116600483015263ffffffff8516602483015291519190921691639e68ceb891604480830192600092919082900301818387803b15801561038a57600080fd5b505af115801561039e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146103f3576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051635173a57b60e11b81526001600160a01b0384811660048301529151919092169163a2e74af691602480830192600092919082900301818387803b15801561029557600080fd5b6000546001600160a01b0316331461048e576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6002546001600160a01b031681565b6000546001600160a01b03163314610518576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610587576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6002546040805163f46901ed60e01b81526001600160a01b0384811660048301529151919092169163f46901ed91602480830192600092919082900301818387803b15801561029557600080fdfe4458737761704665655365747465723a20464f5242494444454e000000000000a265627a7a72315820a0be763e035529abb8cc9d7d753668d36fa96da26d709983f608f42e5b3d615964736f6c634300051000324458737761704465706c6f7965723a2057524f4e475f4445504c4f5945525f53544154454458737761704465706c6f7965723a2043414c4c45525f4e4f545f4645455f544f5f534554544552a265627a7a72315820f21258416ec6a704eb1b3b2327ba2cad2a5062ee9f012b0de5c7632a8796809064736f6c63430005100032", - "bin": "60806040526002805460ff60a01b1916905534801561001d57600080fd5b506040516200533838038062005338833981810160405260c081101561004257600080fd5b81516020830151604080850151606086018051925194969395919493918201928464010000000082111561007557600080fd5b90830190602082018581111561008a57600080fd5b82518660208202830111640100000000821117156100a757600080fd5b82525081516020918201928201910280838360005b838110156100d45781810151838201526020016100bc565b50505050905001604052602001805160405193929190846401000000008211156100fd57600080fd5b90830190602082018581111561011257600080fd5b825186602082028301116401000000008211171561012f57600080fd5b82525081516020918201928201910280838360005b8381101561015c578181015183820152602001610144565b505050509050016040526020018051604051939291908464010000000082111561018557600080fd5b90830190602082018581111561019a57600080fd5b82518660208202830111640100000000821117156101b757600080fd5b82525081516020918201928201910280838360005b838110156101e45781810151838201526020016101cc565b50505050919091016040525050600180546001600160a01b03808a166001600160a01b0319928316179092556002805489841690831617905560008054928b16929091169190911781559150505b83518160ff1610156103275760036040518060600160405280868460ff168151811061025a57fe5b60200260200101516001600160a01b03168152602001858460ff168151811061027f57fe5b60200260200101516001600160a01b03168152602001848460ff16815181106102a457fe5b60209081029190910181015163ffffffff908116909252835460018082018655600095865294829020845160029092020180546001600160a01b03199081166001600160a01b039384161782559285015190860180546040909601519590931691161763ffffffff60a01b1916600160a01b939092169290920217905501610232565b50505050505050614ffa806200033e6000396000f3fe6080604052600436106100555760003560e01c806339a51be5146100fc578063775c300c1461012d578063ad5c464814610144578063c19d93fb14610159578063e07d14b414610184578063e5fdf8de146101de575b600254600160a01b900460ff161561009e5760405162461bcd60e51b8152600401808060200182810382526024815260200180614f7a6024913960400191505060405180910390fd5b6001546001600160a01b031633146100e75760405162461bcd60e51b8152600401808060200182810382526028815260200180614f9e6028913960400191505060405180910390fd5b6002805460ff60a01b1916600160a01b179055005b34801561010857600080fd5b506101116101f3565b604080516001600160a01b039092168252519081900360200190f35b34801561013957600080fd5b50610142610202565b005b34801561015057600080fd5b50610111610725565b34801561016557600080fd5b5061016e610734565b6040805160ff9092168252519081900360200190f35b34801561019057600080fd5b506101ae600480360360208110156101a757600080fd5b5035610744565b604080516001600160a01b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b3480156101ea57600080fd5b5061011161078a565b6000546001600160a01b031681565b600254600160a01b900460ff1660011461024d5760405162461bcd60e51b8152600401808060200182810382526024815260200180614f7a6024913960400191505060405180910390fd5b60003060405161025c90610799565b6001600160a01b03909116815260405190819003602001906000f080158015610289573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507f8eef7239ce5bc4f9918f5584befdc2ee2113478098db0ca89bdf5f0d6ff32a6f919081900360200190a160005b60035460ff821610156104a9576000826001600160a01b031663c9c6539660038460ff16815481106102fb57fe5b6000918252602090912060029091020154600380546001600160a01b039092169160ff871690811061032957fe5b6000918252602080832060016002909302019190910154604080516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909116602485015251604480850194929391928390030190829087803b15801561038f57600080fd5b505af11580156103a3573d6000803e3d6000fd5b505050506040513d60208110156103b957600080fd5b5051600380549192506001600160a01b03851691639e68ceb891849160ff87169081106103e257fe5b60009182526020822060029190910201600101546040805160e086901b6001600160e01b03191681526001600160a01b03949094166004850152600160a01b90910463ffffffff1660248401525160448084019382900301818387803b15801561044b57600080fd5b505af115801561045f573d6000803e3d6000fd5b5050604080516001600160a01b038516815290517f29548d6a519d97e51db535dddb28bc2c7f262348939f8c389a0fe32591848e7d9350908190036020019150a1506001016102cd565b506001546002546000805460405191936001600160a01b03908116938693908216929091169084906104da906107a6565b6001600160a01b039586168152938516602085015291841660408085019190915290841660608401529216608082015290519081900360a001906000f080158015610529573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507f7c450ceeab8451c8a098a92a1867a12d3a3495dafd319c2aece20b2587a50c3c919081900360200190a1816001600160a01b031663f46901ed826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b1580156105c257600080fd5b505af11580156105d6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b03909116915084906105fa906107b3565b6001600160a01b03928316815291166020820152604080519182900301906000f08015801561062d573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507fc8de8af6dbce59b45166a45b74012db8d28162a620199b081b3453c42dcca7ea919081900360200190a1826001600160a01b031663a2e74af6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b1580156106c657600080fd5b505af11580156106da573d6000803e3d6000fd5b505060028054600160a11b60ff60a01b19909116179055505060405133904780156108fc02916000818181858888f1935050505015801561071f573d6000803e3d6000fd5b50505050565b6002546001600160a01b031681565b600254600160a01b900460ff1681565b6003818154811061075157fe5b6000918252602090912060029091020180546001909101546001600160a01b03918216925090811690600160a01b900463ffffffff1683565b6001546001600160a01b031681565b612f9c806107c183390190565b6111798061375d83390190565b6106a4806148d68339019056fe60806040526001805460ff60a01b1916600960a01b17905534801561002357600080fd5b50604051612f9c380380612f9c8339818101604052602081101561004657600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055612f26806100766000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80635855a25a116100715780635855a25a1461015c5780639e68ceb814610164578063a2e74af614610196578063c9c65396146101bc578063e6a43905146101ea578063f46901ed14610218576100b4565b8063017e7e58146100b9578063094b7415146100dd5780631e3dd18b146100e55780632ff7042a146101025780634e91f81114610120578063574f2ba314610142575b600080fd5b6100c161023e565b604080516001600160a01b039092168252519081900360200190f35b6100c161024d565b6100c1600480360360208110156100fb57600080fd5b503561025c565b61010a610283565b6040805160ff9092168252519081900360200190f35b6101406004803603602081101561013657600080fd5b503560ff16610293565b005b61014a610365565b60408051918252519081900360200190f35b61014a61036b565b6101406004803603604081101561017a57600080fd5b5080356001600160a01b0316906020013563ffffffff166103fe565b610140600480360360208110156101ac57600080fd5b50356001600160a01b03166104c1565b6100c1600480360360408110156101d257600080fd5b506001600160a01b038135811691602001351661053d565b6100c16004803603604081101561020057600080fd5b506001600160a01b038135811691602001351661085f565b6101406004803603602081101561022e57600080fd5b50356001600160a01b0316610885565b6000546001600160a01b031681565b6001546001600160a01b031681565b6003818154811061026957fe5b6000918252602090912001546001600160a01b0316905081565b600154600160a01b900460ff1681565b6001546001600160a01b031633146102ed576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b60008160ff1611610345576040805162461bcd60e51b815260206004820152601c60248201527f445873776170466163746f72793a20464f5242494444454e5f46454500000000604482015290519081900360640190fd5b6001805460ff909216600160a01b0260ff60a01b19909216919091179055565b60035490565b60405161037a60208201610901565b6020820181038252601f19601f820116604052506040516020018082805190602001908083835b602083106103c05780518252601f1990920191602091820191016103a1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b6001546001600160a01b03163314610458576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b6040805163d6d788c360e01b815263ffffffff8316600482015290516001600160a01b0384169163d6d788c391602480830192600092919082900301818387803b1580156104a557600080fd5b505af11580156104b9573d6000803e3d6000fd5b505050505050565b6001546001600160a01b0316331461051b576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b031614156105905760405162461bcd60e51b8152600401808060200182810382526022815260200180612ed06022913960400191505060405180910390fd5b600080836001600160a01b0316856001600160a01b0316106105b35783856105b6565b84845b90925090506001600160a01b038216610616576040805162461bcd60e51b815260206004820152601b60248201527f445873776170466163746f72793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615610690576040805162461bcd60e51b815260206004820152601a60248201527f445873776170466163746f72793a20504149525f455849535453000000000000604482015290519081900360640190fd5b6060604051806020016106a290610901565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f56040805163485cc95560e01b81526001600160a01b038781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561077557600080fd5b505af1158015610789573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b031633146108df576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6125c18061090f8339019056fe6080604052600c805463ffffffff191660191790556001600d5534801561002557600080fd5b50604051469080605261256f8239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561245e806101116000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429445873776170466163746f72793a204944454e544943414c5f414444524553534553a265627a7a72315820c6fa710efa4f71df9b005295f714d02cccf70f7f9c7bc282fca1f7f11487da9064736f6c63430005100032608060405234801561001057600080fd5b50604051611179380380611179833981810160405260a081101561003357600080fd5b508051602082015160408301516060840151608090940151600080546001600160a01b039586166001600160a01b031991821617909155600180549486169482169490941790935560028054928516928416929092179091556003805494841694831694909417909355600480549290931691161790556110c0806100b96000396000f3fe60806040526004361061007b5760003560e01c8063c1f4381d1161004e578063c1f4381d14610155578063c45a015514610190578063f2269521146101a5578063f2fde38b146101ba5761007b565b80635cb9c4ec1461007d5780638da5cb5b146100fa578063ad5c46481461012b578063b988847214610140575b005b34801561008957600080fd5b5061007b600480360360208110156100a057600080fd5b8101906020810181356401000000008111156100bb57600080fd5b8201836020820111156100cd57600080fd5b803590602001918460208302840111640100000000831117156100ef57600080fd5b5090925090506101ed565b34801561010657600080fd5b5061010f610511565b604080516001600160a01b039092168252519081900360200190f35b34801561013757600080fd5b5061010f610520565b34801561014c57600080fd5b5061010f61052f565b34801561016157600080fd5b5061007b6004803603604081101561017857600080fd5b506001600160a01b038135811691602001351661053e565b34801561019c57600080fd5b5061010f6105cb565b3480156101b157600080fd5b5061010f6105da565b3480156101c657600080fd5b5061007b600480360360208110156101dd57600080fd5b50356001600160a01b03166105e9565b60005b8181101561050c57600083838381811061020657fe5b905060200201356001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561024e57600080fd5b505afa158015610262573d6000803e3d6000fd5b505050506040513d602081101561027857600080fd5b50519050600084848481811061028a57fe5b905060200201356001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156102d257600080fd5b505afa1580156102e6573d6000803e3d6000fd5b505050506040513d60208110156102fc57600080fd5b5051905084848481811061030c57fe5b905060200201356001600160a01b03166001600160a01b031663a9059cbb86868681811061033657fe5b905060200201356001600160a01b031687878781811061035257fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561039e57600080fd5b505afa1580156103b2573d6000803e3d6000fd5b505050506040513d60208110156103c857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561041957600080fd5b505af115801561042d573d6000803e3d6000fd5b505050506040513d602081101561044357600080fd5b50600090508086868681811061045557fe5b6040805163226bf2d160e21b8152306004820152815160209390930294909401356001600160a01b0316936389afcb449350602480820193918290030181600087803b1580156104a457600080fd5b505af11580156104b8573d6000803e3d6000fd5b505050506040513d60408110156104ce57600080fd5b508051602090910151909250905081156104ec576104ec848361066a565b80156104fc576104fc838261066a565b5050600190920191506101f09050565b505050565b6000546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b031681565b6000546001600160a01b0316331461059d576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6001546001600160a01b031681565b6004546001600160a01b031681565b6000546001600160a01b03163314610648576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03838116911614156107015760025460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b50506003546106fc92506001600160a01b031690508261074c565b610748565b6002546107219061071c9084906001600160a01b031661083f565b6108fe565b15610730576106fc8183610904565b6004546107489083906001600160a01b031683610cc9565b5050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106107985780518252601f199092019160209182019101610779565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146107fa576040519150601f19603f3d011682016040523d82523d6000602084013e6107ff565b606091505b505090508061050c5760405162461bcd60e51b81526004018080602001828103825260238152602001806110696023913960400191505060405180910390fd5b600080600061084e8585610e33565b600154604080516bffffffffffffffffffffffff19606095861b811660208084019190915294861b81166034830152825160288184030181526048830184528051908601206001600160f81b031960688401529390951b9094166069850152607d8401919091527fd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776609d808501919091528151808503909101815260bd9093019052815191012095945050505050565b3b151590565b60025460009061091e9083906001600160a01b031661083f565b9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561095c57600080fd5b505afa158015610970573d6000803e3d6000fd5b505050506040513d606081101561098657600080fd5b5080516020909101516002546dffffffffffffffffffffffffffff92831694509116915060009081906001600160a01b03908116908716106109c95782846109cc565b83835b915091506000821180156109e05750600081115b610a1b5760405162461bcd60e51b815260040180806020018281038252602981526020018061101a6029913960400191505060405180910390fd5b6000610aa8610a9b876001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5c57600080fd5b505afa158015610a70573d6000803e3d6000fd5b505050506040513d6020811015610a8657600080fd5b50516127109063ffffffff90811690610f1116565b899063ffffffff610f6716565b90506000610abc828463ffffffff610f6716565b90506000610ae283610ad68761271063ffffffff610f6716565b9063ffffffff610fca16565b90506000818381610aef57fe5b049050610afd8a8a8d610cc9565b60025460009081906001600160a01b03908116908d1610610b2057826000610b24565b6000835b915091508a6001600160a01b031663022c0d9f83833060006040519080825280601f01601f191660200182016040528015610b66576020820181803883390190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610bd7578181015183820152602001610bbf565b50505050905090810190601f168015610c045780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610c2657600080fd5b505af1158015610c3a573d6000803e3d6000fd5b505060025460408051632e1a7d4d60e01b81526004810188905290516001600160a01b039092169350632e1a7d4d925060248082019260009290919082900301818387803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b5050600354610cba92506001600160a01b031690508461074c565b50505050505050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310610d465780518252601f199092019160209182019101610d27565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610da8576040519150601f19603f3d011682016040523d82523d6000602084013e610dad565b606091505b5091509150818015610ddb575080511580610ddb5750808060200190516020811015610dd857600080fd5b50515b610e2c576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b600080826001600160a01b0316846001600160a01b03161415610e875760405162461bcd60e51b81526004018080602001828103825260268152602001806110436026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610610ea7578284610eaa565b83835b90925090506001600160a01b038216610f0a576040805162461bcd60e51b815260206004820152601f60248201527f44587377617046656552656365697665723a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b80820382811115610f61576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b92915050565b6000811580610f8257505080820282828281610f7f57fe5b04145b610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe44587377617046656552656365697665723a20494e53554646494349454e545f4c495155494449545944587377617046656552656365697665723a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158204488a5c6d24546776395f2d8e5b107b99bb124fd814a71281fc10579ac69368864736f6c63430005100032608060405234801561001057600080fd5b506040516106a43803806106a48339818101604052604081101561003357600080fd5b508051602090910151600080546001600160a01b039384166001600160a01b0319918216179091556002805493909216921691909117905561062a8061007a6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a2e74af611610066578063a2e74af614610136578063a6dab93f1461015c578063c45a01551461018a578063f2fde38b14610192578063f46901ed146101b857610093565b806317c06b34146100985780634e91f811146100da5780638da5cb5b146100fc5780639e68ceb814610104575b600080fd5b6100be600480360360208110156100ae57600080fd5b50356001600160a01b03166101de565b604080516001600160a01b039092168252519081900360200190f35b6100fa600480360360208110156100f057600080fd5b503560ff166101f9565b005b6100be6102b0565b6100fa6004803603604081101561011a57600080fd5b5080356001600160a01b0316906020013563ffffffff166102bf565b6100fa6004803603602081101561014c57600080fd5b50356001600160a01b03166103a6565b6100fa6004803603604081101561017257600080fd5b506001600160a01b0381358116916020013516610441565b6100be6104bc565b6100fa600480360360208110156101a857600080fd5b50356001600160a01b03166104cb565b6100fa600480360360208110156101ce57600080fd5b50356001600160a01b031661053a565b6001602052600090815260409020546001600160a01b031681565b6000546001600160a01b03163314610246576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051634e91f81160e01b815260ff8416600482015290516001600160a01b0390921691634e91f8119160248082019260009290919082900301818387803b15801561029557600080fd5b505af11580156102a9573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031681565b6000546001600160a01b03163314806102f157506001600160a01b038281166000908152600160205260409020541633145b610330576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600254604080516313cd19d760e31b81526001600160a01b03858116600483015263ffffffff8516602483015291519190921691639e68ceb891604480830192600092919082900301818387803b15801561038a57600080fd5b505af115801561039e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146103f3576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051635173a57b60e11b81526001600160a01b0384811660048301529151919092169163a2e74af691602480830192600092919082900301818387803b15801561029557600080fd5b6000546001600160a01b0316331461048e576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6002546001600160a01b031681565b6000546001600160a01b03163314610518576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610587576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6002546040805163f46901ed60e01b81526001600160a01b0384811660048301529151919092169163f46901ed91602480830192600092919082900301818387803b15801561029557600080fdfe4458737761704665655365747465723a20464f5242494444454e000000000000a265627a7a72315820a0be763e035529abb8cc9d7d753668d36fa96da26d709983f608f42e5b3d615964736f6c634300051000324458737761704465706c6f7965723a2057524f4e475f4445504c4f5945525f53544154454458737761704465706c6f7965723a2043414c4c45525f4e4f545f4645455f544f5f534554544552a265627a7a72315820f21258416ec6a704eb1b3b2327ba2cad2a5062ee9f012b0de5c7632a8796809064736f6c63430005100032", - "bin-runtime": "6080604052600436106100555760003560e01c806339a51be5146100fc578063775c300c1461012d578063ad5c464814610144578063c19d93fb14610159578063e07d14b414610184578063e5fdf8de146101de575b600254600160a01b900460ff161561009e5760405162461bcd60e51b8152600401808060200182810382526024815260200180614f7a6024913960400191505060405180910390fd5b6001546001600160a01b031633146100e75760405162461bcd60e51b8152600401808060200182810382526028815260200180614f9e6028913960400191505060405180910390fd5b6002805460ff60a01b1916600160a01b179055005b34801561010857600080fd5b506101116101f3565b604080516001600160a01b039092168252519081900360200190f35b34801561013957600080fd5b50610142610202565b005b34801561015057600080fd5b50610111610725565b34801561016557600080fd5b5061016e610734565b6040805160ff9092168252519081900360200190f35b34801561019057600080fd5b506101ae600480360360208110156101a757600080fd5b5035610744565b604080516001600160a01b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b3480156101ea57600080fd5b5061011161078a565b6000546001600160a01b031681565b600254600160a01b900460ff1660011461024d5760405162461bcd60e51b8152600401808060200182810382526024815260200180614f7a6024913960400191505060405180910390fd5b60003060405161025c90610799565b6001600160a01b03909116815260405190819003602001906000f080158015610289573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507f8eef7239ce5bc4f9918f5584befdc2ee2113478098db0ca89bdf5f0d6ff32a6f919081900360200190a160005b60035460ff821610156104a9576000826001600160a01b031663c9c6539660038460ff16815481106102fb57fe5b6000918252602090912060029091020154600380546001600160a01b039092169160ff871690811061032957fe5b6000918252602080832060016002909302019190910154604080516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909116602485015251604480850194929391928390030190829087803b15801561038f57600080fd5b505af11580156103a3573d6000803e3d6000fd5b505050506040513d60208110156103b957600080fd5b5051600380549192506001600160a01b03851691639e68ceb891849160ff87169081106103e257fe5b60009182526020822060029190910201600101546040805160e086901b6001600160e01b03191681526001600160a01b03949094166004850152600160a01b90910463ffffffff1660248401525160448084019382900301818387803b15801561044b57600080fd5b505af115801561045f573d6000803e3d6000fd5b5050604080516001600160a01b038516815290517f29548d6a519d97e51db535dddb28bc2c7f262348939f8c389a0fe32591848e7d9350908190036020019150a1506001016102cd565b506001546002546000805460405191936001600160a01b03908116938693908216929091169084906104da906107a6565b6001600160a01b039586168152938516602085015291841660408085019190915290841660608401529216608082015290519081900360a001906000f080158015610529573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507f7c450ceeab8451c8a098a92a1867a12d3a3495dafd319c2aece20b2587a50c3c919081900360200190a1816001600160a01b031663f46901ed826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b1580156105c257600080fd5b505af11580156105d6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b03909116915084906105fa906107b3565b6001600160a01b03928316815291166020820152604080519182900301906000f08015801561062d573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507fc8de8af6dbce59b45166a45b74012db8d28162a620199b081b3453c42dcca7ea919081900360200190a1826001600160a01b031663a2e74af6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b1580156106c657600080fd5b505af11580156106da573d6000803e3d6000fd5b505060028054600160a11b60ff60a01b19909116179055505060405133904780156108fc02916000818181858888f1935050505015801561071f573d6000803e3d6000fd5b50505050565b6002546001600160a01b031681565b600254600160a01b900460ff1681565b6003818154811061075157fe5b6000918252602090912060029091020180546001909101546001600160a01b03918216925090811690600160a01b900463ffffffff1683565b6001546001600160a01b031681565b612f9c806107c183390190565b6111798061375d83390190565b6106a4806148d68339019056fe60806040526001805460ff60a01b1916600960a01b17905534801561002357600080fd5b50604051612f9c380380612f9c8339818101604052602081101561004657600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055612f26806100766000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80635855a25a116100715780635855a25a1461015c5780639e68ceb814610164578063a2e74af614610196578063c9c65396146101bc578063e6a43905146101ea578063f46901ed14610218576100b4565b8063017e7e58146100b9578063094b7415146100dd5780631e3dd18b146100e55780632ff7042a146101025780634e91f81114610120578063574f2ba314610142575b600080fd5b6100c161023e565b604080516001600160a01b039092168252519081900360200190f35b6100c161024d565b6100c1600480360360208110156100fb57600080fd5b503561025c565b61010a610283565b6040805160ff9092168252519081900360200190f35b6101406004803603602081101561013657600080fd5b503560ff16610293565b005b61014a610365565b60408051918252519081900360200190f35b61014a61036b565b6101406004803603604081101561017a57600080fd5b5080356001600160a01b0316906020013563ffffffff166103fe565b610140600480360360208110156101ac57600080fd5b50356001600160a01b03166104c1565b6100c1600480360360408110156101d257600080fd5b506001600160a01b038135811691602001351661053d565b6100c16004803603604081101561020057600080fd5b506001600160a01b038135811691602001351661085f565b6101406004803603602081101561022e57600080fd5b50356001600160a01b0316610885565b6000546001600160a01b031681565b6001546001600160a01b031681565b6003818154811061026957fe5b6000918252602090912001546001600160a01b0316905081565b600154600160a01b900460ff1681565b6001546001600160a01b031633146102ed576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b60008160ff1611610345576040805162461bcd60e51b815260206004820152601c60248201527f445873776170466163746f72793a20464f5242494444454e5f46454500000000604482015290519081900360640190fd5b6001805460ff909216600160a01b0260ff60a01b19909216919091179055565b60035490565b60405161037a60208201610901565b6020820181038252601f19601f820116604052506040516020018082805190602001908083835b602083106103c05780518252601f1990920191602091820191016103a1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b6001546001600160a01b03163314610458576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b6040805163d6d788c360e01b815263ffffffff8316600482015290516001600160a01b0384169163d6d788c391602480830192600092919082900301818387803b1580156104a557600080fd5b505af11580156104b9573d6000803e3d6000fd5b505050505050565b6001546001600160a01b0316331461051b576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b031614156105905760405162461bcd60e51b8152600401808060200182810382526022815260200180612ed06022913960400191505060405180910390fd5b600080836001600160a01b0316856001600160a01b0316106105b35783856105b6565b84845b90925090506001600160a01b038216610616576040805162461bcd60e51b815260206004820152601b60248201527f445873776170466163746f72793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615610690576040805162461bcd60e51b815260206004820152601a60248201527f445873776170466163746f72793a20504149525f455849535453000000000000604482015290519081900360640190fd5b6060604051806020016106a290610901565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f56040805163485cc95560e01b81526001600160a01b038781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561077557600080fd5b505af1158015610789573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b031633146108df576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6125c18061090f8339019056fe6080604052600c805463ffffffff191660191790556001600d5534801561002557600080fd5b50604051469080605261256f8239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561245e806101116000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429445873776170466163746f72793a204944454e544943414c5f414444524553534553a265627a7a72315820c6fa710efa4f71df9b005295f714d02cccf70f7f9c7bc282fca1f7f11487da9064736f6c63430005100032608060405234801561001057600080fd5b50604051611179380380611179833981810160405260a081101561003357600080fd5b508051602082015160408301516060840151608090940151600080546001600160a01b039586166001600160a01b031991821617909155600180549486169482169490941790935560028054928516928416929092179091556003805494841694831694909417909355600480549290931691161790556110c0806100b96000396000f3fe60806040526004361061007b5760003560e01c8063c1f4381d1161004e578063c1f4381d14610155578063c45a015514610190578063f2269521146101a5578063f2fde38b146101ba5761007b565b80635cb9c4ec1461007d5780638da5cb5b146100fa578063ad5c46481461012b578063b988847214610140575b005b34801561008957600080fd5b5061007b600480360360208110156100a057600080fd5b8101906020810181356401000000008111156100bb57600080fd5b8201836020820111156100cd57600080fd5b803590602001918460208302840111640100000000831117156100ef57600080fd5b5090925090506101ed565b34801561010657600080fd5b5061010f610511565b604080516001600160a01b039092168252519081900360200190f35b34801561013757600080fd5b5061010f610520565b34801561014c57600080fd5b5061010f61052f565b34801561016157600080fd5b5061007b6004803603604081101561017857600080fd5b506001600160a01b038135811691602001351661053e565b34801561019c57600080fd5b5061010f6105cb565b3480156101b157600080fd5b5061010f6105da565b3480156101c657600080fd5b5061007b600480360360208110156101dd57600080fd5b50356001600160a01b03166105e9565b60005b8181101561050c57600083838381811061020657fe5b905060200201356001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561024e57600080fd5b505afa158015610262573d6000803e3d6000fd5b505050506040513d602081101561027857600080fd5b50519050600084848481811061028a57fe5b905060200201356001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156102d257600080fd5b505afa1580156102e6573d6000803e3d6000fd5b505050506040513d60208110156102fc57600080fd5b5051905084848481811061030c57fe5b905060200201356001600160a01b03166001600160a01b031663a9059cbb86868681811061033657fe5b905060200201356001600160a01b031687878781811061035257fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561039e57600080fd5b505afa1580156103b2573d6000803e3d6000fd5b505050506040513d60208110156103c857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561041957600080fd5b505af115801561042d573d6000803e3d6000fd5b505050506040513d602081101561044357600080fd5b50600090508086868681811061045557fe5b6040805163226bf2d160e21b8152306004820152815160209390930294909401356001600160a01b0316936389afcb449350602480820193918290030181600087803b1580156104a457600080fd5b505af11580156104b8573d6000803e3d6000fd5b505050506040513d60408110156104ce57600080fd5b508051602090910151909250905081156104ec576104ec848361066a565b80156104fc576104fc838261066a565b5050600190920191506101f09050565b505050565b6000546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b031681565b6000546001600160a01b0316331461059d576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6001546001600160a01b031681565b6004546001600160a01b031681565b6000546001600160a01b03163314610648576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03838116911614156107015760025460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b50506003546106fc92506001600160a01b031690508261074c565b610748565b6002546107219061071c9084906001600160a01b031661083f565b6108fe565b15610730576106fc8183610904565b6004546107489083906001600160a01b031683610cc9565b5050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106107985780518252601f199092019160209182019101610779565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146107fa576040519150601f19603f3d011682016040523d82523d6000602084013e6107ff565b606091505b505090508061050c5760405162461bcd60e51b81526004018080602001828103825260238152602001806110696023913960400191505060405180910390fd5b600080600061084e8585610e33565b600154604080516bffffffffffffffffffffffff19606095861b811660208084019190915294861b81166034830152825160288184030181526048830184528051908601206001600160f81b031960688401529390951b9094166069850152607d8401919091527fd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776609d808501919091528151808503909101815260bd9093019052815191012095945050505050565b3b151590565b60025460009061091e9083906001600160a01b031661083f565b9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561095c57600080fd5b505afa158015610970573d6000803e3d6000fd5b505050506040513d606081101561098657600080fd5b5080516020909101516002546dffffffffffffffffffffffffffff92831694509116915060009081906001600160a01b03908116908716106109c95782846109cc565b83835b915091506000821180156109e05750600081115b610a1b5760405162461bcd60e51b815260040180806020018281038252602981526020018061101a6029913960400191505060405180910390fd5b6000610aa8610a9b876001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5c57600080fd5b505afa158015610a70573d6000803e3d6000fd5b505050506040513d6020811015610a8657600080fd5b50516127109063ffffffff90811690610f1116565b899063ffffffff610f6716565b90506000610abc828463ffffffff610f6716565b90506000610ae283610ad68761271063ffffffff610f6716565b9063ffffffff610fca16565b90506000818381610aef57fe5b049050610afd8a8a8d610cc9565b60025460009081906001600160a01b03908116908d1610610b2057826000610b24565b6000835b915091508a6001600160a01b031663022c0d9f83833060006040519080825280601f01601f191660200182016040528015610b66576020820181803883390190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610bd7578181015183820152602001610bbf565b50505050905090810190601f168015610c045780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610c2657600080fd5b505af1158015610c3a573d6000803e3d6000fd5b505060025460408051632e1a7d4d60e01b81526004810188905290516001600160a01b039092169350632e1a7d4d925060248082019260009290919082900301818387803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b5050600354610cba92506001600160a01b031690508461074c565b50505050505050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310610d465780518252601f199092019160209182019101610d27565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610da8576040519150601f19603f3d011682016040523d82523d6000602084013e610dad565b606091505b5091509150818015610ddb575080511580610ddb5750808060200190516020811015610dd857600080fd5b50515b610e2c576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b600080826001600160a01b0316846001600160a01b03161415610e875760405162461bcd60e51b81526004018080602001828103825260268152602001806110436026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610610ea7578284610eaa565b83835b90925090506001600160a01b038216610f0a576040805162461bcd60e51b815260206004820152601f60248201527f44587377617046656552656365697665723a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b80820382811115610f61576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b92915050565b6000811580610f8257505080820282828281610f7f57fe5b04145b610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe44587377617046656552656365697665723a20494e53554646494349454e545f4c495155494449545944587377617046656552656365697665723a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158204488a5c6d24546776395f2d8e5b107b99bb124fd814a71281fc10579ac69368864736f6c63430005100032608060405234801561001057600080fd5b506040516106a43803806106a48339818101604052604081101561003357600080fd5b508051602090910151600080546001600160a01b039384166001600160a01b0319918216179091556002805493909216921691909117905561062a8061007a6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a2e74af611610066578063a2e74af614610136578063a6dab93f1461015c578063c45a01551461018a578063f2fde38b14610192578063f46901ed146101b857610093565b806317c06b34146100985780634e91f811146100da5780638da5cb5b146100fc5780639e68ceb814610104575b600080fd5b6100be600480360360208110156100ae57600080fd5b50356001600160a01b03166101de565b604080516001600160a01b039092168252519081900360200190f35b6100fa600480360360208110156100f057600080fd5b503560ff166101f9565b005b6100be6102b0565b6100fa6004803603604081101561011a57600080fd5b5080356001600160a01b0316906020013563ffffffff166102bf565b6100fa6004803603602081101561014c57600080fd5b50356001600160a01b03166103a6565b6100fa6004803603604081101561017257600080fd5b506001600160a01b0381358116916020013516610441565b6100be6104bc565b6100fa600480360360208110156101a857600080fd5b50356001600160a01b03166104cb565b6100fa600480360360208110156101ce57600080fd5b50356001600160a01b031661053a565b6001602052600090815260409020546001600160a01b031681565b6000546001600160a01b03163314610246576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051634e91f81160e01b815260ff8416600482015290516001600160a01b0390921691634e91f8119160248082019260009290919082900301818387803b15801561029557600080fd5b505af11580156102a9573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031681565b6000546001600160a01b03163314806102f157506001600160a01b038281166000908152600160205260409020541633145b610330576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600254604080516313cd19d760e31b81526001600160a01b03858116600483015263ffffffff8516602483015291519190921691639e68ceb891604480830192600092919082900301818387803b15801561038a57600080fd5b505af115801561039e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146103f3576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051635173a57b60e11b81526001600160a01b0384811660048301529151919092169163a2e74af691602480830192600092919082900301818387803b15801561029557600080fd5b6000546001600160a01b0316331461048e576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6002546001600160a01b031681565b6000546001600160a01b03163314610518576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610587576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6002546040805163f46901ed60e01b81526001600160a01b0384811660048301529151919092169163f46901ed91602480830192600092919082900301818387803b15801561029557600080fdfe4458737761704665655365747465723a20464f5242494444454e000000000000a265627a7a72315820a0be763e035529abb8cc9d7d753668d36fa96da26d709983f608f42e5b3d615964736f6c634300051000324458737761704465706c6f7965723a2057524f4e475f4445504c4f5945525f53544154454458737761704465706c6f7965723a2043414c4c45525f4e4f545f4645455f544f5f534554544552a265627a7a72315820f21258416ec6a704eb1b3b2327ba2cad2a5062ee9f012b0de5c7632a8796809064736f6c63430005100032", - "srcmap": "163:2781:0:-;;;311:22;;;-1:-1:-1;;;;311:22:0;;;780:606;5:2:-1;;;;30:1;27;20:12;5:2;780:606:0;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;780:606:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;780:606:0;;421:4:-1;412:14;;;;780:606:0;;;;;412:14:-1;780:606:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;780:606:0;;;;;;;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;780:606:0;;421:4:-1;412:14;;;;780:606:0;;;;;412:14:-1;780:606:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;780:606:0;;;;;;;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;780:606:0;;421:4:-1;412:14;;;;780:606:0;;;;;412:14:-1;780:606:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;;;780:606:0;;;;;;-1:-1:-1;;1024:11:0;:26;;-1:-1:-1;;;;;1024:26:0;;;-1:-1:-1;;;;;;1024:26:0;;;;;;;1060:4;:12;;;;;;;;;;;1024:11;1082:42;;;;;;;;;;;;;;;1024:11;-1:-1:-1;;1134:246:0;1155:7;:14;1151:1;:18;;;1134:246;;;1191:17;1231:124;;;;;;;;1262:7;1270:1;1262:10;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1231:124:0;;;;;1294:7;1302:1;1294:10;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1231:124:0;;;;;1326:8;1335:1;1326:11;;;;;;;;;;;;;;;;;;;;;1231:124;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;1191:178:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1191:178:0;;;-1:-1:-1;;;;;1191:178:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;1191:178:0;-1:-1:-1;;;1191:178:0;;;;;;;;;;;1171:4;1134:246;;;;780:606;;;;;;163:2781;;;;;;", - "srcmap-runtime": "163:2781:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1535:5;;-1:-1:-1;;;1535:5:0;;;;:10;1527:59;;;;-1:-1:-1;;;1527:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1618:11;;-1:-1:-1;;;;;1618:11:0;1604:10;:25;1596:78;;;;-1:-1:-1;;;1596:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1684:5;:9;;-1:-1:-1;;;;1684:9:0;-1:-1:-1;;;1684:9:0;;;163:2781;198:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;198:42:0;;;:::i;:::-;;;;-1:-1:-1;;;;;198:42:0;;;;;;;;;;;;;;1768:1166;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1768:1166:0;;;:::i;:::-;;286:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;286:19:0;;;:::i;311:22::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;311:22:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;446:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;446:36:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;446:36:0;;:::i;:::-;;;;-1:-1:-1;;;;;446:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;246:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;246:34:0;;;:::i;198:42::-;;;-1:-1:-1;;;;;198:42:0;;:::o;1768:1166::-;1811:5;;-1:-1:-1;;;1811:5:0;;;;1820:1;1811:10;1803:59;;;;-1:-1:-1;;;1803:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1872:27;1928:4;1902:32;;;;;:::i;:::-;-1:-1:-1;;;;;1902:32:0;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;1949:43:0;;;-1:-1:-1;;;;;1949:43:0;;;;;;1872:62;;-1:-1:-1;1949:43:0;;;;;;;;;;2006:7;2002:334;2023:17;:24;2019:28;;;;2002:334;;;2069:15;2087:13;-1:-1:-1;;;;;2087:24:0;;2112:17;2130:1;2112:20;;;;;;;;;;;;;;;;;;;;;;;:27;2141:17;:20;;-1:-1:-1;;;;;2112:27:0;;;;2141:20;;;;;;;;;;;;;;;;;;:27;:20;;;;;:27;;;;;2087:82;;;-1:-1:-1;;;;;;2087:82:0;;;;;;;-1:-1:-1;;;;;2087:82:0;;;;;;;2141:27;;;;2087:82;;;;;;;;;;2141:20;;2087:82;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;2087:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2087:82:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2087:82:0;2217:17;:20;;2087:82;;-1:-1:-1;;;;;;2183:24:0;;;;;2087:82;;2217:20;;;;;;;;;;;;;;;;;;;;;;;:28;;;2183:63;;;;;;;-1:-1:-1;;;;;;2183:63:0;;;-1:-1:-1;;;;;2183:63:0;;;;;;;;-1:-1:-1;;;2217:28:0;;;;;2183:63;;;;;;;;;;;;;;;2217:20;2183:63;;;;5:2:-1;;;;30:1;27;20:12;5:2;2183:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;2265:60:0;;;-1:-1:-1;;;;;2265:60:0;;;;;;;;-1:-1:-1;2265:60:0;;;;;;;-1:-1:-1;2265:60:0;-1:-1:-1;2049:4:0;;2002:334;;;-1:-1:-1;2418:11:0;;2455:4;;2345:35;2461:19;;2383:120;;2345:35;;-1:-1:-1;;;;;2418:11:0;;;;2439:13;;2455:4;;;;2461:19;;;;2418:11;;2383:120;;;:::i;:::-;-1:-1:-1;;;;;2383:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2383:120:0;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;2518:47:0;;;-1:-1:-1;;;;;2518:47:0;;;;;;2345:158;;-1:-1:-1;2518:47:0;;;;;;;;;;2575:13;-1:-1:-1;;;;;2575:22:0;;2606:17;2575:50;;;;;;;;;;;;;-1:-1:-1;;;;;2575:50:0;-1:-1:-1;;;;;2575:50:0;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2575:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;2698:11:0;;2678:56;;2644:31;;-1:-1:-1;;;;;;2698:11:0;;;;-1:-1:-1;2719:13:0;;2678:56;;;:::i;:::-;-1:-1:-1;;;;;2678:56:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2678:56:0;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;2749:43:0;;;-1:-1:-1;;;;;2749:43:0;;;;;;2644:90;;-1:-1:-1;2749:43:0;;;;;;;;;;2802:13;-1:-1:-1;;;;;2802:28:0;;2839:15;2802:54;;;;;;;;;;;;;-1:-1:-1;;;;;2802:54:0;-1:-1:-1;;;;;2802:54:0;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2802:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;2874:1:0;2866:9;;-1:-1:-1;;;;;;;2866:9:0;;;;;;-1:-1:-1;;2885:42:0;;:10;;2905:21;2885:42;;;;;-1:-1:-1;2885:42:0;-1:-1:-1;2885:42:0;2905:21;2885:10;:42;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2885:42:0;1768:1166;;;:::o;286:19::-;;;-1:-1:-1;;;;;286:19:0;;:::o;311:22::-;;;-1:-1:-1;;;311:22:0;;;;;:::o;446:36::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;446:36:0;;;;-1:-1:-1;446:36:0;;;;-1:-1:-1;;;446:36:0;;;;;:::o;246:34::-;;;-1:-1:-1;;;;;246:34:0;;:::o;163:2781::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o" - }, - "contracts/DXswapERC20.sol:DXswapERC20": { - "abi": [ - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b5060405146908060526109638239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550610879806100ea6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633644e5151161008c57806395d89b411161006657806395d89b411461025b578063a9059cbb14610263578063d505accf1461028f578063dd62ed3e146102e2576100cf565b80633644e5151461020757806370a082311461020f5780637ecebe0014610235576100cf565b806306fdde03146100d4578063095ea7b31461015157806318160ddd1461019157806323b872dd146101ab57806330adf81f146101e1578063313ce567146101e9575b600080fd5b6100dc610310565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101165781810151838201526020016100fe565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561016757600080fd5b506001600160a01b038135169060200135610332565b604080519115158252519081900360200190f35b610199610349565b60408051918252519081900360200190f35b61017d600480360360608110156101c157600080fd5b506001600160a01b0381358116916020810135909116906040013561034f565b6101996103e9565b6101f161040d565b6040805160ff9092168252519081900360200190f35b610199610412565b6101996004803603602081101561022557600080fd5b50356001600160a01b0316610418565b6101996004803603602081101561024b57600080fd5b50356001600160a01b031661042a565b6100dc61043c565b61017d6004803603604081101561027957600080fd5b506001600160a01b03813516906020013561045b565b6102e0600480360360e08110156102a557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610468565b005b610199600480360360408110156102f857600080fd5b506001600160a01b038135811691602001351661066c565b6040518060400160405280600681526020016504458737761760d41b81525081565b600061033f338484610689565b5060015b92915050565b60005481565b6001600160a01b0383166000908152600260209081526040808320338452909152812054600019146103d4576001600160a01b03841660009081526002602090815260408083203384529091529020546103af908363ffffffff6106eb16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6103df84848461073b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60016020526000908152604090205481565b60046020526000908152604090205481565b6040518060400160405280600381526020016244585360e81b81525081565b600061033f33848461073b565b428410156104b4576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156105cf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106055750886001600160a01b0316816001600160a01b0316145b610656576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b610661898989610689565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115610343576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054610764908263ffffffff6106eb16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610799908263ffffffff6107f516565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b80820182811015610343576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfea265627a7a72315820992b12356c77aa11ac170c4fe73bc289a989e0c675b6c3300eea2888020a390f64736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD CHAINID SWAP1 DUP1 PUSH1 0x52 PUSH2 0x963 DUP3 CODECOPY PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB PUSH1 0x52 ADD DUP3 KECCAK256 DUP3 DUP3 ADD DUP3 MSTORE PUSH1 0x6 DUP4 MSTORE PUSH6 0x44587377617 PUSH1 0xD4 SHL PUSH1 0x20 SWAP4 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD DUP4 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL SWAP1 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x3649D708A7ABF9E212D0A587955EAD4123223014B2E46201DFB587457CBD4591 DUP2 DUP4 ADD MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP1 MSTORE DUP3 MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x3 SSTORE POP PUSH2 0x879 DUP1 PUSH2 0xEA PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3644E515 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0x95D89B41 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x263 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x28F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2E2 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x3644E515 EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x20F JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x235 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x191 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1AB JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x1E1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1E9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDC PUSH2 0x310 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x116 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xFE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x143 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x332 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x199 PUSH2 0x349 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x34F JUMP JUMPDEST PUSH2 0x199 PUSH2 0x3E9 JUMP JUMPDEST PUSH2 0x1F1 PUSH2 0x40D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x199 PUSH2 0x412 JUMP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x225 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x418 JUMP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x24B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x42A JUMP JUMPDEST PUSH2 0xDC PUSH2 0x43C JUMP JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x45B JUMP JUMPDEST PUSH2 0x2E0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x2A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x468 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x66C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x44587377617 PUSH1 0xD4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F CALLER DUP5 DUP5 PUSH2 0x689 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x3D4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x3AF SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x6EB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE JUMPDEST PUSH2 0x3DF DUP5 DUP5 DUP5 PUSH2 0x73B JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x445853 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F CALLER DUP5 DUP5 PUSH2 0x73B JUMP JUMPDEST TIMESTAMP DUP5 LT ISZERO PUSH2 0x4B4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x11161CDDD85C115490CC8C0E8811561412549151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP12 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP6 ADD DUP3 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x102 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH2 0x122 DUP1 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP7 ADD DUP7 MSTORE PUSH2 0x142 DUP5 ADD DUP1 DUP3 MSTORE DUP7 MLOAD SWAP7 DUP4 ADD SWAP7 SWAP1 SWAP7 KECCAK256 SWAP6 DUP4 SWAP1 MSTORE PUSH2 0x162 DUP5 ADD DUP1 DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0xFF DUP10 AND PUSH2 0x182 DUP6 ADD MSTORE PUSH2 0x1A2 DUP5 ADD DUP9 SWAP1 MSTORE PUSH2 0x1C2 DUP5 ADD DUP8 SWAP1 MSTORE MLOAD SWAP2 SWAP4 SWAP3 PUSH2 0x1E2 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x605 JUMPI POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x656 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617045524332303A20494E56414C49445F5349474E41545552450000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x661 DUP10 DUP10 DUP10 PUSH2 0x689 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x343 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x764 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x6EB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x799 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x7F5 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x343 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 SWAP10 0x2B SLT CALLDATALOAD PUSH13 0x77AA11AC170C4FE73BC289A989 0xE0 0xC6 PUSH22 0xB6C3300EEA2888020A390F64736F6C63430005100032 GASLIMIT 0x49 POP CALLDATACOPY BALANCE ORIGIN DIFFICULTY PUSH16 0x6D61696E28737472696E67206E616D65 0x2C PUSH20 0x7472696E672076657273696F6E2C75696E743235 CALLDATASIZE KECCAK256 PUSH4 0x6861696E 0x49 PUSH5 0x2C61646472 PUSH6 0x737320766572 PUSH10 0x6679696E67436F6E7472 PUSH2 0x6374 0x29 ", - "sourceMap": "102:3320:1:-;;;903:444;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1086:95:1;;990:7;;1086:95;;;;;;;;;;;;;;;;1215:4;;;;;;;;-1:-1:-1;;;1215:4:1;;;;;1249:10;;;;;;;;;;-1:-1:-1;;;1249:10:1;;;;1058:272;;;;;;;;;1199:22;1058:272;;;;1239:21;1058:272;;;;;;;;;;;1311:4;1058:272;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1058:272:1;;;;;;1035:305;;;;;;;;1016:16;:324;-1:-1:-1;102:3320:1;;;;;;" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633644e5151161008c57806395d89b411161006657806395d89b411461025b578063a9059cbb14610263578063d505accf1461028f578063dd62ed3e146102e2576100cf565b80633644e5151461020757806370a082311461020f5780637ecebe0014610235576100cf565b806306fdde03146100d4578063095ea7b31461015157806318160ddd1461019157806323b872dd146101ab57806330adf81f146101e1578063313ce567146101e9575b600080fd5b6100dc610310565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101165781810151838201526020016100fe565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561016757600080fd5b506001600160a01b038135169060200135610332565b604080519115158252519081900360200190f35b610199610349565b60408051918252519081900360200190f35b61017d600480360360608110156101c157600080fd5b506001600160a01b0381358116916020810135909116906040013561034f565b6101996103e9565b6101f161040d565b6040805160ff9092168252519081900360200190f35b610199610412565b6101996004803603602081101561022557600080fd5b50356001600160a01b0316610418565b6101996004803603602081101561024b57600080fd5b50356001600160a01b031661042a565b6100dc61043c565b61017d6004803603604081101561027957600080fd5b506001600160a01b03813516906020013561045b565b6102e0600480360360e08110156102a557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610468565b005b610199600480360360408110156102f857600080fd5b506001600160a01b038135811691602001351661066c565b6040518060400160405280600681526020016504458737761760d41b81525081565b600061033f338484610689565b5060015b92915050565b60005481565b6001600160a01b0383166000908152600260209081526040808320338452909152812054600019146103d4576001600160a01b03841660009081526002602090815260408083203384529091529020546103af908363ffffffff6106eb16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6103df84848461073b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60016020526000908152604090205481565b60046020526000908152604090205481565b6040518060400160405280600381526020016244585360e81b81525081565b600061033f33848461073b565b428410156104b4576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156105cf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106055750886001600160a01b0316816001600160a01b0316145b610656576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b610661898989610689565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115610343576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054610764908263ffffffff6106eb16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610799908263ffffffff6107f516565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b80820182811015610343576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfea265627a7a72315820992b12356c77aa11ac170c4fe73bc289a989e0c675b6c3300eea2888020a390f64736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3644E515 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0x95D89B41 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x263 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x28F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2E2 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x3644E515 EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x20F JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x235 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x191 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1AB JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x1E1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1E9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDC PUSH2 0x310 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x116 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xFE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x143 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x332 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x199 PUSH2 0x349 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x34F JUMP JUMPDEST PUSH2 0x199 PUSH2 0x3E9 JUMP JUMPDEST PUSH2 0x1F1 PUSH2 0x40D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x199 PUSH2 0x412 JUMP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x225 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x418 JUMP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x24B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x42A JUMP JUMPDEST PUSH2 0xDC PUSH2 0x43C JUMP JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x45B JUMP JUMPDEST PUSH2 0x2E0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x2A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x468 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x66C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x44587377617 PUSH1 0xD4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F CALLER DUP5 DUP5 PUSH2 0x689 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x3D4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x3AF SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x6EB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE JUMPDEST PUSH2 0x3DF DUP5 DUP5 DUP5 PUSH2 0x73B JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x445853 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F CALLER DUP5 DUP5 PUSH2 0x73B JUMP JUMPDEST TIMESTAMP DUP5 LT ISZERO PUSH2 0x4B4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x11161CDDD85C115490CC8C0E8811561412549151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP12 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP6 ADD DUP3 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x102 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH2 0x122 DUP1 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP7 ADD DUP7 MSTORE PUSH2 0x142 DUP5 ADD DUP1 DUP3 MSTORE DUP7 MLOAD SWAP7 DUP4 ADD SWAP7 SWAP1 SWAP7 KECCAK256 SWAP6 DUP4 SWAP1 MSTORE PUSH2 0x162 DUP5 ADD DUP1 DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0xFF DUP10 AND PUSH2 0x182 DUP6 ADD MSTORE PUSH2 0x1A2 DUP5 ADD DUP9 SWAP1 MSTORE PUSH2 0x1C2 DUP5 ADD DUP8 SWAP1 MSTORE MLOAD SWAP2 SWAP4 SWAP3 PUSH2 0x1E2 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x605 JUMPI POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x656 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617045524332303A20494E56414C49445F5349474E41545552450000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x661 DUP10 DUP10 DUP10 PUSH2 0x689 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x343 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x764 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x6EB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x799 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x7F5 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x343 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 SWAP10 0x2B SLT CALLDATALOAD PUSH13 0x77AA11AC170C4FE73BC289A989 0xE0 0xC6 PUSH22 0xB6C3300EEA2888020A390F64736F6C63430005100032 ", - "sourceMap": "102:3320:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;102:3320:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;175:38;;;:::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;175:38:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2161:144;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2161:144:1;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;303:24;;;:::i;:::-;;;;;;;;;;;;;;;;2453:295;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2453:295:1;;;;;;;;;;;;;;;;;:::i;589:108::-;;;:::i;262:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;448:31;;;:::i;333:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;333:41:1;-1:-1:-1;;;;;333:41:1;;:::i;703:38::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;703:38:1;-1:-1:-1;;;;;703:38:1;;:::i;219:37::-;;;:::i;2311:136::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2311:136:1;;;;;;;;:::i;2754:666::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;2754:666:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;380:61;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;380:61:1;;;;;;;;;;:::i;175:38::-;;;;;;;;;;;;;;-1:-1:-1;;;175:38:1;;;;:::o;2161:144::-;2225:4;2241:36;2250:10;2262:7;2271:5;2241:8;:36::i;:::-;-1:-1:-1;2294:4:1;2161:144;;;;;:::o;303:24::-;;;;:::o;2453:295::-;-1:-1:-1;;;;;2551:15:1;;2531:4;2551:15;;;:9;:15;;;;;;;;2567:10;2551:27;;;;;;;;-1:-1:-1;;2551:39:1;2547:138;;-1:-1:-1;;;;;2636:15:1;;;;;;:9;:15;;;;;;;;2652:10;2636:27;;;;;;;;:38;;2668:5;2636:38;:31;:38;:::i;:::-;-1:-1:-1;;;;;2606:15:1;;;;;;:9;:15;;;;;;;;2622:10;2606:27;;;;;;;:68;2547:138;2694:26;2704:4;2710:2;2714:5;2694:9;:26::i;:::-;-1:-1:-1;2737:4:1;2453:295;;;;;:::o;589:108::-;631:66;589:108;:::o;262:35::-;295:2;262:35;:::o;448:31::-;;;;:::o;333:41::-;;;;;;;;;;;;;:::o;703:38::-;;;;;;;;;;;;;:::o;219:37::-;;;;;;;;;;;;;;-1:-1:-1;;;219:37:1;;;;:::o;2311:136::-;2371:4;2387:32;2397:10;2409:2;2413:5;2387:9;:32::i;2754:666::-;2899:15;2887:8;:27;;2879:60;;;;;-1:-1:-1;;;2879:60:1;;;;;;;;;;;;-1:-1:-1;;;2879:60:1;;;;;;;;;;;;;;;3051:16;;-1:-1:-1;;;;;3146:13:1;;;2949:14;3146:13;;;:6;:13;;;;;;;;:15;;;;;;;;;3095:77;;631:66;3095:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3095:77:1;;;;;3085:88;;;;;;-1:-1:-1;;;2989:198:1;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2989:198:1;;;;;;2966:231;;;;;;;;;3234:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2949:14;;3146:15;3234:26;;;;;-1:-1:-1;;3234:26:1;;;;;;;;;;3146:15;3234:26;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;3234:26:1;;-1:-1:-1;;3234:26:1;;;-1:-1:-1;;;;;;;3278:30:1;;;;;;:59;;;3332:5;-1:-1:-1;;;;;3312:25:1;:16;-1:-1:-1;;;;;3312:25:1;;3278:59;3270:102;;;;;-1:-1:-1;;;3270:102:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;3382:31;3391:5;3398:7;3407:5;3382:8;:31::i;:::-;2754:666;;;;;;;;;:::o;380:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;1767:166::-;-1:-1:-1;;;;;1847:16:1;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;1895:31;;;;;;;;;;;;;;;;;1767:166;;;:::o;287:127:13:-;370:5;;;365:16;;;;357:50;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;;;1939:216:1;-1:-1:-1;;;;;2032:15:1;;;;;;:9;:15;;;;;;:26;;2052:5;2032:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;2014:15:1;;;;;;;:9;:15;;;;;;:44;;;;2084:13;;;;;;;:24;;2102:5;2084:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;2068:13:1;;;;;;;:9;:13;;;;;;;;;:40;;;;2123:25;;;;;;;2068:13;;2123:25;;;;;;;;;;;;;1939:216;;;:::o;155:126:13:-;238:5;;;233:16;;;;225:49;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;;" - } - }, - "interface": [ - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "608060405234801561001057600080fd5b5060405146908060526109638239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550610879806100ea6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633644e5151161008c57806395d89b411161006657806395d89b411461025b578063a9059cbb14610263578063d505accf1461028f578063dd62ed3e146102e2576100cf565b80633644e5151461020757806370a082311461020f5780637ecebe0014610235576100cf565b806306fdde03146100d4578063095ea7b31461015157806318160ddd1461019157806323b872dd146101ab57806330adf81f146101e1578063313ce567146101e9575b600080fd5b6100dc610310565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101165781810151838201526020016100fe565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561016757600080fd5b506001600160a01b038135169060200135610332565b604080519115158252519081900360200190f35b610199610349565b60408051918252519081900360200190f35b61017d600480360360608110156101c157600080fd5b506001600160a01b0381358116916020810135909116906040013561034f565b6101996103e9565b6101f161040d565b6040805160ff9092168252519081900360200190f35b610199610412565b6101996004803603602081101561022557600080fd5b50356001600160a01b0316610418565b6101996004803603602081101561024b57600080fd5b50356001600160a01b031661042a565b6100dc61043c565b61017d6004803603604081101561027957600080fd5b506001600160a01b03813516906020013561045b565b6102e0600480360360e08110156102a557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610468565b005b610199600480360360408110156102f857600080fd5b506001600160a01b038135811691602001351661066c565b6040518060400160405280600681526020016504458737761760d41b81525081565b600061033f338484610689565b5060015b92915050565b60005481565b6001600160a01b0383166000908152600260209081526040808320338452909152812054600019146103d4576001600160a01b03841660009081526002602090815260408083203384529091529020546103af908363ffffffff6106eb16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6103df84848461073b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60016020526000908152604090205481565b60046020526000908152604090205481565b6040518060400160405280600381526020016244585360e81b81525081565b600061033f33848461073b565b428410156104b4576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156105cf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106055750886001600160a01b0316816001600160a01b0316145b610656576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b610661898989610689565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115610343576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054610764908263ffffffff6106eb16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610799908263ffffffff6107f516565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b80820182811015610343576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfea265627a7a72315820992b12356c77aa11ac170c4fe73bc289a989e0c675b6c3300eea2888020a390f64736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", - "bin": "608060405234801561001057600080fd5b5060405146908060526109638239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550610879806100ea6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633644e5151161008c57806395d89b411161006657806395d89b411461025b578063a9059cbb14610263578063d505accf1461028f578063dd62ed3e146102e2576100cf565b80633644e5151461020757806370a082311461020f5780637ecebe0014610235576100cf565b806306fdde03146100d4578063095ea7b31461015157806318160ddd1461019157806323b872dd146101ab57806330adf81f146101e1578063313ce567146101e9575b600080fd5b6100dc610310565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101165781810151838201526020016100fe565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561016757600080fd5b506001600160a01b038135169060200135610332565b604080519115158252519081900360200190f35b610199610349565b60408051918252519081900360200190f35b61017d600480360360608110156101c157600080fd5b506001600160a01b0381358116916020810135909116906040013561034f565b6101996103e9565b6101f161040d565b6040805160ff9092168252519081900360200190f35b610199610412565b6101996004803603602081101561022557600080fd5b50356001600160a01b0316610418565b6101996004803603602081101561024b57600080fd5b50356001600160a01b031661042a565b6100dc61043c565b61017d6004803603604081101561027957600080fd5b506001600160a01b03813516906020013561045b565b6102e0600480360360e08110156102a557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610468565b005b610199600480360360408110156102f857600080fd5b506001600160a01b038135811691602001351661066c565b6040518060400160405280600681526020016504458737761760d41b81525081565b600061033f338484610689565b5060015b92915050565b60005481565b6001600160a01b0383166000908152600260209081526040808320338452909152812054600019146103d4576001600160a01b03841660009081526002602090815260408083203384529091529020546103af908363ffffffff6106eb16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6103df84848461073b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60016020526000908152604090205481565b60046020526000908152604090205481565b6040518060400160405280600381526020016244585360e81b81525081565b600061033f33848461073b565b428410156104b4576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156105cf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106055750886001600160a01b0316816001600160a01b0316145b610656576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b610661898989610689565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115610343576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054610764908263ffffffff6106eb16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610799908263ffffffff6107f516565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b80820182811015610343576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfea265627a7a72315820992b12356c77aa11ac170c4fe73bc289a989e0c675b6c3300eea2888020a390f64736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", - "bin-runtime": "608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633644e5151161008c57806395d89b411161006657806395d89b411461025b578063a9059cbb14610263578063d505accf1461028f578063dd62ed3e146102e2576100cf565b80633644e5151461020757806370a082311461020f5780637ecebe0014610235576100cf565b806306fdde03146100d4578063095ea7b31461015157806318160ddd1461019157806323b872dd146101ab57806330adf81f146101e1578063313ce567146101e9575b600080fd5b6100dc610310565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101165781810151838201526020016100fe565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561016757600080fd5b506001600160a01b038135169060200135610332565b604080519115158252519081900360200190f35b610199610349565b60408051918252519081900360200190f35b61017d600480360360608110156101c157600080fd5b506001600160a01b0381358116916020810135909116906040013561034f565b6101996103e9565b6101f161040d565b6040805160ff9092168252519081900360200190f35b610199610412565b6101996004803603602081101561022557600080fd5b50356001600160a01b0316610418565b6101996004803603602081101561024b57600080fd5b50356001600160a01b031661042a565b6100dc61043c565b61017d6004803603604081101561027957600080fd5b506001600160a01b03813516906020013561045b565b6102e0600480360360e08110156102a557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610468565b005b610199600480360360408110156102f857600080fd5b506001600160a01b038135811691602001351661066c565b6040518060400160405280600681526020016504458737761760d41b81525081565b600061033f338484610689565b5060015b92915050565b60005481565b6001600160a01b0383166000908152600260209081526040808320338452909152812054600019146103d4576001600160a01b03841660009081526002602090815260408083203384529091529020546103af908363ffffffff6106eb16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6103df84848461073b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60016020526000908152604090205481565b60046020526000908152604090205481565b6040518060400160405280600381526020016244585360e81b81525081565b600061033f33848461073b565b428410156104b4576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156105cf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106055750886001600160a01b0316816001600160a01b0316145b610656576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b610661898989610689565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115610343576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054610764908263ffffffff6106eb16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610799908263ffffffff6107f516565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b80820182811015610343576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfea265627a7a72315820992b12356c77aa11ac170c4fe73bc289a989e0c675b6c3300eea2888020a390f64736f6c63430005100032", - "srcmap": "102:3320:1:-;;;903:444;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1086:95:1;;990:7;;1086:95;;;;;;;;;;;;;;;;1215:4;;;;;;;;-1:-1:-1;;;1215:4:1;;;;;1249:10;;;;;;;;;;-1:-1:-1;;;1249:10:1;;;;1058:272;;;;;;;;;1199:22;1058:272;;;;1239:21;1058:272;;;;;;;;;;;1311:4;1058:272;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1058:272:1;;;;;;1035:305;;;;;;;;1016:16;:324;-1:-1:-1;102:3320:1;;;;;;", - "srcmap-runtime": "102:3320:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;102:3320:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;175:38;;;:::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;175:38:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2161:144;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2161:144:1;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;303:24;;;:::i;:::-;;;;;;;;;;;;;;;;2453:295;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2453:295:1;;;;;;;;;;;;;;;;;:::i;589:108::-;;;:::i;262:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;448:31;;;:::i;333:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;333:41:1;-1:-1:-1;;;;;333:41:1;;:::i;703:38::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;703:38:1;-1:-1:-1;;;;;703:38:1;;:::i;219:37::-;;;:::i;2311:136::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2311:136:1;;;;;;;;:::i;2754:666::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;2754:666:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;380:61;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;380:61:1;;;;;;;;;;:::i;175:38::-;;;;;;;;;;;;;;-1:-1:-1;;;175:38:1;;;;:::o;2161:144::-;2225:4;2241:36;2250:10;2262:7;2271:5;2241:8;:36::i;:::-;-1:-1:-1;2294:4:1;2161:144;;;;;:::o;303:24::-;;;;:::o;2453:295::-;-1:-1:-1;;;;;2551:15:1;;2531:4;2551:15;;;:9;:15;;;;;;;;2567:10;2551:27;;;;;;;;-1:-1:-1;;2551:39:1;2547:138;;-1:-1:-1;;;;;2636:15:1;;;;;;:9;:15;;;;;;;;2652:10;2636:27;;;;;;;;:38;;2668:5;2636:38;:31;:38;:::i;:::-;-1:-1:-1;;;;;2606:15:1;;;;;;:9;:15;;;;;;;;2622:10;2606:27;;;;;;;:68;2547:138;2694:26;2704:4;2710:2;2714:5;2694:9;:26::i;:::-;-1:-1:-1;2737:4:1;2453:295;;;;;:::o;589:108::-;631:66;589:108;:::o;262:35::-;295:2;262:35;:::o;448:31::-;;;;:::o;333:41::-;;;;;;;;;;;;;:::o;703:38::-;;;;;;;;;;;;;:::o;219:37::-;;;;;;;;;;;;;;-1:-1:-1;;;219:37:1;;;;:::o;2311:136::-;2371:4;2387:32;2397:10;2409:2;2413:5;2387:9;:32::i;2754:666::-;2899:15;2887:8;:27;;2879:60;;;;;-1:-1:-1;;;2879:60:1;;;;;;;;;;;;-1:-1:-1;;;2879:60:1;;;;;;;;;;;;;;;3051:16;;-1:-1:-1;;;;;3146:13:1;;;2949:14;3146:13;;;:6;:13;;;;;;;;:15;;;;;;;;;3095:77;;631:66;3095:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3095:77:1;;;;;3085:88;;;;;;-1:-1:-1;;;2989:198:1;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2989:198:1;;;;;;2966:231;;;;;;;;;3234:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2949:14;;3146:15;3234:26;;;;;-1:-1:-1;;3234:26:1;;;;;;;;;;3146:15;3234:26;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;3234:26:1;;-1:-1:-1;;3234:26:1;;;-1:-1:-1;;;;;;;3278:30:1;;;;;;:59;;;3332:5;-1:-1:-1;;;;;3312:25:1;:16;-1:-1:-1;;;;;3312:25:1;;3278:59;3270:102;;;;;-1:-1:-1;;;3270:102:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;3382:31;3391:5;3398:7;3407:5;3382:8;:31::i;:::-;2754:666;;;;;;;;;:::o;380:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;1767:166::-;-1:-1:-1;;;;;1847:16:1;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;1895:31;;;;;;;;;;;;;;;;;1767:166;;;:::o;287:127:13:-;370:5;;;365:16;;;;357:50;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;;;1939:216:1;-1:-1:-1;;;;;2032:15:1;;;;;;:9;:15;;;;;;:26;;2052:5;2032:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;2014:15:1;;;;;;;:9;:15;;;;;;:44;;;;2084:13;;;;;;;:24;;2102:5;2084:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;2068:13:1;;;;;;;:9;:13;;;;;;;;;:40;;;;2123:25;;;;;;;2068:13;;2123:25;;;;;;;;;;;;;1939:216;;;:::o;155:126:13:-;238:5;;;233:16;;;;225:49;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;;" - }, - "contracts/DXswapFactory.sol:DXswapFactory": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_feeToSetter", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token0", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token1", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "pair", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "PairCreated", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "INIT_CODE_PAIR_HASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "allPairs", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "allPairsLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "tokenA", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenB", - "type": "address" - } - ], - "name": "createPair", - "outputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "feeTo", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "feeToSetter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "getPair", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "protocolFeeDenominator", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "_feeTo", - "type": "address" - } - ], - "name": "setFeeTo", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "_feeToSetter", - "type": "address" - } - ], - "name": "setFeeToSetter", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint8", - "name": "_protocolFeeDenominator", - "type": "uint8" - } - ], - "name": "setProtocolFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "_pair", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_swapFee", - "type": "uint32" - } - ], - "name": "setSwapFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "60806040526001805460ff60a01b1916600960a01b17905534801561002357600080fd5b50604051612f9c380380612f9c8339818101604052602081101561004657600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055612f26806100766000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80635855a25a116100715780635855a25a1461015c5780639e68ceb814610164578063a2e74af614610196578063c9c65396146101bc578063e6a43905146101ea578063f46901ed14610218576100b4565b8063017e7e58146100b9578063094b7415146100dd5780631e3dd18b146100e55780632ff7042a146101025780634e91f81114610120578063574f2ba314610142575b600080fd5b6100c161023e565b604080516001600160a01b039092168252519081900360200190f35b6100c161024d565b6100c1600480360360208110156100fb57600080fd5b503561025c565b61010a610283565b6040805160ff9092168252519081900360200190f35b6101406004803603602081101561013657600080fd5b503560ff16610293565b005b61014a610365565b60408051918252519081900360200190f35b61014a61036b565b6101406004803603604081101561017a57600080fd5b5080356001600160a01b0316906020013563ffffffff166103fe565b610140600480360360208110156101ac57600080fd5b50356001600160a01b03166104c1565b6100c1600480360360408110156101d257600080fd5b506001600160a01b038135811691602001351661053d565b6100c16004803603604081101561020057600080fd5b506001600160a01b038135811691602001351661085f565b6101406004803603602081101561022e57600080fd5b50356001600160a01b0316610885565b6000546001600160a01b031681565b6001546001600160a01b031681565b6003818154811061026957fe5b6000918252602090912001546001600160a01b0316905081565b600154600160a01b900460ff1681565b6001546001600160a01b031633146102ed576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b60008160ff1611610345576040805162461bcd60e51b815260206004820152601c60248201527f445873776170466163746f72793a20464f5242494444454e5f46454500000000604482015290519081900360640190fd5b6001805460ff909216600160a01b0260ff60a01b19909216919091179055565b60035490565b60405161037a60208201610901565b6020820181038252601f19601f820116604052506040516020018082805190602001908083835b602083106103c05780518252601f1990920191602091820191016103a1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b6001546001600160a01b03163314610458576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b6040805163d6d788c360e01b815263ffffffff8316600482015290516001600160a01b0384169163d6d788c391602480830192600092919082900301818387803b1580156104a557600080fd5b505af11580156104b9573d6000803e3d6000fd5b505050505050565b6001546001600160a01b0316331461051b576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b031614156105905760405162461bcd60e51b8152600401808060200182810382526022815260200180612ed06022913960400191505060405180910390fd5b600080836001600160a01b0316856001600160a01b0316106105b35783856105b6565b84845b90925090506001600160a01b038216610616576040805162461bcd60e51b815260206004820152601b60248201527f445873776170466163746f72793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615610690576040805162461bcd60e51b815260206004820152601a60248201527f445873776170466163746f72793a20504149525f455849535453000000000000604482015290519081900360640190fd5b6060604051806020016106a290610901565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f56040805163485cc95560e01b81526001600160a01b038781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561077557600080fd5b505af1158015610789573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b031633146108df576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6125c18061090f8339019056fe6080604052600c805463ffffffff191660191790556001600d5534801561002557600080fd5b50604051469080605261256f8239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561245e806101116000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429445873776170466163746f72793a204944454e544943414c5f414444524553534553a265627a7a72315820c6fa710efa4f71df9b005295f714d02cccf70f7f9c7bc282fca1f7f11487da9064736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x9 PUSH1 0xA0 SHL OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x2F9C CODESIZE SUB DUP1 PUSH2 0x2F9C DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2F26 DUP1 PUSH2 0x76 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5855A25A GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x5855A25A EQ PUSH2 0x15C JUMPI DUP1 PUSH4 0x9E68CEB8 EQ PUSH2 0x164 JUMPI DUP1 PUSH4 0xA2E74AF6 EQ PUSH2 0x196 JUMPI DUP1 PUSH4 0xC9C65396 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0xE6A43905 EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0xF46901ED EQ PUSH2 0x218 JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x17E7E58 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x94B7415 EQ PUSH2 0xDD JUMPI DUP1 PUSH4 0x1E3DD18B EQ PUSH2 0xE5 JUMPI DUP1 PUSH4 0x2FF7042A EQ PUSH2 0x102 JUMPI DUP1 PUSH4 0x4E91F811 EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0x574F2BA3 EQ PUSH2 0x142 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0x23E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xC1 PUSH2 0x24D JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x25C JUMP JUMPDEST PUSH2 0x10A PUSH2 0x283 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xFF AND PUSH2 0x293 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x14A PUSH2 0x365 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x14A PUSH2 0x36B JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x17A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x3FE JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4C1 JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x53D JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x200 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x85F JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x885 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x269 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2ED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND GT PUSH2 0x345 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A20464F5242494444454E5F46454500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH1 0xFF PUSH1 0xA0 SHL NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37A PUSH1 0x20 DUP3 ADD PUSH2 0x901 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3C0 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x458 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xD6D788C3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0xD6D788C3 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4B9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x51B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x590 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2ED0 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x5B3 JUMPI DUP4 DUP6 PUSH2 0x5B6 JUMP JUMPDEST DUP5 DUP5 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x616 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A205A45524F5F414444524553530000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD AND ISZERO PUSH2 0x690 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A20504149525F455849535453000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0x6A2 SWAP1 PUSH2 0x901 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP SWAP1 POP PUSH1 0x0 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 DUP3 MLOAD PUSH1 0x20 DUP5 ADD PUSH1 0x0 CREATE2 PUSH1 0x40 DUP1 MLOAD PUSH4 0x485CC955 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP8 POP SWAP1 DUP8 AND SWAP2 PUSH4 0x485CC955 SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x775 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x789 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP10 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP1 SLOAD SWAP8 DUP14 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP9 DUP10 AND DUP2 OR SWAP1 SWAP2 SSTORE SWAP4 DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP7 DUP7 MSTORE DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP1 SLOAD DUP9 AND DUP6 OR SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE SWAP6 DUP2 SWAP1 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 SWAP6 ADD DUP1 SLOAD SWAP1 SWAP8 AND DUP5 OR SWAP1 SWAP7 SSTORE SWAP3 SLOAD DUP4 MLOAD SWAP3 DUP4 MSTORE SWAP1 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0xD3648BD0F6BA80134A33BA9275AC585D9D315F0AD8355CDDEFDE31AFA28D0E9 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x8DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x25C1 DUP1 PUSH2 0x90F DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH1 0x19 OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0xD SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD CHAINID SWAP1 DUP1 PUSH1 0x52 PUSH2 0x256F DUP3 CODECOPY PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB PUSH1 0x52 ADD DUP3 KECCAK256 DUP3 DUP3 ADD DUP3 MSTORE PUSH1 0x6 DUP4 MSTORE PUSH6 0x44587377617 PUSH1 0xD4 SHL PUSH1 0x20 SWAP4 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD DUP4 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL SWAP1 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x3649D708A7ABF9E212D0A587955EAD4123223014B2E46201DFB587457CBD4591 DUP2 DUP4 ADD MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP1 MSTORE DUP3 MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x3 SSTORE POP PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0x245E DUP1 PUSH2 0x111 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1CF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6A627842 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xBA9A7A56 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x583 JUMPI DUP1 PUSH4 0xD6D788C3 EQ PUSH2 0x5D4 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x5F7 JUMPI DUP1 PUSH4 0xFFF6CAE9 EQ PUSH2 0x625 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0xBA9A7A56 EQ PUSH2 0x545 JUMPI DUP1 PUSH4 0xBC25CF77 EQ PUSH2 0x54D JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xD21220A7 EQ PUSH2 0x57B JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0x89AFCB44 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x511 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x519 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x6A627842 EQ PUSH2 0x458 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x47E JUMPI DUP1 PUSH4 0x7464FC3D EQ PUSH2 0x4A4 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x485CC955 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x485CC955 EQ PUSH2 0x3F9 JUMPI DUP1 PUSH4 0x54CF2AEB EQ PUSH2 0x427 JUMPI DUP1 PUSH4 0x5909C0D5 EQ PUSH2 0x448 JUMPI DUP1 PUSH4 0x5A3D5493 EQ PUSH2 0x450 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x3D3 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x3F1 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x1AD JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x317 JUMPI DUP1 PUSH4 0xDFE1681 EQ PUSH2 0x357 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x37B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x395 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x22C0D9F EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x262 JUMPI DUP1 PUSH4 0x902F1AC EQ PUSH2 0x2DF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP4 ADD CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x62D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26A PUSH2 0xB7F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x28C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2D1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2E7 PUSH2 0xBA1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x32D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xBCB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x35F PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xBF1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xBF7 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xC91 JUMP JUMPDEST PUSH2 0x3DB PUSH2 0xCB5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xCBA JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x40F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xCC0 JUMP JUMPDEST PUSH2 0x42F PUSH2 0xD45 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xD51 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xD57 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD5D JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x494 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x105E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1076 JUMP JUMPDEST PUSH2 0x4F8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1088 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x26A PUSH2 0x142F JUMP JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x52F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x144E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x145B JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x563 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1461 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15CD JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15DC JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x17EF JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x60D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x18BF JUMP JUMPDEST PUSH2 0x260 PUSH2 0x18DC JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x679 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE DUP5 ISZERO ISZERO DUP1 PUSH2 0x68C JUMPI POP PUSH1 0x0 DUP5 GT JUMPDEST PUSH2 0x6C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23B6 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6D2 PUSH2 0xBA1 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP8 LT DUP1 ISZERO PUSH2 0x6F7 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP7 LT JUMPDEST PUSH2 0x732 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2394 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 SWAP1 DUP2 AND SWAP1 DUP10 AND DUP3 EQ DUP1 ISZERO SWAP1 PUSH2 0x770 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST PUSH2 0x7BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x445873776170506169723A20494E56414C49445F544F PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP11 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x7CB DUP3 DUP11 DUP14 PUSH2 0x1A3F JUMP JUMPDEST DUP10 ISZERO PUSH2 0x7DC JUMPI PUSH2 0x7DC DUP2 DUP11 DUP13 PUSH2 0x1A3F JUMP JUMPDEST DUP7 ISZERO PUSH2 0x897 JUMPI DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x78B94AE6 CALLER DUP14 DUP14 DUP13 DUP13 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x87E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x892 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8F1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x907 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x953 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x967 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x97D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP PUSH1 0x0 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP6 AND DUP11 SWAP1 SUB DUP4 GT PUSH2 0x9A0 JUMPI PUSH1 0x0 PUSH2 0x9AF JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 GT PUSH2 0x9CC JUMPI PUSH1 0x0 PUSH2 0x9DB JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 GT DUP1 PUSH2 0x9EC JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST PUSH2 0xA27 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23DC PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC SLOAD PUSH1 0x0 SWAP1 PUSH2 0xA64 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xA58 DUP8 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0xC SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0xA86 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH2 0xAB8 PUSH4 0x5F5E100 PUSH2 0xAAC PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP12 DUP2 AND SWAP1 DUP12 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xAC8 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST LT ISZERO PUSH2 0xB0B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x445873776170506169723A204B PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH2 0xB19 DUP5 DUP5 DUP9 DUP9 PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP14 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP13 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND SWAP2 CALLER SWAP2 PUSH32 0xD78AD95FA46C994B6551D0DA85FC275FE613CE37657FB8D5E3D130840159D822 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x44587377617 PUSH1 0xD4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP3 PUSH1 0x1 PUSH1 0x70 SHL DUP4 DIV SWAP1 SWAP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1E52 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x0 NOT EQ PUSH2 0xC7C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xC57 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE JUMPDEST PUSH2 0xC87 DUP5 DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD17 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x7 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xC SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0xDAB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0xDBB PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP4 SWAP6 POP SWAP2 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 PUSH2 0xED5 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xEF2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF00 DUP8 DUP8 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0xF3D JUMPI PUSH2 0xF29 PUSH2 0x3E8 PUSH2 0xA58 PUSH2 0xF24 DUP8 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0x2146 JUMP JUMPDEST SWAP9 POP PUSH2 0xF38 PUSH1 0x0 PUSH2 0x3E8 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xF8C JUMP JUMPDEST PUSH2 0xF89 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF5A DUP7 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF61 JUMPI INVALID JUMPDEST DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF7C DUP7 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF83 JUMPI INVALID JUMPDEST DIV PUSH2 0x222E JUMP JUMPDEST SWAP9 POP JUMPDEST PUSH1 0x0 DUP10 GT PUSH2 0xFCB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x236B PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFD5 DUP11 DUP11 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xFE1 DUP7 DUP7 DUP11 DUP11 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x1011 JUMPI PUSH1 0x8 SLOAD PUSH2 0x100D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP2 MLOAD CALLER SWAP3 PUSH32 0x4C209B5FC8AD50758F13E2E1088BA56A560DFF690A1C6FEF26394F4C03821C4F SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP SWAP5 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xB SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x10D7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0x10E7 PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP5 SWAP7 POP SWAP3 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP4 SWAP2 AND SWAP2 PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1143 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1157 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x116D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ADDRESS PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0x1204 DUP9 DUP9 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x121B DUP5 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x1222 JUMPI INVALID JUMPDEST DIV SWAP11 POP DUP1 PUSH2 0x1236 DUP5 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x123D JUMPI INVALID JUMPDEST DIV SWAP10 POP PUSH1 0x0 DUP12 GT DUP1 ISZERO PUSH2 0x1250 JUMPI POP PUSH1 0x0 DUP11 GT JUMPDEST PUSH2 0x128B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2401 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1295 ADDRESS DUP5 PUSH2 0x2246 JUMP JUMPDEST PUSH2 0x12A0 DUP8 DUP14 DUP14 PUSH2 0x1A3F JUMP JUMPDEST PUSH2 0x12AB DUP7 DUP14 DUP13 PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1305 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x131B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1367 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x137B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP PUSH2 0x13A1 DUP6 DUP6 DUP12 DUP12 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x13D1 JUMPI PUSH1 0x8 SLOAD PUSH2 0x13CD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP13 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND SWAP3 CALLER SWAP3 PUSH32 0xDCCD412F0B1252819CB1FD330B93224CA42612892BB3F4F789976E6D81936496 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP POP POP POP POP POP PUSH1 0x1 PUSH1 0xD DUP2 SWAP1 SSTORE POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x445853 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST PUSH2 0x3E8 DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x14AD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP5 SWAP1 SWAP4 AND SWAP3 PUSH2 0x155C SWAP3 DUP6 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 DUP6 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1533 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1549 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x15C3 SWAP3 DUP5 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST TIMESTAMP DUP5 LT ISZERO PUSH2 0x1637 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x11161CDDD85C115490CC8C0E8811561412549151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP12 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP6 ADD DUP3 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x102 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH2 0x122 DUP1 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP7 ADD DUP7 MSTORE PUSH2 0x142 DUP5 ADD DUP1 DUP3 MSTORE DUP7 MLOAD SWAP7 DUP4 ADD SWAP7 SWAP1 SWAP7 KECCAK256 SWAP6 DUP4 SWAP1 MSTORE PUSH2 0x162 DUP5 ADD DUP1 DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0xFF DUP10 AND PUSH2 0x182 DUP6 ADD MSTORE PUSH2 0x1A2 DUP5 ADD DUP9 SWAP1 MSTORE PUSH2 0x1C2 DUP5 ADD DUP8 SWAP1 MSTORE MLOAD SWAP2 SWAP4 SWAP3 PUSH2 0x1E2 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1752 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1788 JUMPI POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x17D9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617045524332303A20494E56414C49445F5349474E41545552450000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x17E4 DUP10 DUP10 DUP10 PUSH2 0x1E52 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1846 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3E8 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x18A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A20464F5242494444454E5F46454500000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x1928 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x1A38 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1979 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x198D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x19A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A04 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x1 PUSH1 0xD SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH32 0x7472616E7366657228616464726573732C75696E743235362900000000000000 PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP7 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP5 MSTORE SWAP2 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP2 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1AEC JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1ACD JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1B4E JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1B53 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x1B81 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x1B81 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x1BD2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A205452414E534645525F4641494C45440000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0x1BF4 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0x1BF1 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 GT DUP1 ISZERO SWAP1 PUSH2 0x1CAA JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 GT ISZERO JUMPDEST PUSH2 0x1CF2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x445873776170506169723A204F564552464C4F57 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH4 0xFFFFFFFF TIMESTAMP DUP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV DUP2 AND DUP3 SUB SWAP1 DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1D22 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 AND ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1D36 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1DA7 JUMPI DUP1 PUSH4 0xFFFFFFFF AND PUSH2 0x1D64 DUP6 PUSH2 0x1D4F DUP7 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x22F6 AND JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE PUSH4 0xFFFFFFFF DUP2 AND PUSH2 0x1D8F DUP5 PUSH2 0x1D4F DUP8 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP9 DUP2 AND SWAP2 SWAP1 SWAP2 OR PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x70 SHL NOT AND PUSH1 0x1 PUSH1 0x70 SHL DUP9 DUP4 AND DUP2 MUL SWAP2 SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0xE0 SHL PUSH4 0xFFFFFFFF DUP8 AND MUL OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP4 DIV SWAP1 SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x1C411E9A96E071241C2F21F7726B17AE89E3CAB4C78BE50E062B03A9FFFBBAD1 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1EDD SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x1F12 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17E7E58 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1FE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x17FB8215 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2FF7042A SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2036 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x204A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2060 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO DUP1 ISZERO SWAP6 POP SWAP2 SWAP3 POP SWAP1 PUSH2 0x2131 JUMPI DUP1 ISZERO PUSH2 0x212C JUMPI PUSH1 0x0 PUSH2 0x20A3 PUSH2 0xF24 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 DUP2 AND SWAP1 DUP10 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x20B0 DUP4 PUSH2 0x2146 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x2129 JUMPI PUSH1 0x0 PUSH2 0x20DE PUSH2 0x20CF DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2105 DUP4 PUSH2 0x20F9 DUP7 PUSH1 0xFF DUP11 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0x2112 JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 ISZERO PUSH2 0x2125 JUMPI PUSH2 0x2125 DUP9 DUP3 PUSH2 0x2198 JUMP JUMPDEST POP POP POP JUMPDEST POP POP JUMPDEST PUSH2 0x213D JUMP JUMPDEST DUP1 ISZERO PUSH2 0x213D JUMPI PUSH1 0x0 PUSH1 0xB SSTORE JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 GT ISZERO PUSH2 0x2189 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x2 DUP3 DIV ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2183 JUMPI DUP1 SWAP2 POP PUSH1 0x2 DUP2 DUP3 DUP6 DUP2 PUSH2 0x2172 JUMPI INVALID JUMPDEST DIV ADD DUP2 PUSH2 0x217B JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x215B JUMP JUMPDEST POP PUSH2 0x2193 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2193 JUMPI POP PUSH1 0x1 JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x21AB SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x21D6 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x223D JUMPI DUP2 PUSH2 0x223F JUMP JUMPDEST DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x226F SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SLOAD PUSH2 0x229C SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH1 0x1 PUSH1 0x70 SHL MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP5 AND DUP2 PUSH2 0x2313 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F 0x4D 0x49 0x4E SLOAD GASLIMIT DIFFICULTY DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4F SSTORE SLOAD POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x49 0x4E POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F TIMESTAMP SSTORE MSTORE 0x4E GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 0xBC SWAP15 MSTORE 0xC6 0x22 0xA7 RETURN PUSH25 0xA026EE16432D9BBC35CC0DB3D76CFAFD5D67631F595A9B1864 PUSH20 0x6F6C63430005100032454950373132446F6D6169 PUSH15 0x28737472696E67206E616D652C7374 PUSH19 0x696E672076657273696F6E2C75696E74323536 KECCAK256 PUSH4 0x6861696E 0x49 PUSH5 0x2C61646472 PUSH6 0x737320766572 PUSH10 0x6679696E67436F6E7472 PUSH2 0x6374 0x29 DIFFICULTY PC PUSH20 0x776170466163746F72793A204944454E54494341 0x4C 0x5F COINBASE DIFFICULTY DIFFICULTY MSTORE GASLIMIT MSTORE8 MSTORE8 GASLIMIT MSTORE8 LOG2 PUSH6 0x627A7A723158 KECCAK256 0xC6 STATICCALL PUSH18 0xEFA4F71DF9B005295F714D02CCCF70F7F9C PUSH28 0xC282FCA1F7F11487DA9064736F6C6343000510003200000000000000 ", - "sourceMap": "96:2445:2:-;;;201:39;;;-1:-1:-1;;;;201:39:2;-1:-1:-1;;;201:39:2;;;579:84;5:2:-1;;;;30:1;27;20:12;5:2;579:84:2;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;579:84:2;630:11;:26;;-1:-1:-1;;;;;;630:26:2;-1:-1:-1;;;;;630:26:2;;;;;;;;;-1:-1:-1;;96:2445:2;-1:-1:-1;96:2445:2;;" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100b45760003560e01c80635855a25a116100715780635855a25a1461015c5780639e68ceb814610164578063a2e74af614610196578063c9c65396146101bc578063e6a43905146101ea578063f46901ed14610218576100b4565b8063017e7e58146100b9578063094b7415146100dd5780631e3dd18b146100e55780632ff7042a146101025780634e91f81114610120578063574f2ba314610142575b600080fd5b6100c161023e565b604080516001600160a01b039092168252519081900360200190f35b6100c161024d565b6100c1600480360360208110156100fb57600080fd5b503561025c565b61010a610283565b6040805160ff9092168252519081900360200190f35b6101406004803603602081101561013657600080fd5b503560ff16610293565b005b61014a610365565b60408051918252519081900360200190f35b61014a61036b565b6101406004803603604081101561017a57600080fd5b5080356001600160a01b0316906020013563ffffffff166103fe565b610140600480360360208110156101ac57600080fd5b50356001600160a01b03166104c1565b6100c1600480360360408110156101d257600080fd5b506001600160a01b038135811691602001351661053d565b6100c16004803603604081101561020057600080fd5b506001600160a01b038135811691602001351661085f565b6101406004803603602081101561022e57600080fd5b50356001600160a01b0316610885565b6000546001600160a01b031681565b6001546001600160a01b031681565b6003818154811061026957fe5b6000918252602090912001546001600160a01b0316905081565b600154600160a01b900460ff1681565b6001546001600160a01b031633146102ed576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b60008160ff1611610345576040805162461bcd60e51b815260206004820152601c60248201527f445873776170466163746f72793a20464f5242494444454e5f46454500000000604482015290519081900360640190fd5b6001805460ff909216600160a01b0260ff60a01b19909216919091179055565b60035490565b60405161037a60208201610901565b6020820181038252601f19601f820116604052506040516020018082805190602001908083835b602083106103c05780518252601f1990920191602091820191016103a1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b6001546001600160a01b03163314610458576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b6040805163d6d788c360e01b815263ffffffff8316600482015290516001600160a01b0384169163d6d788c391602480830192600092919082900301818387803b1580156104a557600080fd5b505af11580156104b9573d6000803e3d6000fd5b505050505050565b6001546001600160a01b0316331461051b576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b031614156105905760405162461bcd60e51b8152600401808060200182810382526022815260200180612ed06022913960400191505060405180910390fd5b600080836001600160a01b0316856001600160a01b0316106105b35783856105b6565b84845b90925090506001600160a01b038216610616576040805162461bcd60e51b815260206004820152601b60248201527f445873776170466163746f72793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615610690576040805162461bcd60e51b815260206004820152601a60248201527f445873776170466163746f72793a20504149525f455849535453000000000000604482015290519081900360640190fd5b6060604051806020016106a290610901565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f56040805163485cc95560e01b81526001600160a01b038781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561077557600080fd5b505af1158015610789573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b031633146108df576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6125c18061090f8339019056fe6080604052600c805463ffffffff191660191790556001600d5534801561002557600080fd5b50604051469080605261256f8239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561245e806101116000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429445873776170466163746f72793a204944454e544943414c5f414444524553534553a265627a7a72315820c6fa710efa4f71df9b005295f714d02cccf70f7f9c7bc282fca1f7f11487da9064736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5855A25A GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x5855A25A EQ PUSH2 0x15C JUMPI DUP1 PUSH4 0x9E68CEB8 EQ PUSH2 0x164 JUMPI DUP1 PUSH4 0xA2E74AF6 EQ PUSH2 0x196 JUMPI DUP1 PUSH4 0xC9C65396 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0xE6A43905 EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0xF46901ED EQ PUSH2 0x218 JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x17E7E58 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x94B7415 EQ PUSH2 0xDD JUMPI DUP1 PUSH4 0x1E3DD18B EQ PUSH2 0xE5 JUMPI DUP1 PUSH4 0x2FF7042A EQ PUSH2 0x102 JUMPI DUP1 PUSH4 0x4E91F811 EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0x574F2BA3 EQ PUSH2 0x142 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0x23E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xC1 PUSH2 0x24D JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x25C JUMP JUMPDEST PUSH2 0x10A PUSH2 0x283 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xFF AND PUSH2 0x293 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x14A PUSH2 0x365 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x14A PUSH2 0x36B JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x17A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x3FE JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4C1 JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x53D JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x200 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x85F JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x885 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x269 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2ED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND GT PUSH2 0x345 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A20464F5242494444454E5F46454500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH1 0xFF PUSH1 0xA0 SHL NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37A PUSH1 0x20 DUP3 ADD PUSH2 0x901 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3C0 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x458 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xD6D788C3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0xD6D788C3 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4B9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x51B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x590 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2ED0 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x5B3 JUMPI DUP4 DUP6 PUSH2 0x5B6 JUMP JUMPDEST DUP5 DUP5 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x616 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A205A45524F5F414444524553530000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD AND ISZERO PUSH2 0x690 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A20504149525F455849535453000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0x6A2 SWAP1 PUSH2 0x901 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP SWAP1 POP PUSH1 0x0 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 DUP3 MLOAD PUSH1 0x20 DUP5 ADD PUSH1 0x0 CREATE2 PUSH1 0x40 DUP1 MLOAD PUSH4 0x485CC955 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP8 POP SWAP1 DUP8 AND SWAP2 PUSH4 0x485CC955 SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x775 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x789 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP10 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP1 SLOAD SWAP8 DUP14 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP9 DUP10 AND DUP2 OR SWAP1 SWAP2 SSTORE SWAP4 DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP7 DUP7 MSTORE DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP1 SLOAD DUP9 AND DUP6 OR SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE SWAP6 DUP2 SWAP1 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 SWAP6 ADD DUP1 SLOAD SWAP1 SWAP8 AND DUP5 OR SWAP1 SWAP7 SSTORE SWAP3 SLOAD DUP4 MLOAD SWAP3 DUP4 MSTORE SWAP1 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0xD3648BD0F6BA80134A33BA9275AC585D9D315F0AD8355CDDEFDE31AFA28D0E9 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x8DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x25C1 DUP1 PUSH2 0x90F DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH1 0x19 OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0xD SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD CHAINID SWAP1 DUP1 PUSH1 0x52 PUSH2 0x256F DUP3 CODECOPY PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB PUSH1 0x52 ADD DUP3 KECCAK256 DUP3 DUP3 ADD DUP3 MSTORE PUSH1 0x6 DUP4 MSTORE PUSH6 0x44587377617 PUSH1 0xD4 SHL PUSH1 0x20 SWAP4 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD DUP4 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL SWAP1 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x3649D708A7ABF9E212D0A587955EAD4123223014B2E46201DFB587457CBD4591 DUP2 DUP4 ADD MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP1 MSTORE DUP3 MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x3 SSTORE POP PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0x245E DUP1 PUSH2 0x111 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1CF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6A627842 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xBA9A7A56 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x583 JUMPI DUP1 PUSH4 0xD6D788C3 EQ PUSH2 0x5D4 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x5F7 JUMPI DUP1 PUSH4 0xFFF6CAE9 EQ PUSH2 0x625 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0xBA9A7A56 EQ PUSH2 0x545 JUMPI DUP1 PUSH4 0xBC25CF77 EQ PUSH2 0x54D JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xD21220A7 EQ PUSH2 0x57B JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0x89AFCB44 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x511 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x519 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x6A627842 EQ PUSH2 0x458 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x47E JUMPI DUP1 PUSH4 0x7464FC3D EQ PUSH2 0x4A4 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x485CC955 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x485CC955 EQ PUSH2 0x3F9 JUMPI DUP1 PUSH4 0x54CF2AEB EQ PUSH2 0x427 JUMPI DUP1 PUSH4 0x5909C0D5 EQ PUSH2 0x448 JUMPI DUP1 PUSH4 0x5A3D5493 EQ PUSH2 0x450 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x3D3 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x3F1 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x1AD JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x317 JUMPI DUP1 PUSH4 0xDFE1681 EQ PUSH2 0x357 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x37B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x395 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x22C0D9F EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x262 JUMPI DUP1 PUSH4 0x902F1AC EQ PUSH2 0x2DF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP4 ADD CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x62D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26A PUSH2 0xB7F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x28C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2D1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2E7 PUSH2 0xBA1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x32D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xBCB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x35F PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xBF1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xBF7 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xC91 JUMP JUMPDEST PUSH2 0x3DB PUSH2 0xCB5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xCBA JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x40F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xCC0 JUMP JUMPDEST PUSH2 0x42F PUSH2 0xD45 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xD51 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xD57 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD5D JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x494 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x105E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1076 JUMP JUMPDEST PUSH2 0x4F8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1088 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x26A PUSH2 0x142F JUMP JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x52F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x144E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x145B JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x563 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1461 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15CD JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15DC JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x17EF JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x60D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x18BF JUMP JUMPDEST PUSH2 0x260 PUSH2 0x18DC JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x679 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE DUP5 ISZERO ISZERO DUP1 PUSH2 0x68C JUMPI POP PUSH1 0x0 DUP5 GT JUMPDEST PUSH2 0x6C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23B6 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6D2 PUSH2 0xBA1 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP8 LT DUP1 ISZERO PUSH2 0x6F7 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP7 LT JUMPDEST PUSH2 0x732 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2394 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 SWAP1 DUP2 AND SWAP1 DUP10 AND DUP3 EQ DUP1 ISZERO SWAP1 PUSH2 0x770 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST PUSH2 0x7BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x445873776170506169723A20494E56414C49445F544F PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP11 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x7CB DUP3 DUP11 DUP14 PUSH2 0x1A3F JUMP JUMPDEST DUP10 ISZERO PUSH2 0x7DC JUMPI PUSH2 0x7DC DUP2 DUP11 DUP13 PUSH2 0x1A3F JUMP JUMPDEST DUP7 ISZERO PUSH2 0x897 JUMPI DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x78B94AE6 CALLER DUP14 DUP14 DUP13 DUP13 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x87E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x892 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8F1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x907 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x953 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x967 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x97D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP PUSH1 0x0 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP6 AND DUP11 SWAP1 SUB DUP4 GT PUSH2 0x9A0 JUMPI PUSH1 0x0 PUSH2 0x9AF JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 GT PUSH2 0x9CC JUMPI PUSH1 0x0 PUSH2 0x9DB JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 GT DUP1 PUSH2 0x9EC JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST PUSH2 0xA27 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23DC PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC SLOAD PUSH1 0x0 SWAP1 PUSH2 0xA64 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xA58 DUP8 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0xC SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0xA86 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH2 0xAB8 PUSH4 0x5F5E100 PUSH2 0xAAC PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP12 DUP2 AND SWAP1 DUP12 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xAC8 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST LT ISZERO PUSH2 0xB0B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x445873776170506169723A204B PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH2 0xB19 DUP5 DUP5 DUP9 DUP9 PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP14 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP13 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND SWAP2 CALLER SWAP2 PUSH32 0xD78AD95FA46C994B6551D0DA85FC275FE613CE37657FB8D5E3D130840159D822 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x44587377617 PUSH1 0xD4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP3 PUSH1 0x1 PUSH1 0x70 SHL DUP4 DIV SWAP1 SWAP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1E52 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x0 NOT EQ PUSH2 0xC7C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xC57 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE JUMPDEST PUSH2 0xC87 DUP5 DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD17 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x7 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xC SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0xDAB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0xDBB PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP4 SWAP6 POP SWAP2 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 PUSH2 0xED5 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xEF2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF00 DUP8 DUP8 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0xF3D JUMPI PUSH2 0xF29 PUSH2 0x3E8 PUSH2 0xA58 PUSH2 0xF24 DUP8 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0x2146 JUMP JUMPDEST SWAP9 POP PUSH2 0xF38 PUSH1 0x0 PUSH2 0x3E8 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xF8C JUMP JUMPDEST PUSH2 0xF89 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF5A DUP7 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF61 JUMPI INVALID JUMPDEST DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF7C DUP7 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF83 JUMPI INVALID JUMPDEST DIV PUSH2 0x222E JUMP JUMPDEST SWAP9 POP JUMPDEST PUSH1 0x0 DUP10 GT PUSH2 0xFCB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x236B PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFD5 DUP11 DUP11 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xFE1 DUP7 DUP7 DUP11 DUP11 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x1011 JUMPI PUSH1 0x8 SLOAD PUSH2 0x100D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP2 MLOAD CALLER SWAP3 PUSH32 0x4C209B5FC8AD50758F13E2E1088BA56A560DFF690A1C6FEF26394F4C03821C4F SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP SWAP5 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xB SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x10D7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0x10E7 PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP5 SWAP7 POP SWAP3 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP4 SWAP2 AND SWAP2 PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1143 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1157 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x116D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ADDRESS PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0x1204 DUP9 DUP9 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x121B DUP5 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x1222 JUMPI INVALID JUMPDEST DIV SWAP11 POP DUP1 PUSH2 0x1236 DUP5 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x123D JUMPI INVALID JUMPDEST DIV SWAP10 POP PUSH1 0x0 DUP12 GT DUP1 ISZERO PUSH2 0x1250 JUMPI POP PUSH1 0x0 DUP11 GT JUMPDEST PUSH2 0x128B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2401 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1295 ADDRESS DUP5 PUSH2 0x2246 JUMP JUMPDEST PUSH2 0x12A0 DUP8 DUP14 DUP14 PUSH2 0x1A3F JUMP JUMPDEST PUSH2 0x12AB DUP7 DUP14 DUP13 PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1305 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x131B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1367 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x137B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP PUSH2 0x13A1 DUP6 DUP6 DUP12 DUP12 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x13D1 JUMPI PUSH1 0x8 SLOAD PUSH2 0x13CD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP13 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND SWAP3 CALLER SWAP3 PUSH32 0xDCCD412F0B1252819CB1FD330B93224CA42612892BB3F4F789976E6D81936496 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP POP POP POP POP POP PUSH1 0x1 PUSH1 0xD DUP2 SWAP1 SSTORE POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x445853 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST PUSH2 0x3E8 DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x14AD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP5 SWAP1 SWAP4 AND SWAP3 PUSH2 0x155C SWAP3 DUP6 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 DUP6 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1533 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1549 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x15C3 SWAP3 DUP5 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST TIMESTAMP DUP5 LT ISZERO PUSH2 0x1637 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x11161CDDD85C115490CC8C0E8811561412549151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP12 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP6 ADD DUP3 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x102 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH2 0x122 DUP1 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP7 ADD DUP7 MSTORE PUSH2 0x142 DUP5 ADD DUP1 DUP3 MSTORE DUP7 MLOAD SWAP7 DUP4 ADD SWAP7 SWAP1 SWAP7 KECCAK256 SWAP6 DUP4 SWAP1 MSTORE PUSH2 0x162 DUP5 ADD DUP1 DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0xFF DUP10 AND PUSH2 0x182 DUP6 ADD MSTORE PUSH2 0x1A2 DUP5 ADD DUP9 SWAP1 MSTORE PUSH2 0x1C2 DUP5 ADD DUP8 SWAP1 MSTORE MLOAD SWAP2 SWAP4 SWAP3 PUSH2 0x1E2 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1752 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1788 JUMPI POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x17D9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617045524332303A20494E56414C49445F5349474E41545552450000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x17E4 DUP10 DUP10 DUP10 PUSH2 0x1E52 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1846 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3E8 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x18A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A20464F5242494444454E5F46454500000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x1928 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x1A38 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1979 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x198D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x19A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A04 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x1 PUSH1 0xD SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH32 0x7472616E7366657228616464726573732C75696E743235362900000000000000 PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP7 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP5 MSTORE SWAP2 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP2 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1AEC JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1ACD JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1B4E JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1B53 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x1B81 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x1B81 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x1BD2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A205452414E534645525F4641494C45440000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0x1BF4 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0x1BF1 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 GT DUP1 ISZERO SWAP1 PUSH2 0x1CAA JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 GT ISZERO JUMPDEST PUSH2 0x1CF2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x445873776170506169723A204F564552464C4F57 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH4 0xFFFFFFFF TIMESTAMP DUP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV DUP2 AND DUP3 SUB SWAP1 DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1D22 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 AND ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1D36 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1DA7 JUMPI DUP1 PUSH4 0xFFFFFFFF AND PUSH2 0x1D64 DUP6 PUSH2 0x1D4F DUP7 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x22F6 AND JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE PUSH4 0xFFFFFFFF DUP2 AND PUSH2 0x1D8F DUP5 PUSH2 0x1D4F DUP8 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP9 DUP2 AND SWAP2 SWAP1 SWAP2 OR PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x70 SHL NOT AND PUSH1 0x1 PUSH1 0x70 SHL DUP9 DUP4 AND DUP2 MUL SWAP2 SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0xE0 SHL PUSH4 0xFFFFFFFF DUP8 AND MUL OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP4 DIV SWAP1 SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x1C411E9A96E071241C2F21F7726B17AE89E3CAB4C78BE50E062B03A9FFFBBAD1 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1EDD SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x1F12 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17E7E58 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1FE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x17FB8215 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2FF7042A SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2036 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x204A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2060 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO DUP1 ISZERO SWAP6 POP SWAP2 SWAP3 POP SWAP1 PUSH2 0x2131 JUMPI DUP1 ISZERO PUSH2 0x212C JUMPI PUSH1 0x0 PUSH2 0x20A3 PUSH2 0xF24 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 DUP2 AND SWAP1 DUP10 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x20B0 DUP4 PUSH2 0x2146 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x2129 JUMPI PUSH1 0x0 PUSH2 0x20DE PUSH2 0x20CF DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2105 DUP4 PUSH2 0x20F9 DUP7 PUSH1 0xFF DUP11 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0x2112 JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 ISZERO PUSH2 0x2125 JUMPI PUSH2 0x2125 DUP9 DUP3 PUSH2 0x2198 JUMP JUMPDEST POP POP POP JUMPDEST POP POP JUMPDEST PUSH2 0x213D JUMP JUMPDEST DUP1 ISZERO PUSH2 0x213D JUMPI PUSH1 0x0 PUSH1 0xB SSTORE JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 GT ISZERO PUSH2 0x2189 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x2 DUP3 DIV ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2183 JUMPI DUP1 SWAP2 POP PUSH1 0x2 DUP2 DUP3 DUP6 DUP2 PUSH2 0x2172 JUMPI INVALID JUMPDEST DIV ADD DUP2 PUSH2 0x217B JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x215B JUMP JUMPDEST POP PUSH2 0x2193 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2193 JUMPI POP PUSH1 0x1 JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x21AB SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x21D6 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x223D JUMPI DUP2 PUSH2 0x223F JUMP JUMPDEST DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x226F SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SLOAD PUSH2 0x229C SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH1 0x1 PUSH1 0x70 SHL MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP5 AND DUP2 PUSH2 0x2313 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F 0x4D 0x49 0x4E SLOAD GASLIMIT DIFFICULTY DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4F SSTORE SLOAD POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x49 0x4E POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F TIMESTAMP SSTORE MSTORE 0x4E GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 0xBC SWAP15 MSTORE 0xC6 0x22 0xA7 RETURN PUSH25 0xA026EE16432D9BBC35CC0DB3D76CFAFD5D67631F595A9B1864 PUSH20 0x6F6C63430005100032454950373132446F6D6169 PUSH15 0x28737472696E67206E616D652C7374 PUSH19 0x696E672076657273696F6E2C75696E74323536 KECCAK256 PUSH4 0x6861696E 0x49 PUSH5 0x2C61646472 PUSH6 0x737320766572 PUSH10 0x6679696E67436F6E7472 PUSH2 0x6374 0x29 DIFFICULTY PC PUSH20 0x776170466163746F72793A204944454E54494341 0x4C 0x5F COINBASE DIFFICULTY DIFFICULTY MSTORE GASLIMIT MSTORE8 MSTORE8 GASLIMIT MSTORE8 LOG2 PUSH6 0x627A7A723158 KECCAK256 0xC6 STATICCALL PUSH18 0xEFA4F71DF9B005295F714D02CCCF70F7F9C PUSH28 0xC282FCA1F7F11487DA9064736F6C6343000510003200000000000000 ", - "sourceMap": "96:2445:2:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;96:2445:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;143:20;;;:::i;:::-;;;;-1:-1:-1;;;;;143:20:2;;;;;;;;;;;;;;169:26;;;:::i;455:25::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;455:25:2;;:::i;201:39::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2061:279;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2061:279:2;;;;:::i;:::-;;669:94;;;:::i;:::-;;;;;;;;;;;;;;;;276:104;;;:::i;2350:189::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2350:189:2;;-1:-1:-1;;;;;2350:189:2;;;;;;;;:::i;1881:170::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1881:170:2;-1:-1:-1;;;;;1881:170:2;;:::i;769:954::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;769:954:2;;;;;;;;;;:::i;387:62::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;387:62:2;;;;;;;;;;:::i;1729:146::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1729:146:2;-1:-1:-1;;;;;1729:146:2;;:::i;143:20::-;;;-1:-1:-1;;;;;143:20:2;;:::o;169:26::-;;;-1:-1:-1;;;;;169:26:2;;:::o;455:25::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;455:25:2;;-1:-1:-1;455:25:2;:::o;201:39::-;;;-1:-1:-1;;;201:39:2;;;;;:::o;2061:279::-;2157:11;;-1:-1:-1;;;;;2157:11:2;2143:10;:25;2135:62;;;;;-1:-1:-1;;;2135:62:2;;;;;;;;;;;;-1:-1:-1;;;2135:62:2;;;;;;;;;;;;;;;2241:1;2215:23;:27;;;2207:68;;;;;-1:-1:-1;;;2207:68:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;2285:22;:48;;;;;;;-1:-1:-1;;;2285:48:2;-1:-1:-1;;;;2285:48:2;;;;;;;;;2061:279::o;669:94::-;741:8;:15;669:94;:::o;276:104::-;349:29;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;87:2;83:7;78:2;73:3;69:12;65:26;61:2;54:38;349:29:2;332:47;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;332:47:2;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;332:47:2;;;322:58;;;;;;276:104;:::o;2350:189::-;2443:11;;-1:-1:-1;;;;;2443:11:2;2429:10;:25;2421:62;;;;;-1:-1:-1;;;2421:62:2;;;;;;;;;;;;-1:-1:-1;;;2421:62:2;;;;;;;;;;;;;;;2493:39;;;-1:-1:-1;;;2493:39:2;;;;;;;;;;;-1:-1:-1;;;;;2493:29:2;;;-1:-1:-1;;2493:39:2;;;;;-1:-1:-1;;2493:39:2;;;;;;;-1:-1:-1;2493:29:2;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;2493:39:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2493:39:2;;;;2350:189;;:::o;1881:170::-;1968:11;;-1:-1:-1;;;;;1968:11:2;1954:10;:25;1946:62;;;;;-1:-1:-1;;;1946:62:2;;;;;;;;;;;;-1:-1:-1;;;1946:62:2;;;;;;;;;;;;;;;2018:11;:26;;-1:-1:-1;;;;;;2018:26:2;-1:-1:-1;;;;;2018:26:2;;;;;;;;;;1881:170::o;769:954::-;839:12;-1:-1:-1;;;;;871:16:2;;;;;;;;863:63;;;;-1:-1:-1;;;863:63:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;937:14;;-1:-1:-1;;;;;971:15:2;;;;;;;:53;;1009:6;1017;971:53;;;990:6;998;971:53;936:88;;-1:-1:-1;936:88:2;-1:-1:-1;;;;;;1042:20:2;;1034:60;;;;;-1:-1:-1;;;1034:60:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1112:15:2;;;1147:1;1112:15;;;:7;:15;;;;;;;;:23;;;;;;;;;;;;:37;1104:76;;;;;-1:-1:-1;;;1104:76:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;1220:21;1244:29;;;;;;;;:::i;:::-;-1:-1:-1;;21:26;;;;;7:41;;87:2;69:12;;;65:26;61:2;54:38;;;-1:-1;;1308:32:2;;;;;;41:4:-1;1308:32:2;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;1308:32:2;;;;;;;1298:43;;;;;;;;;1412:15;;34:5:-1;;-1:-1;1298:43:2;;;30:16:-1;;1283:12:2;1382:52;1453:44;;;-1:-1:-1;;;1453:44:2;;-1:-1:-1;;;;;1453:44:2;;;;;;;;;;;;;;;;1374:60;;-1:-1:-1;1453:28:2;;;;-1:-1:-1;;1453:44:2;;;;;-1:-1:-1;;1453:44:2;;;;;;;;-1:-1:-1;1453:28:2;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;1453:44:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;;;;;;1507:15:2;;;;;;;:7;:15;;;;;;;;:23;;;;;;;;;;;;:30;;;;;-1:-1:-1;;;;;;1507:30:2;;;;;;;;1547:15;;;;;;:23;;;;;;;;:30;;;;;;;;1632:8;27:10:-1;;-1:-1;23:18;;45:23;;1632:19:2;;;;;;;;;;;;;;;;;;1700:15;;1666:50;;;;;;;;;;;;;;;;;;;;;;769:954;;;;;;;;:::o;387:62::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;387:62:2;;:::o;1729:146::-;1804:11;;-1:-1:-1;;;;;1804:11:2;1790:10;:25;1782:62;;;;;-1:-1:-1;;;1782:62:2;;;;;;;;;;;;-1:-1:-1;;;1782:62:2;;;;;;;;;;;;;;;1854:5;:14;;-1:-1:-1;;;;;;1854:14:2;-1:-1:-1;;;;;1854:14:2;;;;;;;;;;1729:146::o;96:2445::-;;;;;;;;:::o" - } - }, - "interface": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_feeToSetter", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token0", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token1", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "pair", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "PairCreated", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "INIT_CODE_PAIR_HASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "allPairs", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "allPairsLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "tokenA", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenB", - "type": "address" - } - ], - "name": "createPair", - "outputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "feeTo", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "feeToSetter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "getPair", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "protocolFeeDenominator", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "_feeTo", - "type": "address" - } - ], - "name": "setFeeTo", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "_feeToSetter", - "type": "address" - } - ], - "name": "setFeeToSetter", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint8", - "name": "_protocolFeeDenominator", - "type": "uint8" - } - ], - "name": "setProtocolFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "_pair", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_swapFee", - "type": "uint32" - } - ], - "name": "setSwapFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "60806040526001805460ff60a01b1916600960a01b17905534801561002357600080fd5b50604051612f9c380380612f9c8339818101604052602081101561004657600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055612f26806100766000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80635855a25a116100715780635855a25a1461015c5780639e68ceb814610164578063a2e74af614610196578063c9c65396146101bc578063e6a43905146101ea578063f46901ed14610218576100b4565b8063017e7e58146100b9578063094b7415146100dd5780631e3dd18b146100e55780632ff7042a146101025780634e91f81114610120578063574f2ba314610142575b600080fd5b6100c161023e565b604080516001600160a01b039092168252519081900360200190f35b6100c161024d565b6100c1600480360360208110156100fb57600080fd5b503561025c565b61010a610283565b6040805160ff9092168252519081900360200190f35b6101406004803603602081101561013657600080fd5b503560ff16610293565b005b61014a610365565b60408051918252519081900360200190f35b61014a61036b565b6101406004803603604081101561017a57600080fd5b5080356001600160a01b0316906020013563ffffffff166103fe565b610140600480360360208110156101ac57600080fd5b50356001600160a01b03166104c1565b6100c1600480360360408110156101d257600080fd5b506001600160a01b038135811691602001351661053d565b6100c16004803603604081101561020057600080fd5b506001600160a01b038135811691602001351661085f565b6101406004803603602081101561022e57600080fd5b50356001600160a01b0316610885565b6000546001600160a01b031681565b6001546001600160a01b031681565b6003818154811061026957fe5b6000918252602090912001546001600160a01b0316905081565b600154600160a01b900460ff1681565b6001546001600160a01b031633146102ed576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b60008160ff1611610345576040805162461bcd60e51b815260206004820152601c60248201527f445873776170466163746f72793a20464f5242494444454e5f46454500000000604482015290519081900360640190fd5b6001805460ff909216600160a01b0260ff60a01b19909216919091179055565b60035490565b60405161037a60208201610901565b6020820181038252601f19601f820116604052506040516020018082805190602001908083835b602083106103c05780518252601f1990920191602091820191016103a1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b6001546001600160a01b03163314610458576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b6040805163d6d788c360e01b815263ffffffff8316600482015290516001600160a01b0384169163d6d788c391602480830192600092919082900301818387803b1580156104a557600080fd5b505af11580156104b9573d6000803e3d6000fd5b505050505050565b6001546001600160a01b0316331461051b576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b031614156105905760405162461bcd60e51b8152600401808060200182810382526022815260200180612ed06022913960400191505060405180910390fd5b600080836001600160a01b0316856001600160a01b0316106105b35783856105b6565b84845b90925090506001600160a01b038216610616576040805162461bcd60e51b815260206004820152601b60248201527f445873776170466163746f72793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615610690576040805162461bcd60e51b815260206004820152601a60248201527f445873776170466163746f72793a20504149525f455849535453000000000000604482015290519081900360640190fd5b6060604051806020016106a290610901565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f56040805163485cc95560e01b81526001600160a01b038781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561077557600080fd5b505af1158015610789573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b031633146108df576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6125c18061090f8339019056fe6080604052600c805463ffffffff191660191790556001600d5534801561002557600080fd5b50604051469080605261256f8239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561245e806101116000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429445873776170466163746f72793a204944454e544943414c5f414444524553534553a265627a7a72315820c6fa710efa4f71df9b005295f714d02cccf70f7f9c7bc282fca1f7f11487da9064736f6c63430005100032", - "bin": "60806040526001805460ff60a01b1916600960a01b17905534801561002357600080fd5b50604051612f9c380380612f9c8339818101604052602081101561004657600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055612f26806100766000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80635855a25a116100715780635855a25a1461015c5780639e68ceb814610164578063a2e74af614610196578063c9c65396146101bc578063e6a43905146101ea578063f46901ed14610218576100b4565b8063017e7e58146100b9578063094b7415146100dd5780631e3dd18b146100e55780632ff7042a146101025780634e91f81114610120578063574f2ba314610142575b600080fd5b6100c161023e565b604080516001600160a01b039092168252519081900360200190f35b6100c161024d565b6100c1600480360360208110156100fb57600080fd5b503561025c565b61010a610283565b6040805160ff9092168252519081900360200190f35b6101406004803603602081101561013657600080fd5b503560ff16610293565b005b61014a610365565b60408051918252519081900360200190f35b61014a61036b565b6101406004803603604081101561017a57600080fd5b5080356001600160a01b0316906020013563ffffffff166103fe565b610140600480360360208110156101ac57600080fd5b50356001600160a01b03166104c1565b6100c1600480360360408110156101d257600080fd5b506001600160a01b038135811691602001351661053d565b6100c16004803603604081101561020057600080fd5b506001600160a01b038135811691602001351661085f565b6101406004803603602081101561022e57600080fd5b50356001600160a01b0316610885565b6000546001600160a01b031681565b6001546001600160a01b031681565b6003818154811061026957fe5b6000918252602090912001546001600160a01b0316905081565b600154600160a01b900460ff1681565b6001546001600160a01b031633146102ed576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b60008160ff1611610345576040805162461bcd60e51b815260206004820152601c60248201527f445873776170466163746f72793a20464f5242494444454e5f46454500000000604482015290519081900360640190fd5b6001805460ff909216600160a01b0260ff60a01b19909216919091179055565b60035490565b60405161037a60208201610901565b6020820181038252601f19601f820116604052506040516020018082805190602001908083835b602083106103c05780518252601f1990920191602091820191016103a1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b6001546001600160a01b03163314610458576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b6040805163d6d788c360e01b815263ffffffff8316600482015290516001600160a01b0384169163d6d788c391602480830192600092919082900301818387803b1580156104a557600080fd5b505af11580156104b9573d6000803e3d6000fd5b505050505050565b6001546001600160a01b0316331461051b576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b031614156105905760405162461bcd60e51b8152600401808060200182810382526022815260200180612ed06022913960400191505060405180910390fd5b600080836001600160a01b0316856001600160a01b0316106105b35783856105b6565b84845b90925090506001600160a01b038216610616576040805162461bcd60e51b815260206004820152601b60248201527f445873776170466163746f72793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615610690576040805162461bcd60e51b815260206004820152601a60248201527f445873776170466163746f72793a20504149525f455849535453000000000000604482015290519081900360640190fd5b6060604051806020016106a290610901565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f56040805163485cc95560e01b81526001600160a01b038781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561077557600080fd5b505af1158015610789573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b031633146108df576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6125c18061090f8339019056fe6080604052600c805463ffffffff191660191790556001600d5534801561002557600080fd5b50604051469080605261256f8239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561245e806101116000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429445873776170466163746f72793a204944454e544943414c5f414444524553534553a265627a7a72315820c6fa710efa4f71df9b005295f714d02cccf70f7f9c7bc282fca1f7f11487da9064736f6c63430005100032", - "bin-runtime": "608060405234801561001057600080fd5b50600436106100b45760003560e01c80635855a25a116100715780635855a25a1461015c5780639e68ceb814610164578063a2e74af614610196578063c9c65396146101bc578063e6a43905146101ea578063f46901ed14610218576100b4565b8063017e7e58146100b9578063094b7415146100dd5780631e3dd18b146100e55780632ff7042a146101025780634e91f81114610120578063574f2ba314610142575b600080fd5b6100c161023e565b604080516001600160a01b039092168252519081900360200190f35b6100c161024d565b6100c1600480360360208110156100fb57600080fd5b503561025c565b61010a610283565b6040805160ff9092168252519081900360200190f35b6101406004803603602081101561013657600080fd5b503560ff16610293565b005b61014a610365565b60408051918252519081900360200190f35b61014a61036b565b6101406004803603604081101561017a57600080fd5b5080356001600160a01b0316906020013563ffffffff166103fe565b610140600480360360208110156101ac57600080fd5b50356001600160a01b03166104c1565b6100c1600480360360408110156101d257600080fd5b506001600160a01b038135811691602001351661053d565b6100c16004803603604081101561020057600080fd5b506001600160a01b038135811691602001351661085f565b6101406004803603602081101561022e57600080fd5b50356001600160a01b0316610885565b6000546001600160a01b031681565b6001546001600160a01b031681565b6003818154811061026957fe5b6000918252602090912001546001600160a01b0316905081565b600154600160a01b900460ff1681565b6001546001600160a01b031633146102ed576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b60008160ff1611610345576040805162461bcd60e51b815260206004820152601c60248201527f445873776170466163746f72793a20464f5242494444454e5f46454500000000604482015290519081900360640190fd5b6001805460ff909216600160a01b0260ff60a01b19909216919091179055565b60035490565b60405161037a60208201610901565b6020820181038252601f19601f820116604052506040516020018082805190602001908083835b602083106103c05780518252601f1990920191602091820191016103a1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b6001546001600160a01b03163314610458576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b6040805163d6d788c360e01b815263ffffffff8316600482015290516001600160a01b0384169163d6d788c391602480830192600092919082900301818387803b1580156104a557600080fd5b505af11580156104b9573d6000803e3d6000fd5b505050505050565b6001546001600160a01b0316331461051b576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b031614156105905760405162461bcd60e51b8152600401808060200182810382526022815260200180612ed06022913960400191505060405180910390fd5b600080836001600160a01b0316856001600160a01b0316106105b35783856105b6565b84845b90925090506001600160a01b038216610616576040805162461bcd60e51b815260206004820152601b60248201527f445873776170466163746f72793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615610690576040805162461bcd60e51b815260206004820152601a60248201527f445873776170466163746f72793a20504149525f455849535453000000000000604482015290519081900360640190fd5b6060604051806020016106a290610901565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f56040805163485cc95560e01b81526001600160a01b038781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561077557600080fd5b505af1158015610789573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b031633146108df576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6125c18061090f8339019056fe6080604052600c805463ffffffff191660191790556001600d5534801561002557600080fd5b50604051469080605261256f8239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561245e806101116000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429445873776170466163746f72793a204944454e544943414c5f414444524553534553a265627a7a72315820c6fa710efa4f71df9b005295f714d02cccf70f7f9c7bc282fca1f7f11487da9064736f6c63430005100032", - "srcmap": "96:2445:2:-;;;201:39;;;-1:-1:-1;;;;201:39:2;-1:-1:-1;;;201:39:2;;;579:84;5:2:-1;;;;30:1;27;20:12;5:2;579:84:2;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;579:84:2;630:11;:26;;-1:-1:-1;;;;;;630:26:2;-1:-1:-1;;;;;630:26:2;;;;;;;;;-1:-1:-1;;96:2445:2;-1:-1:-1;96:2445:2;;", - "srcmap-runtime": "96:2445:2:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;96:2445:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;143:20;;;:::i;:::-;;;;-1:-1:-1;;;;;143:20:2;;;;;;;;;;;;;;169:26;;;:::i;455:25::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;455:25:2;;:::i;201:39::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2061:279;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2061:279:2;;;;:::i;:::-;;669:94;;;:::i;:::-;;;;;;;;;;;;;;;;276:104;;;:::i;2350:189::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2350:189:2;;-1:-1:-1;;;;;2350:189:2;;;;;;;;:::i;1881:170::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1881:170:2;-1:-1:-1;;;;;1881:170:2;;:::i;769:954::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;769:954:2;;;;;;;;;;:::i;387:62::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;387:62:2;;;;;;;;;;:::i;1729:146::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1729:146:2;-1:-1:-1;;;;;1729:146:2;;:::i;143:20::-;;;-1:-1:-1;;;;;143:20:2;;:::o;169:26::-;;;-1:-1:-1;;;;;169:26:2;;:::o;455:25::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;455:25:2;;-1:-1:-1;455:25:2;:::o;201:39::-;;;-1:-1:-1;;;201:39:2;;;;;:::o;2061:279::-;2157:11;;-1:-1:-1;;;;;2157:11:2;2143:10;:25;2135:62;;;;;-1:-1:-1;;;2135:62:2;;;;;;;;;;;;-1:-1:-1;;;2135:62:2;;;;;;;;;;;;;;;2241:1;2215:23;:27;;;2207:68;;;;;-1:-1:-1;;;2207:68:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;2285:22;:48;;;;;;;-1:-1:-1;;;2285:48:2;-1:-1:-1;;;;2285:48:2;;;;;;;;;2061:279::o;669:94::-;741:8;:15;669:94;:::o;276:104::-;349:29;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;87:2;83:7;78:2;73:3;69:12;65:26;61:2;54:38;349:29:2;332:47;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;332:47:2;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;332:47:2;;;322:58;;;;;;276:104;:::o;2350:189::-;2443:11;;-1:-1:-1;;;;;2443:11:2;2429:10;:25;2421:62;;;;;-1:-1:-1;;;2421:62:2;;;;;;;;;;;;-1:-1:-1;;;2421:62:2;;;;;;;;;;;;;;;2493:39;;;-1:-1:-1;;;2493:39:2;;;;;;;;;;;-1:-1:-1;;;;;2493:29:2;;;-1:-1:-1;;2493:39:2;;;;;-1:-1:-1;;2493:39:2;;;;;;;-1:-1:-1;2493:29:2;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;2493:39:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2493:39:2;;;;2350:189;;:::o;1881:170::-;1968:11;;-1:-1:-1;;;;;1968:11:2;1954:10;:25;1946:62;;;;;-1:-1:-1;;;1946:62:2;;;;;;;;;;;;-1:-1:-1;;;1946:62:2;;;;;;;;;;;;;;;2018:11;:26;;-1:-1:-1;;;;;;2018:26:2;-1:-1:-1;;;;;2018:26:2;;;;;;;;;;1881:170::o;769:954::-;839:12;-1:-1:-1;;;;;871:16:2;;;;;;;;863:63;;;;-1:-1:-1;;;863:63:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;937:14;;-1:-1:-1;;;;;971:15:2;;;;;;;:53;;1009:6;1017;971:53;;;990:6;998;971:53;936:88;;-1:-1:-1;936:88:2;-1:-1:-1;;;;;;1042:20:2;;1034:60;;;;;-1:-1:-1;;;1034:60:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1112:15:2;;;1147:1;1112:15;;;:7;:15;;;;;;;;:23;;;;;;;;;;;;:37;1104:76;;;;;-1:-1:-1;;;1104:76:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;1220:21;1244:29;;;;;;;;:::i;:::-;-1:-1:-1;;21:26;;;;;7:41;;87:2;69:12;;;65:26;61:2;54:38;;;-1:-1;;1308:32:2;;;;;;41:4:-1;1308:32:2;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;1308:32:2;;;;;;;1298:43;;;;;;;;;1412:15;;34:5:-1;;-1:-1;1298:43:2;;;30:16:-1;;1283:12:2;1382:52;1453:44;;;-1:-1:-1;;;1453:44:2;;-1:-1:-1;;;;;1453:44:2;;;;;;;;;;;;;;;;1374:60;;-1:-1:-1;1453:28:2;;;;-1:-1:-1;;1453:44:2;;;;;-1:-1:-1;;1453:44:2;;;;;;;;-1:-1:-1;1453:28:2;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;1453:44:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;;;;;;1507:15:2;;;;;;;:7;:15;;;;;;;;:23;;;;;;;;;;;;:30;;;;;-1:-1:-1;;;;;;1507:30:2;;;;;;;;1547:15;;;;;;:23;;;;;;;;:30;;;;;;;;1632:8;27:10:-1;;-1:-1;23:18;;45:23;;1632:19:2;;;;;;;;;;;;;;;;;;1700:15;;1666:50;;;;;;;;;;;;;;;;;;;;;;769:954;;;;;;;;:::o;387:62::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;387:62:2;;:::o;1729:146::-;1804:11;;-1:-1:-1;;;;;1804:11:2;1790:10;:25;1782:62;;;;;-1:-1:-1;;;1782:62:2;;;;;;;;;;;;-1:-1:-1;;;1782:62:2;;;;;;;;;;;;;;;1854:5;:14;;-1:-1:-1;;;;;;1854:14:2;-1:-1:-1;;;;;1854:14:2;;;;;;;;;;1729:146::o;96:2445::-;;;;;;;;:::o" - }, - "contracts/DXswapFeeReceiver.sol:DXswapFeeReceiver": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_factory", - "type": "address" - }, - { - "internalType": "address", - "name": "_WETH", - "type": "address" - }, - { - "internalType": "address", - "name": "_ethReceiver", - "type": "address" - }, - { - "internalType": "address", - "name": "_fallbackReceiver", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "payable": true, - "stateMutability": "payable", - "type": "fallback" - }, - { - "constant": true, - "inputs": [], - "name": "WETH", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "_ethReceiver", - "type": "address" - }, - { - "internalType": "address", - "name": "_fallbackReceiver", - "type": "address" - } - ], - "name": "changeReceivers", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "ethReceiver", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "contract IDXswapFactory", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "fallbackReceiver", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "contract IDXswapPair[]", - "name": "pairs", - "type": "address[]" - } - ], - "name": "takeProtocolFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50604051611179380380611179833981810160405260a081101561003357600080fd5b508051602082015160408301516060840151608090940151600080546001600160a01b039586166001600160a01b031991821617909155600180549486169482169490941790935560028054928516928416929092179091556003805494841694831694909417909355600480549290931691161790556110c0806100b96000396000f3fe60806040526004361061007b5760003560e01c8063c1f4381d1161004e578063c1f4381d14610155578063c45a015514610190578063f2269521146101a5578063f2fde38b146101ba5761007b565b80635cb9c4ec1461007d5780638da5cb5b146100fa578063ad5c46481461012b578063b988847214610140575b005b34801561008957600080fd5b5061007b600480360360208110156100a057600080fd5b8101906020810181356401000000008111156100bb57600080fd5b8201836020820111156100cd57600080fd5b803590602001918460208302840111640100000000831117156100ef57600080fd5b5090925090506101ed565b34801561010657600080fd5b5061010f610511565b604080516001600160a01b039092168252519081900360200190f35b34801561013757600080fd5b5061010f610520565b34801561014c57600080fd5b5061010f61052f565b34801561016157600080fd5b5061007b6004803603604081101561017857600080fd5b506001600160a01b038135811691602001351661053e565b34801561019c57600080fd5b5061010f6105cb565b3480156101b157600080fd5b5061010f6105da565b3480156101c657600080fd5b5061007b600480360360208110156101dd57600080fd5b50356001600160a01b03166105e9565b60005b8181101561050c57600083838381811061020657fe5b905060200201356001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561024e57600080fd5b505afa158015610262573d6000803e3d6000fd5b505050506040513d602081101561027857600080fd5b50519050600084848481811061028a57fe5b905060200201356001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156102d257600080fd5b505afa1580156102e6573d6000803e3d6000fd5b505050506040513d60208110156102fc57600080fd5b5051905084848481811061030c57fe5b905060200201356001600160a01b03166001600160a01b031663a9059cbb86868681811061033657fe5b905060200201356001600160a01b031687878781811061035257fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561039e57600080fd5b505afa1580156103b2573d6000803e3d6000fd5b505050506040513d60208110156103c857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561041957600080fd5b505af115801561042d573d6000803e3d6000fd5b505050506040513d602081101561044357600080fd5b50600090508086868681811061045557fe5b6040805163226bf2d160e21b8152306004820152815160209390930294909401356001600160a01b0316936389afcb449350602480820193918290030181600087803b1580156104a457600080fd5b505af11580156104b8573d6000803e3d6000fd5b505050506040513d60408110156104ce57600080fd5b508051602090910151909250905081156104ec576104ec848361066a565b80156104fc576104fc838261066a565b5050600190920191506101f09050565b505050565b6000546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b031681565b6000546001600160a01b0316331461059d576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6001546001600160a01b031681565b6004546001600160a01b031681565b6000546001600160a01b03163314610648576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03838116911614156107015760025460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b50506003546106fc92506001600160a01b031690508261074c565b610748565b6002546107219061071c9084906001600160a01b031661083f565b6108fe565b15610730576106fc8183610904565b6004546107489083906001600160a01b031683610cc9565b5050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106107985780518252601f199092019160209182019101610779565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146107fa576040519150601f19603f3d011682016040523d82523d6000602084013e6107ff565b606091505b505090508061050c5760405162461bcd60e51b81526004018080602001828103825260238152602001806110696023913960400191505060405180910390fd5b600080600061084e8585610e33565b600154604080516bffffffffffffffffffffffff19606095861b811660208084019190915294861b81166034830152825160288184030181526048830184528051908601206001600160f81b031960688401529390951b9094166069850152607d8401919091527fd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776609d808501919091528151808503909101815260bd9093019052815191012095945050505050565b3b151590565b60025460009061091e9083906001600160a01b031661083f565b9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561095c57600080fd5b505afa158015610970573d6000803e3d6000fd5b505050506040513d606081101561098657600080fd5b5080516020909101516002546dffffffffffffffffffffffffffff92831694509116915060009081906001600160a01b03908116908716106109c95782846109cc565b83835b915091506000821180156109e05750600081115b610a1b5760405162461bcd60e51b815260040180806020018281038252602981526020018061101a6029913960400191505060405180910390fd5b6000610aa8610a9b876001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5c57600080fd5b505afa158015610a70573d6000803e3d6000fd5b505050506040513d6020811015610a8657600080fd5b50516127109063ffffffff90811690610f1116565b899063ffffffff610f6716565b90506000610abc828463ffffffff610f6716565b90506000610ae283610ad68761271063ffffffff610f6716565b9063ffffffff610fca16565b90506000818381610aef57fe5b049050610afd8a8a8d610cc9565b60025460009081906001600160a01b03908116908d1610610b2057826000610b24565b6000835b915091508a6001600160a01b031663022c0d9f83833060006040519080825280601f01601f191660200182016040528015610b66576020820181803883390190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610bd7578181015183820152602001610bbf565b50505050905090810190601f168015610c045780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610c2657600080fd5b505af1158015610c3a573d6000803e3d6000fd5b505060025460408051632e1a7d4d60e01b81526004810188905290516001600160a01b039092169350632e1a7d4d925060248082019260009290919082900301818387803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b5050600354610cba92506001600160a01b031690508461074c565b50505050505050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310610d465780518252601f199092019160209182019101610d27565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610da8576040519150601f19603f3d011682016040523d82523d6000602084013e610dad565b606091505b5091509150818015610ddb575080511580610ddb5750808060200190516020811015610dd857600080fd5b50515b610e2c576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b600080826001600160a01b0316846001600160a01b03161415610e875760405162461bcd60e51b81526004018080602001828103825260268152602001806110436026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610610ea7578284610eaa565b83835b90925090506001600160a01b038216610f0a576040805162461bcd60e51b815260206004820152601f60248201527f44587377617046656552656365697665723a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b80820382811115610f61576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b92915050565b6000811580610f8257505080820282828281610f7f57fe5b04145b610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe44587377617046656552656365697665723a20494e53554646494349454e545f4c495155494449545944587377617046656552656365697665723a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158204488a5c6d24546776395f2d8e5b107b99bb124fd814a71281fc10579ac69368864736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1179 CODESIZE SUB DUP1 PUSH2 0x1179 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x80 SWAP1 SWAP5 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP5 DUP7 AND SWAP5 DUP3 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 DUP6 AND SWAP3 DUP5 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP5 DUP5 AND SWAP5 DUP4 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE PUSH1 0x4 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH2 0x10C0 DUP1 PUSH2 0xB9 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC1F4381D GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xC1F4381D EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0xF2269521 EQ PUSH2 0x1A5 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1BA JUMPI PUSH2 0x7B JUMP JUMPDEST DUP1 PUSH4 0x5CB9C4EC EQ PUSH2 0x7D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0xAD5C4648 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0xB9888472 EQ PUSH2 0x140 JUMPI JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x106 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x511 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x520 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x52F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x53E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x19C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x5CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x5DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5E9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x50C JUMPI PUSH1 0x0 DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0x206 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x262 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x28A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x30C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP7 DUP7 DUP7 DUP2 DUP2 LT PUSH2 0x336 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP8 DUP8 DUP2 DUP2 LT PUSH2 0x352 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x20 SWAP3 DUP4 MUL SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH4 0x70A08231 SWAP4 POP PUSH1 0x24 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x39E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP7 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x419 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x42D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x443 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP1 POP DUP1 DUP7 DUP7 DUP7 DUP2 DUP2 LT PUSH2 0x455 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x226BF2D1 PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 MUL SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH4 0x89AFCB44 SWAP4 POP PUSH1 0x24 DUP1 DUP3 ADD SWAP4 SWAP2 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4B8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP DUP2 ISZERO PUSH2 0x4EC JUMPI PUSH2 0x4EC DUP5 DUP4 PUSH2 0x66A JUMP JUMPDEST DUP1 ISZERO PUSH2 0x4FC JUMPI PUSH2 0x4FC DUP4 DUP3 PUSH2 0x66A JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 POP PUSH2 0x1F0 SWAP1 POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x59D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A20464F5242494444454E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x4 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x648 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A20464F5242494444454E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x701 JUMPI PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2E1A7D4D SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6E1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x3 SLOAD PUSH2 0x6FC SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP3 PUSH2 0x74C JUMP JUMPDEST PUSH2 0x748 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x721 SWAP1 PUSH2 0x71C SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x83F JUMP JUMPDEST PUSH2 0x8FE JUMP JUMPDEST ISZERO PUSH2 0x730 JUMPI PUSH2 0x6FC DUP2 DUP4 PUSH2 0x904 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x748 SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH2 0xCC9 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP4 SWAP1 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x798 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x779 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x7FA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x7FF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x50C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1069 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x84E DUP6 DUP6 PUSH2 0xE33 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH1 0x60 SWAP6 DUP7 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP5 DUP7 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP7 ADD KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT PUSH1 0x68 DUP5 ADD MSTORE SWAP4 SWAP1 SWAP6 SHL SWAP1 SWAP5 AND PUSH1 0x69 DUP6 ADD MSTORE PUSH1 0x7D DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xD306A548755B9295EE49CC729E13CA4A45E00199BBD890FA146DA43A50571776 PUSH1 0x9D DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP4 ADD SWAP1 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x91E SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x83F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x970 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x986 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x2 SLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP5 POP SWAP2 AND SWAP2 POP PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP8 AND LT PUSH2 0x9C9 JUMPI DUP3 DUP5 PUSH2 0x9CC JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 GT DUP1 ISZERO PUSH2 0x9E0 JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST PUSH2 0xA1B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x101A PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAA8 PUSH2 0xA9B DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x54CF2AEB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA70 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x2710 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0xF11 AND JUMP JUMPDEST DUP10 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xABC DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xAE2 DUP4 PUSH2 0xAD6 DUP8 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xFCA AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0xAEF JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0xAFD DUP11 DUP11 DUP14 PUSH2 0xCC9 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP14 AND LT PUSH2 0xB20 JUMPI DUP3 PUSH1 0x0 PUSH2 0xB24 JUMP JUMPDEST PUSH1 0x0 DUP4 JUMPDEST SWAP2 POP SWAP2 POP DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x22C0D9F DUP4 DUP4 ADDRESS PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB66 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xBD7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xBBF JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xC04 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC3A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP4 POP PUSH4 0x2E1A7D4D SWAP3 POP PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC9F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x3 SLOAD PUSH2 0xCBA SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP5 PUSH2 0x74C JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP3 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 SWAP4 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xD46 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xD27 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xDA8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xDAD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0xDDB JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0xDDB JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0xE2C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E7366657248656C7065723A205452414E534645525F4641494C454400 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xE87 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1043 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0xEA7 JUMPI DUP3 DUP5 PUSH2 0xEAA JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xF0A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A205A45524F5F4144445245535300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0xF82 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0xF7F JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID DIFFICULTY PC PUSH20 0x77617046656552656365697665723A20494E5355 CHAINID CHAINID 0x49 NUMBER 0x49 GASLIMIT 0x4E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE DIFFICULTY PC PUSH20 0x77617046656552656365697665723A204944454E SLOAD 0x49 NUMBER COINBASE 0x4C 0x5F COINBASE DIFFICULTY DIFFICULTY MSTORE GASLIMIT MSTORE8 MSTORE8 GASLIMIT MSTORE8 SLOAD PUSH19 0x616E7366657248656C7065723A204554485F54 MSTORE COINBASE 0x4E MSTORE8 CHAINID GASLIMIT MSTORE 0x5F CHAINID COINBASE 0x49 0x4C GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 DIFFICULTY DUP9 0xA5 0xC6 0xD2 GASLIMIT CHAINID PUSH24 0x6395F2D8E5B107B99BB124FD814A71281FC10579AC693688 PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ", - "sourceMap": "218:5003:3:-;;;437:310;8:9:-1;5:2;;;30:1;27;20:12;5:2;437:310:3;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;437:310:3;;;;;;;;;;;;;;;;;;;578:5;:14;;-1:-1:-1;;;;;;578:14:3;;;-1:-1:-1;;;;;578:14:3;;;;;;-1:-1:-1;602:34:3;;;;;;;;;;;;;;646:4;:12;;;;;;;;;;;;;;668:11;:26;;;;;;;;;;;;;;704:16;:36;;;;;;;;;;;;;;;-1:-1:-1;;;;218:5003:3;;;;" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "60806040526004361061007b5760003560e01c8063c1f4381d1161004e578063c1f4381d14610155578063c45a015514610190578063f2269521146101a5578063f2fde38b146101ba5761007b565b80635cb9c4ec1461007d5780638da5cb5b146100fa578063ad5c46481461012b578063b988847214610140575b005b34801561008957600080fd5b5061007b600480360360208110156100a057600080fd5b8101906020810181356401000000008111156100bb57600080fd5b8201836020820111156100cd57600080fd5b803590602001918460208302840111640100000000831117156100ef57600080fd5b5090925090506101ed565b34801561010657600080fd5b5061010f610511565b604080516001600160a01b039092168252519081900360200190f35b34801561013757600080fd5b5061010f610520565b34801561014c57600080fd5b5061010f61052f565b34801561016157600080fd5b5061007b6004803603604081101561017857600080fd5b506001600160a01b038135811691602001351661053e565b34801561019c57600080fd5b5061010f6105cb565b3480156101b157600080fd5b5061010f6105da565b3480156101c657600080fd5b5061007b600480360360208110156101dd57600080fd5b50356001600160a01b03166105e9565b60005b8181101561050c57600083838381811061020657fe5b905060200201356001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561024e57600080fd5b505afa158015610262573d6000803e3d6000fd5b505050506040513d602081101561027857600080fd5b50519050600084848481811061028a57fe5b905060200201356001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156102d257600080fd5b505afa1580156102e6573d6000803e3d6000fd5b505050506040513d60208110156102fc57600080fd5b5051905084848481811061030c57fe5b905060200201356001600160a01b03166001600160a01b031663a9059cbb86868681811061033657fe5b905060200201356001600160a01b031687878781811061035257fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561039e57600080fd5b505afa1580156103b2573d6000803e3d6000fd5b505050506040513d60208110156103c857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561041957600080fd5b505af115801561042d573d6000803e3d6000fd5b505050506040513d602081101561044357600080fd5b50600090508086868681811061045557fe5b6040805163226bf2d160e21b8152306004820152815160209390930294909401356001600160a01b0316936389afcb449350602480820193918290030181600087803b1580156104a457600080fd5b505af11580156104b8573d6000803e3d6000fd5b505050506040513d60408110156104ce57600080fd5b508051602090910151909250905081156104ec576104ec848361066a565b80156104fc576104fc838261066a565b5050600190920191506101f09050565b505050565b6000546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b031681565b6000546001600160a01b0316331461059d576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6001546001600160a01b031681565b6004546001600160a01b031681565b6000546001600160a01b03163314610648576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03838116911614156107015760025460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b50506003546106fc92506001600160a01b031690508261074c565b610748565b6002546107219061071c9084906001600160a01b031661083f565b6108fe565b15610730576106fc8183610904565b6004546107489083906001600160a01b031683610cc9565b5050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106107985780518252601f199092019160209182019101610779565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146107fa576040519150601f19603f3d011682016040523d82523d6000602084013e6107ff565b606091505b505090508061050c5760405162461bcd60e51b81526004018080602001828103825260238152602001806110696023913960400191505060405180910390fd5b600080600061084e8585610e33565b600154604080516bffffffffffffffffffffffff19606095861b811660208084019190915294861b81166034830152825160288184030181526048830184528051908601206001600160f81b031960688401529390951b9094166069850152607d8401919091527fd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776609d808501919091528151808503909101815260bd9093019052815191012095945050505050565b3b151590565b60025460009061091e9083906001600160a01b031661083f565b9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561095c57600080fd5b505afa158015610970573d6000803e3d6000fd5b505050506040513d606081101561098657600080fd5b5080516020909101516002546dffffffffffffffffffffffffffff92831694509116915060009081906001600160a01b03908116908716106109c95782846109cc565b83835b915091506000821180156109e05750600081115b610a1b5760405162461bcd60e51b815260040180806020018281038252602981526020018061101a6029913960400191505060405180910390fd5b6000610aa8610a9b876001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5c57600080fd5b505afa158015610a70573d6000803e3d6000fd5b505050506040513d6020811015610a8657600080fd5b50516127109063ffffffff90811690610f1116565b899063ffffffff610f6716565b90506000610abc828463ffffffff610f6716565b90506000610ae283610ad68761271063ffffffff610f6716565b9063ffffffff610fca16565b90506000818381610aef57fe5b049050610afd8a8a8d610cc9565b60025460009081906001600160a01b03908116908d1610610b2057826000610b24565b6000835b915091508a6001600160a01b031663022c0d9f83833060006040519080825280601f01601f191660200182016040528015610b66576020820181803883390190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610bd7578181015183820152602001610bbf565b50505050905090810190601f168015610c045780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610c2657600080fd5b505af1158015610c3a573d6000803e3d6000fd5b505060025460408051632e1a7d4d60e01b81526004810188905290516001600160a01b039092169350632e1a7d4d925060248082019260009290919082900301818387803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b5050600354610cba92506001600160a01b031690508461074c565b50505050505050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310610d465780518252601f199092019160209182019101610d27565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610da8576040519150601f19603f3d011682016040523d82523d6000602084013e610dad565b606091505b5091509150818015610ddb575080511580610ddb5750808060200190516020811015610dd857600080fd5b50515b610e2c576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b600080826001600160a01b0316846001600160a01b03161415610e875760405162461bcd60e51b81526004018080602001828103825260268152602001806110436026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610610ea7578284610eaa565b83835b90925090506001600160a01b038216610f0a576040805162461bcd60e51b815260206004820152601f60248201527f44587377617046656552656365697665723a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b80820382811115610f61576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b92915050565b6000811580610f8257505080820282828281610f7f57fe5b04145b610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe44587377617046656552656365697665723a20494e53554646494349454e545f4c495155494449545944587377617046656552656365697665723a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158204488a5c6d24546776395f2d8e5b107b99bb124fd814a71281fc10579ac69368864736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC1F4381D GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xC1F4381D EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0xF2269521 EQ PUSH2 0x1A5 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1BA JUMPI PUSH2 0x7B JUMP JUMPDEST DUP1 PUSH4 0x5CB9C4EC EQ PUSH2 0x7D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0xAD5C4648 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0xB9888472 EQ PUSH2 0x140 JUMPI JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x106 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x511 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x520 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x52F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x53E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x19C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x5CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x5DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5E9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x50C JUMPI PUSH1 0x0 DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0x206 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x262 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x28A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x30C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP7 DUP7 DUP7 DUP2 DUP2 LT PUSH2 0x336 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP8 DUP8 DUP2 DUP2 LT PUSH2 0x352 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x20 SWAP3 DUP4 MUL SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH4 0x70A08231 SWAP4 POP PUSH1 0x24 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x39E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP7 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x419 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x42D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x443 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP1 POP DUP1 DUP7 DUP7 DUP7 DUP2 DUP2 LT PUSH2 0x455 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x226BF2D1 PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 MUL SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH4 0x89AFCB44 SWAP4 POP PUSH1 0x24 DUP1 DUP3 ADD SWAP4 SWAP2 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4B8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP DUP2 ISZERO PUSH2 0x4EC JUMPI PUSH2 0x4EC DUP5 DUP4 PUSH2 0x66A JUMP JUMPDEST DUP1 ISZERO PUSH2 0x4FC JUMPI PUSH2 0x4FC DUP4 DUP3 PUSH2 0x66A JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 POP PUSH2 0x1F0 SWAP1 POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x59D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A20464F5242494444454E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x4 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x648 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A20464F5242494444454E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x701 JUMPI PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2E1A7D4D SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6E1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x3 SLOAD PUSH2 0x6FC SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP3 PUSH2 0x74C JUMP JUMPDEST PUSH2 0x748 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x721 SWAP1 PUSH2 0x71C SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x83F JUMP JUMPDEST PUSH2 0x8FE JUMP JUMPDEST ISZERO PUSH2 0x730 JUMPI PUSH2 0x6FC DUP2 DUP4 PUSH2 0x904 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x748 SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH2 0xCC9 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP4 SWAP1 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x798 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x779 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x7FA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x7FF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x50C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1069 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x84E DUP6 DUP6 PUSH2 0xE33 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH1 0x60 SWAP6 DUP7 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP5 DUP7 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP7 ADD KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT PUSH1 0x68 DUP5 ADD MSTORE SWAP4 SWAP1 SWAP6 SHL SWAP1 SWAP5 AND PUSH1 0x69 DUP6 ADD MSTORE PUSH1 0x7D DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xD306A548755B9295EE49CC729E13CA4A45E00199BBD890FA146DA43A50571776 PUSH1 0x9D DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP4 ADD SWAP1 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x91E SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x83F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x970 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x986 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x2 SLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP5 POP SWAP2 AND SWAP2 POP PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP8 AND LT PUSH2 0x9C9 JUMPI DUP3 DUP5 PUSH2 0x9CC JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 GT DUP1 ISZERO PUSH2 0x9E0 JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST PUSH2 0xA1B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x101A PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAA8 PUSH2 0xA9B DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x54CF2AEB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA70 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x2710 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0xF11 AND JUMP JUMPDEST DUP10 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xABC DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xAE2 DUP4 PUSH2 0xAD6 DUP8 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xFCA AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0xAEF JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0xAFD DUP11 DUP11 DUP14 PUSH2 0xCC9 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP14 AND LT PUSH2 0xB20 JUMPI DUP3 PUSH1 0x0 PUSH2 0xB24 JUMP JUMPDEST PUSH1 0x0 DUP4 JUMPDEST SWAP2 POP SWAP2 POP DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x22C0D9F DUP4 DUP4 ADDRESS PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB66 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xBD7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xBBF JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xC04 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC3A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP4 POP PUSH4 0x2E1A7D4D SWAP3 POP PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC9F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x3 SLOAD PUSH2 0xCBA SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP5 PUSH2 0x74C JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP3 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 SWAP4 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xD46 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xD27 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xDA8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xDAD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0xDDB JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0xDDB JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0xE2C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E7366657248656C7065723A205452414E534645525F4641494C454400 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xE87 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1043 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0xEA7 JUMPI DUP3 DUP5 PUSH2 0xEAA JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xF0A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A205A45524F5F4144445245535300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0xF82 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0xF7F JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID DIFFICULTY PC PUSH20 0x77617046656552656365697665723A20494E5355 CHAINID CHAINID 0x49 NUMBER 0x49 GASLIMIT 0x4E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE DIFFICULTY PC PUSH20 0x77617046656552656365697665723A204944454E SLOAD 0x49 NUMBER COINBASE 0x4C 0x5F COINBASE DIFFICULTY DIFFICULTY MSTORE GASLIMIT MSTORE8 MSTORE8 GASLIMIT MSTORE8 SLOAD PUSH19 0x616E7366657248656C7065723A204554485F54 MSTORE COINBASE 0x4E MSTORE8 CHAINID GASLIMIT MSTORE 0x5F CHAINID COINBASE 0x49 0x4C GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 DIFFICULTY DUP9 0xA5 0xC6 0xD2 GASLIMIT CHAINID PUSH24 0x6395F2D8E5B107B99BB124FD814A71281FC10579AC693688 PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ", - "sourceMap": "218:5003:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4675:543;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4675:543:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4675:543:3;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;4675:543:3;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4675:543:3;;;;;;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;-1:-1;4675:543:3;;-1:-1:-1;4675:543:3;-1:-1:-1;4675:543:3;:::i;281:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;281:20:3;;;:::i;:::-;;;;-1:-1:-1;;;;;281:20:3;;;;;;;;;;;;;;342:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;342:19:3;;;:::i;367:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;367:26:3;;;:::i;960:242::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;960:242:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;960:242:3;;;;;;;;;;:::i;307:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;307:29:3;;;:::i;399:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;399:31:3;;;:::i;793:157::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;793:157:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;793:157:3;-1:-1:-1;;;;;793:157:3;;:::i;4675:543::-;4754:6;4749:463;4766:16;;;4749:463;;;4803:14;4820:5;;4826:1;4820:8;;;;;;;;;;;;;-1:-1:-1;;;;;4820:8:3;-1:-1:-1;;;;;4820:15:3;;:17;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4820:17:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4820:17:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4820:17:3;;-1:-1:-1;4851:14:3;4868:5;;4874:1;4868:8;;;;;;;;;;;;;-1:-1:-1;;;;;4868:8:3;-1:-1:-1;;;;;4868:15:3;;:17;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4868:17:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4868:17:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4868:17:3;;-1:-1:-1;4899:5:3;;4905:1;4899:8;;;;;;;;;;;;;;-1:-1:-1;;;;;4899:8:3;;-1:-1:-1;4899:17:3;4925:5;;4931:1;4925:8;;;;;;;;;;;;;-1:-1:-1;;;;;4925:8:3;4936:5;;4942:1;4936:8;;;;;;;:33;;;-1:-1:-1;;;4936:33:3;;4963:4;4936:33;;;;;;:8;;;;;;;;;-1:-1:-1;;;;;4936:8:3;;-1:-1:-1;;;4936:33:3;;;;;:8;:33;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;4936:33:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4936:33:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4936:33:3;4899:71;;;-1:-1:-1;4899:71:3;;;-1:-1:-1;;;;;;4899:71:3;;;-1:-1:-1;;;;;4899:71:3;;;;;;;;;;;;;;;;;;;;;4936:33;;4899:71;;;;;;;-1:-1:-1;4899:71:3;;;;5:2:-1;;;;30:1;27;20:12;5:2;4899:71:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4899:71:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4985:12:3;;-1:-1:-1;4985:12:3;5015:5;;5021:1;5015:8;;;;;;;:28;;;-1:-1:-1;;;5015:28:3;;5037:4;5015:28;;;;;;:8;;;;;;;;;;-1:-1:-1;;;;;5015:8:3;;:13;;-1:-1:-1;5015:28:3;;;;;;;;;;;-1:-1:-1;5015:8:3;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;5015:28:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5015:28:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5015:28:3;;;;;;;;;-1:-1:-1;5015:28:3;-1:-1:-1;5061:11:3;;5057:65;;5090:32;5106:6;5114:7;5090:15;:32::i;:::-;5140:11;;5136:65;;5169:32;5185:6;5193:7;5169:15;:32::i;:::-;-1:-1:-1;;4784:3:3;;;;;-1:-1:-1;4749:463:3;;-1:-1:-1;4749:463:3;;;4675:543;;:::o;281:20::-;;;-1:-1:-1;;;;;281:20:3;;:::o;342:19::-;;;-1:-1:-1;;;;;342:19:3;;:::o;367:26::-;;;-1:-1:-1;;;;;367:26:3;;:::o;960:242::-;1075:5;;-1:-1:-1;;;;;1075:5:3;1061:10;:19;1053:60;;;;;-1:-1:-1;;;1053:60:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;1123:11;:26;;-1:-1:-1;;;;;1123:26:3;;;-1:-1:-1;;;;;;1123:26:3;;;;;;;1159:16;:36;;;;;;;;;;;960:242::o;307:29::-;;;-1:-1:-1;;;;;307:29:3;;:::o;399:31::-;;;-1:-1:-1;;;;;399:31:3;;:::o;793:157::-;879:5;;-1:-1:-1;;;;;879:5:3;865:10;:19;857:60;;;;;-1:-1:-1;;;857:60:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;927:5;:16;;-1:-1:-1;;;;;;927:16:3;-1:-1:-1;;;;;927:16:3;;;;;;;;;;793:157::o;3927:662::-;4010:4;;-1:-1:-1;;;;;4001:13:3;;;4010:4;;4001:13;3997:586;;;4092:4;;4086:28;;;-1:-1:-1;;;4086:28:3;;;;;;;;;;-1:-1:-1;;;;;4092:4:3;;;;-1:-1:-1;;4086:28:3;;;;;-1:-1:-1;;4086:28:3;;;;;;;;-1:-1:-1;4092:4:3;4086:28;;;5:2:-1;;;;30:1;27;20:12;5:2;4086:28:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;4155:11:3;;4124:51;;-1:-1:-1;;;;;;4155:11:3;;-1:-1:-1;4168:6:3;4124:30;:51::i;:::-;3997:586;;;4220:4;;4194:32;;4205:20;;4213:5;;-1:-1:-1;;;;;4220:4:3;4205:7;:20::i;:::-;4194:10;:32::i;:::-;4190:393;;;4342:32;4360:6;4368:5;4342:17;:32::i;4190:393::-;4549:16;;4514:60;;4542:5;;-1:-1:-1;;;;;4549:16:3;4567:6;4514:27;:60::i;:::-;3927:662;;:::o;1293:192:14:-;1400:12;;;1362;1400;;;;;;;;;;1379:34;;1362:12;;-1:-1:-1;;;;;1379:7:14;;;1393:5;;1400:12;;;;;;;1379:34;1400:12;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1379:34:14;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;1361:52:14;;;1431:7;1423:55;;;;-1:-1:-1;;;1423:55:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2128:433:3;2200:12;2225:14;2241;2259:26;2270:6;2278;2259:10;:26::i;:::-;2376:7;;2407:32;;;-1:-1:-1;;2407:32:3;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;2407:32:3;;;;;2397:43;;;;;;-1:-1:-1;;;;;;2325:226:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2325:226:3;;;;;;2315:237;;;;;;;-1:-1:-1;;;;;2128:433:3:o;1820:156::-;1926:17;1961:8;;;1820:156::o;2660:1150::-;2807:4;;2752:21;;2788:24;;2796:9;;-1:-1:-1;;;;;2807:4:3;2788:7;:24::i;:::-;2752:61;;2833:13;2848;2866:9;-1:-1:-1;;;;;2866:21:3;;:23;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2866:23:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2866:23:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2866:23:3;;;;;;;2947:4;;2832:57;;;;;-1:-1:-1;2832:57:3;;;-1:-1:-1;2900:14:3;;;;-1:-1:-1;;;;;2947:4:3;;;2935:16;;;;:62;;2978:8;2988;2935:62;;;2955:8;2965;2935:62;2899:98;;;;3028:1;3016:9;:13;:31;;;;;3046:1;3033:10;:14;3016:31;3008:85;;;;-1:-1:-1;;;3008:85:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3103:20;3126:50;3139:36;3155:9;-1:-1:-1;;;;;3155:17:3;;:19;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3155:19:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3155:19:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3155:19:3;3144:5;;3139:36;;;;;:15;:36;:::i;:::-;3126:8;;:50;:12;:50;:::i;:::-;3103:73;-1:-1:-1;3186:14:3;3203:31;3103:73;3223:10;3203:31;:19;:31;:::i;:::-;3186:48;-1:-1:-1;3244:16:3;3263:41;3288:15;3263:20;:9;3277:5;3263:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;3244:60;;3314:14;3343:11;3331:9;:23;;;;;;3314:40;;3373:90;3414:9;3433;3445:8;3373:27;:90::i;:::-;3531:4;;3483:15;;;;-1:-1:-1;;;;;3531:4:3;;;3519:16;;;;:62;;3562:9;3578:1;3519:62;;;3544:1;3548:9;3519:62;3667:12;;;3677:1;3667:12;;;;;;;;;3482:99;;-1:-1:-1;3482:99:3;;-1:-1:-1;;;;;;3600:14:3;;;;;3482:99;;;;3660:4;;3667:12;-1:-1:-1;3600:89:3;;-1:-1:-1;;;;;;3600:89:3;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3600:89:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-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;3600:89:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3600:89:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;3714:4:3;;3708:31;;;-1:-1:-1;;;3708:31:3;;;;;;;;;;-1:-1:-1;;;;;3714:4:3;;;;-1:-1:-1;;;;3708:31:3;;;;;-1:-1:-1;;3708:31:3;;;;;;;;-1:-1:-1;3714:4:3;3708:31;;;5:2:-1;;;;30:1;27;20:12;5:2;3708:31:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;3780:11:3;;3749:54;;-1:-1:-1;;;;;;3780:11:3;;-1:-1:-1;3793:9:3;3749:30;:54::i;:::-;2660:1150;;;;;;;;;;;;;:::o;526:357:14:-;719:45;;;-1:-1:-1;;;;;719:45:14;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;719:45:14;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;708:57:14;;;;-1:-1:-1;;687:17:14;;708:10;;;;719:45;708:57;;;25:18:-1;708:57:14;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;708:57:14;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;672:93:14;;;;783:7;:57;;;;-1:-1:-1;795:11:14;;:16;;:44;;;826:4;815:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;815:24:14;795:44;775:101;;;;;-1:-1:-1;;;775:101:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;526:357;;;;;:::o;1312:347:3:-;1387:14;;-1:-1:-1;;;;;1437:16:3;;;;;;;;1429:67;;;;-1:-1:-1;;;1429:67:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1525:15:3;;;;;;;:53;;1563:6;1571;1525:53;;;1544:6;1552;1525:53;1506:72;;-1:-1:-1;1506:72:3;-1:-1:-1;;;;;;1596:20:3;;1588:64;;;;;-1:-1:-1;;;1588:64:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;1312:347;;;;;:::o;287:127:13:-;370:5;;;365:16;;;;357:50;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;;;;287:127;;;;:::o;420:140::-;472:6;498;;;:30;;-1:-1:-1;;513:5:13;;;527:1;522;513:5;522:1;508:15;;;;;:20;498:30;490:63;;;;;-1:-1:-1;;;490:63:13;;;;;;;;;;;;-1:-1:-1;;;490:63:13;;;;;;;;;;;;;;155:126;238:5;;;233:16;;;;225:49;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;;" - } - }, - "interface": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_factory", - "type": "address" - }, - { - "internalType": "address", - "name": "_WETH", - "type": "address" - }, - { - "internalType": "address", - "name": "_ethReceiver", - "type": "address" - }, - { - "internalType": "address", - "name": "_fallbackReceiver", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "payable": true, - "stateMutability": "payable", - "type": "fallback" - }, - { - "constant": true, - "inputs": [], - "name": "WETH", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "_ethReceiver", - "type": "address" - }, - { - "internalType": "address", - "name": "_fallbackReceiver", - "type": "address" - } - ], - "name": "changeReceivers", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "ethReceiver", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "contract IDXswapFactory", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "fallbackReceiver", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "contract IDXswapPair[]", - "name": "pairs", - "type": "address[]" - } - ], - "name": "takeProtocolFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "608060405234801561001057600080fd5b50604051611179380380611179833981810160405260a081101561003357600080fd5b508051602082015160408301516060840151608090940151600080546001600160a01b039586166001600160a01b031991821617909155600180549486169482169490941790935560028054928516928416929092179091556003805494841694831694909417909355600480549290931691161790556110c0806100b96000396000f3fe60806040526004361061007b5760003560e01c8063c1f4381d1161004e578063c1f4381d14610155578063c45a015514610190578063f2269521146101a5578063f2fde38b146101ba5761007b565b80635cb9c4ec1461007d5780638da5cb5b146100fa578063ad5c46481461012b578063b988847214610140575b005b34801561008957600080fd5b5061007b600480360360208110156100a057600080fd5b8101906020810181356401000000008111156100bb57600080fd5b8201836020820111156100cd57600080fd5b803590602001918460208302840111640100000000831117156100ef57600080fd5b5090925090506101ed565b34801561010657600080fd5b5061010f610511565b604080516001600160a01b039092168252519081900360200190f35b34801561013757600080fd5b5061010f610520565b34801561014c57600080fd5b5061010f61052f565b34801561016157600080fd5b5061007b6004803603604081101561017857600080fd5b506001600160a01b038135811691602001351661053e565b34801561019c57600080fd5b5061010f6105cb565b3480156101b157600080fd5b5061010f6105da565b3480156101c657600080fd5b5061007b600480360360208110156101dd57600080fd5b50356001600160a01b03166105e9565b60005b8181101561050c57600083838381811061020657fe5b905060200201356001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561024e57600080fd5b505afa158015610262573d6000803e3d6000fd5b505050506040513d602081101561027857600080fd5b50519050600084848481811061028a57fe5b905060200201356001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156102d257600080fd5b505afa1580156102e6573d6000803e3d6000fd5b505050506040513d60208110156102fc57600080fd5b5051905084848481811061030c57fe5b905060200201356001600160a01b03166001600160a01b031663a9059cbb86868681811061033657fe5b905060200201356001600160a01b031687878781811061035257fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561039e57600080fd5b505afa1580156103b2573d6000803e3d6000fd5b505050506040513d60208110156103c857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561041957600080fd5b505af115801561042d573d6000803e3d6000fd5b505050506040513d602081101561044357600080fd5b50600090508086868681811061045557fe5b6040805163226bf2d160e21b8152306004820152815160209390930294909401356001600160a01b0316936389afcb449350602480820193918290030181600087803b1580156104a457600080fd5b505af11580156104b8573d6000803e3d6000fd5b505050506040513d60408110156104ce57600080fd5b508051602090910151909250905081156104ec576104ec848361066a565b80156104fc576104fc838261066a565b5050600190920191506101f09050565b505050565b6000546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b031681565b6000546001600160a01b0316331461059d576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6001546001600160a01b031681565b6004546001600160a01b031681565b6000546001600160a01b03163314610648576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03838116911614156107015760025460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b50506003546106fc92506001600160a01b031690508261074c565b610748565b6002546107219061071c9084906001600160a01b031661083f565b6108fe565b15610730576106fc8183610904565b6004546107489083906001600160a01b031683610cc9565b5050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106107985780518252601f199092019160209182019101610779565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146107fa576040519150601f19603f3d011682016040523d82523d6000602084013e6107ff565b606091505b505090508061050c5760405162461bcd60e51b81526004018080602001828103825260238152602001806110696023913960400191505060405180910390fd5b600080600061084e8585610e33565b600154604080516bffffffffffffffffffffffff19606095861b811660208084019190915294861b81166034830152825160288184030181526048830184528051908601206001600160f81b031960688401529390951b9094166069850152607d8401919091527fd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776609d808501919091528151808503909101815260bd9093019052815191012095945050505050565b3b151590565b60025460009061091e9083906001600160a01b031661083f565b9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561095c57600080fd5b505afa158015610970573d6000803e3d6000fd5b505050506040513d606081101561098657600080fd5b5080516020909101516002546dffffffffffffffffffffffffffff92831694509116915060009081906001600160a01b03908116908716106109c95782846109cc565b83835b915091506000821180156109e05750600081115b610a1b5760405162461bcd60e51b815260040180806020018281038252602981526020018061101a6029913960400191505060405180910390fd5b6000610aa8610a9b876001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5c57600080fd5b505afa158015610a70573d6000803e3d6000fd5b505050506040513d6020811015610a8657600080fd5b50516127109063ffffffff90811690610f1116565b899063ffffffff610f6716565b90506000610abc828463ffffffff610f6716565b90506000610ae283610ad68761271063ffffffff610f6716565b9063ffffffff610fca16565b90506000818381610aef57fe5b049050610afd8a8a8d610cc9565b60025460009081906001600160a01b03908116908d1610610b2057826000610b24565b6000835b915091508a6001600160a01b031663022c0d9f83833060006040519080825280601f01601f191660200182016040528015610b66576020820181803883390190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610bd7578181015183820152602001610bbf565b50505050905090810190601f168015610c045780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610c2657600080fd5b505af1158015610c3a573d6000803e3d6000fd5b505060025460408051632e1a7d4d60e01b81526004810188905290516001600160a01b039092169350632e1a7d4d925060248082019260009290919082900301818387803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b5050600354610cba92506001600160a01b031690508461074c565b50505050505050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310610d465780518252601f199092019160209182019101610d27565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610da8576040519150601f19603f3d011682016040523d82523d6000602084013e610dad565b606091505b5091509150818015610ddb575080511580610ddb5750808060200190516020811015610dd857600080fd5b50515b610e2c576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b600080826001600160a01b0316846001600160a01b03161415610e875760405162461bcd60e51b81526004018080602001828103825260268152602001806110436026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610610ea7578284610eaa565b83835b90925090506001600160a01b038216610f0a576040805162461bcd60e51b815260206004820152601f60248201527f44587377617046656552656365697665723a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b80820382811115610f61576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b92915050565b6000811580610f8257505080820282828281610f7f57fe5b04145b610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe44587377617046656552656365697665723a20494e53554646494349454e545f4c495155494449545944587377617046656552656365697665723a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158204488a5c6d24546776395f2d8e5b107b99bb124fd814a71281fc10579ac69368864736f6c63430005100032", - "bin": "608060405234801561001057600080fd5b50604051611179380380611179833981810160405260a081101561003357600080fd5b508051602082015160408301516060840151608090940151600080546001600160a01b039586166001600160a01b031991821617909155600180549486169482169490941790935560028054928516928416929092179091556003805494841694831694909417909355600480549290931691161790556110c0806100b96000396000f3fe60806040526004361061007b5760003560e01c8063c1f4381d1161004e578063c1f4381d14610155578063c45a015514610190578063f2269521146101a5578063f2fde38b146101ba5761007b565b80635cb9c4ec1461007d5780638da5cb5b146100fa578063ad5c46481461012b578063b988847214610140575b005b34801561008957600080fd5b5061007b600480360360208110156100a057600080fd5b8101906020810181356401000000008111156100bb57600080fd5b8201836020820111156100cd57600080fd5b803590602001918460208302840111640100000000831117156100ef57600080fd5b5090925090506101ed565b34801561010657600080fd5b5061010f610511565b604080516001600160a01b039092168252519081900360200190f35b34801561013757600080fd5b5061010f610520565b34801561014c57600080fd5b5061010f61052f565b34801561016157600080fd5b5061007b6004803603604081101561017857600080fd5b506001600160a01b038135811691602001351661053e565b34801561019c57600080fd5b5061010f6105cb565b3480156101b157600080fd5b5061010f6105da565b3480156101c657600080fd5b5061007b600480360360208110156101dd57600080fd5b50356001600160a01b03166105e9565b60005b8181101561050c57600083838381811061020657fe5b905060200201356001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561024e57600080fd5b505afa158015610262573d6000803e3d6000fd5b505050506040513d602081101561027857600080fd5b50519050600084848481811061028a57fe5b905060200201356001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156102d257600080fd5b505afa1580156102e6573d6000803e3d6000fd5b505050506040513d60208110156102fc57600080fd5b5051905084848481811061030c57fe5b905060200201356001600160a01b03166001600160a01b031663a9059cbb86868681811061033657fe5b905060200201356001600160a01b031687878781811061035257fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561039e57600080fd5b505afa1580156103b2573d6000803e3d6000fd5b505050506040513d60208110156103c857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561041957600080fd5b505af115801561042d573d6000803e3d6000fd5b505050506040513d602081101561044357600080fd5b50600090508086868681811061045557fe5b6040805163226bf2d160e21b8152306004820152815160209390930294909401356001600160a01b0316936389afcb449350602480820193918290030181600087803b1580156104a457600080fd5b505af11580156104b8573d6000803e3d6000fd5b505050506040513d60408110156104ce57600080fd5b508051602090910151909250905081156104ec576104ec848361066a565b80156104fc576104fc838261066a565b5050600190920191506101f09050565b505050565b6000546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b031681565b6000546001600160a01b0316331461059d576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6001546001600160a01b031681565b6004546001600160a01b031681565b6000546001600160a01b03163314610648576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03838116911614156107015760025460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b50506003546106fc92506001600160a01b031690508261074c565b610748565b6002546107219061071c9084906001600160a01b031661083f565b6108fe565b15610730576106fc8183610904565b6004546107489083906001600160a01b031683610cc9565b5050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106107985780518252601f199092019160209182019101610779565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146107fa576040519150601f19603f3d011682016040523d82523d6000602084013e6107ff565b606091505b505090508061050c5760405162461bcd60e51b81526004018080602001828103825260238152602001806110696023913960400191505060405180910390fd5b600080600061084e8585610e33565b600154604080516bffffffffffffffffffffffff19606095861b811660208084019190915294861b81166034830152825160288184030181526048830184528051908601206001600160f81b031960688401529390951b9094166069850152607d8401919091527fd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776609d808501919091528151808503909101815260bd9093019052815191012095945050505050565b3b151590565b60025460009061091e9083906001600160a01b031661083f565b9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561095c57600080fd5b505afa158015610970573d6000803e3d6000fd5b505050506040513d606081101561098657600080fd5b5080516020909101516002546dffffffffffffffffffffffffffff92831694509116915060009081906001600160a01b03908116908716106109c95782846109cc565b83835b915091506000821180156109e05750600081115b610a1b5760405162461bcd60e51b815260040180806020018281038252602981526020018061101a6029913960400191505060405180910390fd5b6000610aa8610a9b876001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5c57600080fd5b505afa158015610a70573d6000803e3d6000fd5b505050506040513d6020811015610a8657600080fd5b50516127109063ffffffff90811690610f1116565b899063ffffffff610f6716565b90506000610abc828463ffffffff610f6716565b90506000610ae283610ad68761271063ffffffff610f6716565b9063ffffffff610fca16565b90506000818381610aef57fe5b049050610afd8a8a8d610cc9565b60025460009081906001600160a01b03908116908d1610610b2057826000610b24565b6000835b915091508a6001600160a01b031663022c0d9f83833060006040519080825280601f01601f191660200182016040528015610b66576020820181803883390190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610bd7578181015183820152602001610bbf565b50505050905090810190601f168015610c045780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610c2657600080fd5b505af1158015610c3a573d6000803e3d6000fd5b505060025460408051632e1a7d4d60e01b81526004810188905290516001600160a01b039092169350632e1a7d4d925060248082019260009290919082900301818387803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b5050600354610cba92506001600160a01b031690508461074c565b50505050505050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310610d465780518252601f199092019160209182019101610d27565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610da8576040519150601f19603f3d011682016040523d82523d6000602084013e610dad565b606091505b5091509150818015610ddb575080511580610ddb5750808060200190516020811015610dd857600080fd5b50515b610e2c576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b600080826001600160a01b0316846001600160a01b03161415610e875760405162461bcd60e51b81526004018080602001828103825260268152602001806110436026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610610ea7578284610eaa565b83835b90925090506001600160a01b038216610f0a576040805162461bcd60e51b815260206004820152601f60248201527f44587377617046656552656365697665723a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b80820382811115610f61576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b92915050565b6000811580610f8257505080820282828281610f7f57fe5b04145b610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe44587377617046656552656365697665723a20494e53554646494349454e545f4c495155494449545944587377617046656552656365697665723a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158204488a5c6d24546776395f2d8e5b107b99bb124fd814a71281fc10579ac69368864736f6c63430005100032", - "bin-runtime": "60806040526004361061007b5760003560e01c8063c1f4381d1161004e578063c1f4381d14610155578063c45a015514610190578063f2269521146101a5578063f2fde38b146101ba5761007b565b80635cb9c4ec1461007d5780638da5cb5b146100fa578063ad5c46481461012b578063b988847214610140575b005b34801561008957600080fd5b5061007b600480360360208110156100a057600080fd5b8101906020810181356401000000008111156100bb57600080fd5b8201836020820111156100cd57600080fd5b803590602001918460208302840111640100000000831117156100ef57600080fd5b5090925090506101ed565b34801561010657600080fd5b5061010f610511565b604080516001600160a01b039092168252519081900360200190f35b34801561013757600080fd5b5061010f610520565b34801561014c57600080fd5b5061010f61052f565b34801561016157600080fd5b5061007b6004803603604081101561017857600080fd5b506001600160a01b038135811691602001351661053e565b34801561019c57600080fd5b5061010f6105cb565b3480156101b157600080fd5b5061010f6105da565b3480156101c657600080fd5b5061007b600480360360208110156101dd57600080fd5b50356001600160a01b03166105e9565b60005b8181101561050c57600083838381811061020657fe5b905060200201356001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561024e57600080fd5b505afa158015610262573d6000803e3d6000fd5b505050506040513d602081101561027857600080fd5b50519050600084848481811061028a57fe5b905060200201356001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156102d257600080fd5b505afa1580156102e6573d6000803e3d6000fd5b505050506040513d60208110156102fc57600080fd5b5051905084848481811061030c57fe5b905060200201356001600160a01b03166001600160a01b031663a9059cbb86868681811061033657fe5b905060200201356001600160a01b031687878781811061035257fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561039e57600080fd5b505afa1580156103b2573d6000803e3d6000fd5b505050506040513d60208110156103c857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561041957600080fd5b505af115801561042d573d6000803e3d6000fd5b505050506040513d602081101561044357600080fd5b50600090508086868681811061045557fe5b6040805163226bf2d160e21b8152306004820152815160209390930294909401356001600160a01b0316936389afcb449350602480820193918290030181600087803b1580156104a457600080fd5b505af11580156104b8573d6000803e3d6000fd5b505050506040513d60408110156104ce57600080fd5b508051602090910151909250905081156104ec576104ec848361066a565b80156104fc576104fc838261066a565b5050600190920191506101f09050565b505050565b6000546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b031681565b6000546001600160a01b0316331461059d576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6001546001600160a01b031681565b6004546001600160a01b031681565b6000546001600160a01b03163314610648576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03838116911614156107015760025460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b50506003546106fc92506001600160a01b031690508261074c565b610748565b6002546107219061071c9084906001600160a01b031661083f565b6108fe565b15610730576106fc8183610904565b6004546107489083906001600160a01b031683610cc9565b5050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106107985780518252601f199092019160209182019101610779565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146107fa576040519150601f19603f3d011682016040523d82523d6000602084013e6107ff565b606091505b505090508061050c5760405162461bcd60e51b81526004018080602001828103825260238152602001806110696023913960400191505060405180910390fd5b600080600061084e8585610e33565b600154604080516bffffffffffffffffffffffff19606095861b811660208084019190915294861b81166034830152825160288184030181526048830184528051908601206001600160f81b031960688401529390951b9094166069850152607d8401919091527fd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776609d808501919091528151808503909101815260bd9093019052815191012095945050505050565b3b151590565b60025460009061091e9083906001600160a01b031661083f565b9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561095c57600080fd5b505afa158015610970573d6000803e3d6000fd5b505050506040513d606081101561098657600080fd5b5080516020909101516002546dffffffffffffffffffffffffffff92831694509116915060009081906001600160a01b03908116908716106109c95782846109cc565b83835b915091506000821180156109e05750600081115b610a1b5760405162461bcd60e51b815260040180806020018281038252602981526020018061101a6029913960400191505060405180910390fd5b6000610aa8610a9b876001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5c57600080fd5b505afa158015610a70573d6000803e3d6000fd5b505050506040513d6020811015610a8657600080fd5b50516127109063ffffffff90811690610f1116565b899063ffffffff610f6716565b90506000610abc828463ffffffff610f6716565b90506000610ae283610ad68761271063ffffffff610f6716565b9063ffffffff610fca16565b90506000818381610aef57fe5b049050610afd8a8a8d610cc9565b60025460009081906001600160a01b03908116908d1610610b2057826000610b24565b6000835b915091508a6001600160a01b031663022c0d9f83833060006040519080825280601f01601f191660200182016040528015610b66576020820181803883390190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610bd7578181015183820152602001610bbf565b50505050905090810190601f168015610c045780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610c2657600080fd5b505af1158015610c3a573d6000803e3d6000fd5b505060025460408051632e1a7d4d60e01b81526004810188905290516001600160a01b039092169350632e1a7d4d925060248082019260009290919082900301818387803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b5050600354610cba92506001600160a01b031690508461074c565b50505050505050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310610d465780518252601f199092019160209182019101610d27565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610da8576040519150601f19603f3d011682016040523d82523d6000602084013e610dad565b606091505b5091509150818015610ddb575080511580610ddb5750808060200190516020811015610dd857600080fd5b50515b610e2c576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b600080826001600160a01b0316846001600160a01b03161415610e875760405162461bcd60e51b81526004018080602001828103825260268152602001806110436026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610610ea7578284610eaa565b83835b90925090506001600160a01b038216610f0a576040805162461bcd60e51b815260206004820152601f60248201527f44587377617046656552656365697665723a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b80820382811115610f61576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b92915050565b6000811580610f8257505080820282828281610f7f57fe5b04145b610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe44587377617046656552656365697665723a20494e53554646494349454e545f4c495155494449545944587377617046656552656365697665723a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158204488a5c6d24546776395f2d8e5b107b99bb124fd814a71281fc10579ac69368864736f6c63430005100032", - "srcmap": "218:5003:3:-;;;437:310;8:9:-1;5:2;;;30:1;27;20:12;5:2;437:310:3;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;437:310:3;;;;;;;;;;;;;;;;;;;578:5;:14;;-1:-1:-1;;;;;;578:14:3;;;-1:-1:-1;;;;;578:14:3;;;;;;-1:-1:-1;602:34:3;;;;;;;;;;;;;;646:4;:12;;;;;;;;;;;;;;668:11;:26;;;;;;;;;;;;;;704:16;:36;;;;;;;;;;;;;;;-1:-1:-1;;;;218:5003:3;;;;", - "srcmap-runtime": "218:5003:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4675:543;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4675:543:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4675:543:3;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;4675:543:3;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4675:543:3;;;;;;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;-1:-1;4675:543:3;;-1:-1:-1;4675:543:3;-1:-1:-1;4675:543:3;:::i;281:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;281:20:3;;;:::i;:::-;;;;-1:-1:-1;;;;;281:20:3;;;;;;;;;;;;;;342:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;342:19:3;;;:::i;367:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;367:26:3;;;:::i;960:242::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;960:242:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;960:242:3;;;;;;;;;;:::i;307:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;307:29:3;;;:::i;399:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;399:31:3;;;:::i;793:157::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;793:157:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;793:157:3;-1:-1:-1;;;;;793:157:3;;:::i;4675:543::-;4754:6;4749:463;4766:16;;;4749:463;;;4803:14;4820:5;;4826:1;4820:8;;;;;;;;;;;;;-1:-1:-1;;;;;4820:8:3;-1:-1:-1;;;;;4820:15:3;;:17;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4820:17:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4820:17:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4820:17:3;;-1:-1:-1;4851:14:3;4868:5;;4874:1;4868:8;;;;;;;;;;;;;-1:-1:-1;;;;;4868:8:3;-1:-1:-1;;;;;4868:15:3;;:17;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4868:17:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4868:17:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4868:17:3;;-1:-1:-1;4899:5:3;;4905:1;4899:8;;;;;;;;;;;;;;-1:-1:-1;;;;;4899:8:3;;-1:-1:-1;4899:17:3;4925:5;;4931:1;4925:8;;;;;;;;;;;;;-1:-1:-1;;;;;4925:8:3;4936:5;;4942:1;4936:8;;;;;;;:33;;;-1:-1:-1;;;4936:33:3;;4963:4;4936:33;;;;;;:8;;;;;;;;;-1:-1:-1;;;;;4936:8:3;;-1:-1:-1;;;4936:33:3;;;;;:8;:33;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;4936:33:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4936:33:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4936:33:3;4899:71;;;-1:-1:-1;4899:71:3;;;-1:-1:-1;;;;;;4899:71:3;;;-1:-1:-1;;;;;4899:71:3;;;;;;;;;;;;;;;;;;;;;4936:33;;4899:71;;;;;;;-1:-1:-1;4899:71:3;;;;5:2:-1;;;;30:1;27;20:12;5:2;4899:71:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4899:71:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4985:12:3;;-1:-1:-1;4985:12:3;5015:5;;5021:1;5015:8;;;;;;;:28;;;-1:-1:-1;;;5015:28:3;;5037:4;5015:28;;;;;;:8;;;;;;;;;;-1:-1:-1;;;;;5015:8:3;;:13;;-1:-1:-1;5015:28:3;;;;;;;;;;;-1:-1:-1;5015:8:3;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;5015:28:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5015:28:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5015:28:3;;;;;;;;;-1:-1:-1;5015:28:3;-1:-1:-1;5061:11:3;;5057:65;;5090:32;5106:6;5114:7;5090:15;:32::i;:::-;5140:11;;5136:65;;5169:32;5185:6;5193:7;5169:15;:32::i;:::-;-1:-1:-1;;4784:3:3;;;;;-1:-1:-1;4749:463:3;;-1:-1:-1;4749:463:3;;;4675:543;;:::o;281:20::-;;;-1:-1:-1;;;;;281:20:3;;:::o;342:19::-;;;-1:-1:-1;;;;;342:19:3;;:::o;367:26::-;;;-1:-1:-1;;;;;367:26:3;;:::o;960:242::-;1075:5;;-1:-1:-1;;;;;1075:5:3;1061:10;:19;1053:60;;;;;-1:-1:-1;;;1053:60:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;1123:11;:26;;-1:-1:-1;;;;;1123:26:3;;;-1:-1:-1;;;;;;1123:26:3;;;;;;;1159:16;:36;;;;;;;;;;;960:242::o;307:29::-;;;-1:-1:-1;;;;;307:29:3;;:::o;399:31::-;;;-1:-1:-1;;;;;399:31:3;;:::o;793:157::-;879:5;;-1:-1:-1;;;;;879:5:3;865:10;:19;857:60;;;;;-1:-1:-1;;;857:60:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;927:5;:16;;-1:-1:-1;;;;;;927:16:3;-1:-1:-1;;;;;927:16:3;;;;;;;;;;793:157::o;3927:662::-;4010:4;;-1:-1:-1;;;;;4001:13:3;;;4010:4;;4001:13;3997:586;;;4092:4;;4086:28;;;-1:-1:-1;;;4086:28:3;;;;;;;;;;-1:-1:-1;;;;;4092:4:3;;;;-1:-1:-1;;4086:28:3;;;;;-1:-1:-1;;4086:28:3;;;;;;;;-1:-1:-1;4092:4:3;4086:28;;;5:2:-1;;;;30:1;27;20:12;5:2;4086:28:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;4155:11:3;;4124:51;;-1:-1:-1;;;;;;4155:11:3;;-1:-1:-1;4168:6:3;4124:30;:51::i;:::-;3997:586;;;4220:4;;4194:32;;4205:20;;4213:5;;-1:-1:-1;;;;;4220:4:3;4205:7;:20::i;:::-;4194:10;:32::i;:::-;4190:393;;;4342:32;4360:6;4368:5;4342:17;:32::i;4190:393::-;4549:16;;4514:60;;4542:5;;-1:-1:-1;;;;;4549:16:3;4567:6;4514:27;:60::i;:::-;3927:662;;:::o;1293:192:14:-;1400:12;;;1362;1400;;;;;;;;;;1379:34;;1362:12;;-1:-1:-1;;;;;1379:7:14;;;1393:5;;1400:12;;;;;;;1379:34;1400:12;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1379:34:14;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;1361:52:14;;;1431:7;1423:55;;;;-1:-1:-1;;;1423:55:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2128:433:3;2200:12;2225:14;2241;2259:26;2270:6;2278;2259:10;:26::i;:::-;2376:7;;2407:32;;;-1:-1:-1;;2407:32:3;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;2407:32:3;;;;;2397:43;;;;;;-1:-1:-1;;;;;;2325:226:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2325:226:3;;;;;;2315:237;;;;;;;-1:-1:-1;;;;;2128:433:3:o;1820:156::-;1926:17;1961:8;;;1820:156::o;2660:1150::-;2807:4;;2752:21;;2788:24;;2796:9;;-1:-1:-1;;;;;2807:4:3;2788:7;:24::i;:::-;2752:61;;2833:13;2848;2866:9;-1:-1:-1;;;;;2866:21:3;;:23;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2866:23:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2866:23:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2866:23:3;;;;;;;2947:4;;2832:57;;;;;-1:-1:-1;2832:57:3;;;-1:-1:-1;2900:14:3;;;;-1:-1:-1;;;;;2947:4:3;;;2935:16;;;;:62;;2978:8;2988;2935:62;;;2955:8;2965;2935:62;2899:98;;;;3028:1;3016:9;:13;:31;;;;;3046:1;3033:10;:14;3016:31;3008:85;;;;-1:-1:-1;;;3008:85:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3103:20;3126:50;3139:36;3155:9;-1:-1:-1;;;;;3155:17:3;;:19;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3155:19:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3155:19:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3155:19:3;3144:5;;3139:36;;;;;:15;:36;:::i;:::-;3126:8;;:50;:12;:50;:::i;:::-;3103:73;-1:-1:-1;3186:14:3;3203:31;3103:73;3223:10;3203:31;:19;:31;:::i;:::-;3186:48;-1:-1:-1;3244:16:3;3263:41;3288:15;3263:20;:9;3277:5;3263:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;3244:60;;3314:14;3343:11;3331:9;:23;;;;;;3314:40;;3373:90;3414:9;3433;3445:8;3373:27;:90::i;:::-;3531:4;;3483:15;;;;-1:-1:-1;;;;;3531:4:3;;;3519:16;;;;:62;;3562:9;3578:1;3519:62;;;3544:1;3548:9;3519:62;3667:12;;;3677:1;3667:12;;;;;;;;;3482:99;;-1:-1:-1;3482:99:3;;-1:-1:-1;;;;;;3600:14:3;;;;;3482:99;;;;3660:4;;3667:12;-1:-1:-1;3600:89:3;;-1:-1:-1;;;;;;3600:89:3;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3600:89:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-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;3600:89:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3600:89:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;3714:4:3;;3708:31;;;-1:-1:-1;;;3708:31:3;;;;;;;;;;-1:-1:-1;;;;;3714:4:3;;;;-1:-1:-1;;;;3708:31:3;;;;;-1:-1:-1;;3708:31:3;;;;;;;;-1:-1:-1;3714:4:3;3708:31;;;5:2:-1;;;;30:1;27;20:12;5:2;3708:31:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;3780:11:3;;3749:54;;-1:-1:-1;;;;;;3780:11:3;;-1:-1:-1;3793:9:3;3749:30;:54::i;:::-;2660:1150;;;;;;;;;;;;;:::o;526:357:14:-;719:45;;;-1:-1:-1;;;;;719:45:14;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;719:45:14;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;708:57:14;;;;-1:-1:-1;;687:17:14;;708:10;;;;719:45;708:57;;;25:18:-1;708:57:14;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;708:57:14;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;672:93:14;;;;783:7;:57;;;;-1:-1:-1;795:11:14;;:16;;:44;;;826:4;815:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;815:24:14;795:44;775:101;;;;;-1:-1:-1;;;775:101:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;526:357;;;;;:::o;1312:347:3:-;1387:14;;-1:-1:-1;;;;;1437:16:3;;;;;;;;1429:67;;;;-1:-1:-1;;;1429:67:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1525:15:3;;;;;;;:53;;1563:6;1571;1525:53;;;1544:6;1552;1525:53;1506:72;;-1:-1:-1;1506:72:3;-1:-1:-1;;;;;;1596:20:3;;1588:64;;;;;-1:-1:-1;;;1588:64:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;1312:347;;;;;:::o;287:127:13:-;370:5;;;365:16;;;;357:50;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;;;;287:127;;;;:::o;420:140::-;472:6;498;;;:30;;-1:-1:-1;;513:5:13;;;527:1;522;513:5;522:1;508:15;;;;;:20;498:30;490:63;;;;;-1:-1:-1;;;490:63:13;;;;;;;;;;;;-1:-1:-1;;;490:63:13;;;;;;;;;;;;;;155:126;238:5;;;233:16;;;;225:49;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;;" - }, - "contracts/DXswapFeeSetter.sol:DXswapFeeSetter": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_factory", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "constant": true, - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "contract IDXswapFactory", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "pairOwners", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "feeTo", - "type": "address" - } - ], - "name": "setFeeTo", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "feeToSetter", - "type": "address" - } - ], - "name": "setFeeToSetter", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint8", - "name": "protocolFeeDenominator", - "type": "uint8" - } - ], - "name": "setProtocolFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - }, - { - "internalType": "uint32", - "name": "swapFee", - "type": "uint32" - } - ], - "name": "setSwapFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferPairOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506040516106a43803806106a48339818101604052604081101561003357600080fd5b508051602090910151600080546001600160a01b039384166001600160a01b0319918216179091556002805493909216921691909117905561062a8061007a6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a2e74af611610066578063a2e74af614610136578063a6dab93f1461015c578063c45a01551461018a578063f2fde38b14610192578063f46901ed146101b857610093565b806317c06b34146100985780634e91f811146100da5780638da5cb5b146100fc5780639e68ceb814610104575b600080fd5b6100be600480360360208110156100ae57600080fd5b50356001600160a01b03166101de565b604080516001600160a01b039092168252519081900360200190f35b6100fa600480360360208110156100f057600080fd5b503560ff166101f9565b005b6100be6102b0565b6100fa6004803603604081101561011a57600080fd5b5080356001600160a01b0316906020013563ffffffff166102bf565b6100fa6004803603602081101561014c57600080fd5b50356001600160a01b03166103a6565b6100fa6004803603604081101561017257600080fd5b506001600160a01b0381358116916020013516610441565b6100be6104bc565b6100fa600480360360208110156101a857600080fd5b50356001600160a01b03166104cb565b6100fa600480360360208110156101ce57600080fd5b50356001600160a01b031661053a565b6001602052600090815260409020546001600160a01b031681565b6000546001600160a01b03163314610246576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051634e91f81160e01b815260ff8416600482015290516001600160a01b0390921691634e91f8119160248082019260009290919082900301818387803b15801561029557600080fd5b505af11580156102a9573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031681565b6000546001600160a01b03163314806102f157506001600160a01b038281166000908152600160205260409020541633145b610330576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600254604080516313cd19d760e31b81526001600160a01b03858116600483015263ffffffff8516602483015291519190921691639e68ceb891604480830192600092919082900301818387803b15801561038a57600080fd5b505af115801561039e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146103f3576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051635173a57b60e11b81526001600160a01b0384811660048301529151919092169163a2e74af691602480830192600092919082900301818387803b15801561029557600080fd5b6000546001600160a01b0316331461048e576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6002546001600160a01b031681565b6000546001600160a01b03163314610518576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610587576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6002546040805163f46901ed60e01b81526001600160a01b0384811660048301529151919092169163f46901ed91602480830192600092919082900301818387803b15801561029557600080fdfe4458737761704665655365747465723a20464f5242494444454e000000000000a265627a7a72315820a0be763e035529abb8cc9d7d753668d36fa96da26d709983f608f42e5b3d615964736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x6A4 CODESIZE SUB DUP1 PUSH2 0x6A4 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP4 SWAP1 SWAP3 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x62A DUP1 PUSH2 0x7A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA2E74AF6 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA2E74AF6 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0xA6DAB93F EQ PUSH2 0x15C JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x18A JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x192 JUMPI DUP1 PUSH4 0xF46901ED EQ PUSH2 0x1B8 JUMPI PUSH2 0x93 JUMP JUMPDEST DUP1 PUSH4 0x17C06B34 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x4E91F811 EQ PUSH2 0xDA JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xFC JUMPI DUP1 PUSH4 0x9E68CEB8 EQ PUSH2 0x104 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xFF AND PUSH2 0x1F9 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xBE PUSH2 0x2B0 JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x11A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x2BF JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A6 JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x172 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x441 JUMP JUMPDEST PUSH2 0xBE PUSH2 0x4BC JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4CB JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x53A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x246 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4E91F811 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x4E91F811 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH2 0x2F1 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND CALLER EQ JUMPDEST PUSH2 0x330 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x13CD19D7 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0x9E68CEB8 SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x38A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x39E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3F3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x5173A57B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xA2E74AF6 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x48E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x518 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x587 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xF46901ED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xF46901ED SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT INVALID DIFFICULTY PC PUSH20 0x7761704665655365747465723A20464F52424944 DIFFICULTY GASLIMIT 0x4E STOP STOP STOP STOP STOP STOP LOG2 PUSH6 0x627A7A723158 KECCAK256 LOG0 0xBE PUSH23 0x3E035529ABB8CC9D7D753668D36FA96DA26D709983F608 DELEGATECALL 0x2E JUMPDEST RETURNDATASIZE PUSH2 0x5964 PUSH20 0x6F6C634300051000320000000000000000000000 ", - "sourceMap": "69:1398:4:-;;;215:128;8:9:-1;5:2;;;30:1;27;20:12;5:2;215:128:4;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;215:128:4;;;;;;;278:5;:14;;-1:-1:-1;;;;;278:14:4;;;-1:-1:-1;;;;;;278:14:4;;;;;;302:7;:34;;;;;;;;;;;;;;-1:-1:-1;;;;69:1398:4;;;;" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100935760003560e01c8063a2e74af611610066578063a2e74af614610136578063a6dab93f1461015c578063c45a01551461018a578063f2fde38b14610192578063f46901ed146101b857610093565b806317c06b34146100985780634e91f811146100da5780638da5cb5b146100fc5780639e68ceb814610104575b600080fd5b6100be600480360360208110156100ae57600080fd5b50356001600160a01b03166101de565b604080516001600160a01b039092168252519081900360200190f35b6100fa600480360360208110156100f057600080fd5b503560ff166101f9565b005b6100be6102b0565b6100fa6004803603604081101561011a57600080fd5b5080356001600160a01b0316906020013563ffffffff166102bf565b6100fa6004803603602081101561014c57600080fd5b50356001600160a01b03166103a6565b6100fa6004803603604081101561017257600080fd5b506001600160a01b0381358116916020013516610441565b6100be6104bc565b6100fa600480360360208110156101a857600080fd5b50356001600160a01b03166104cb565b6100fa600480360360208110156101ce57600080fd5b50356001600160a01b031661053a565b6001602052600090815260409020546001600160a01b031681565b6000546001600160a01b03163314610246576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051634e91f81160e01b815260ff8416600482015290516001600160a01b0390921691634e91f8119160248082019260009290919082900301818387803b15801561029557600080fd5b505af11580156102a9573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031681565b6000546001600160a01b03163314806102f157506001600160a01b038281166000908152600160205260409020541633145b610330576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600254604080516313cd19d760e31b81526001600160a01b03858116600483015263ffffffff8516602483015291519190921691639e68ceb891604480830192600092919082900301818387803b15801561038a57600080fd5b505af115801561039e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146103f3576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051635173a57b60e11b81526001600160a01b0384811660048301529151919092169163a2e74af691602480830192600092919082900301818387803b15801561029557600080fd5b6000546001600160a01b0316331461048e576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6002546001600160a01b031681565b6000546001600160a01b03163314610518576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610587576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6002546040805163f46901ed60e01b81526001600160a01b0384811660048301529151919092169163f46901ed91602480830192600092919082900301818387803b15801561029557600080fdfe4458737761704665655365747465723a20464f5242494444454e000000000000a265627a7a72315820a0be763e035529abb8cc9d7d753668d36fa96da26d709983f608f42e5b3d615964736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA2E74AF6 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA2E74AF6 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0xA6DAB93F EQ PUSH2 0x15C JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x18A JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x192 JUMPI DUP1 PUSH4 0xF46901ED EQ PUSH2 0x1B8 JUMPI PUSH2 0x93 JUMP JUMPDEST DUP1 PUSH4 0x17C06B34 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x4E91F811 EQ PUSH2 0xDA JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xFC JUMPI DUP1 PUSH4 0x9E68CEB8 EQ PUSH2 0x104 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xFF AND PUSH2 0x1F9 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xBE PUSH2 0x2B0 JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x11A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x2BF JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A6 JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x172 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x441 JUMP JUMPDEST PUSH2 0xBE PUSH2 0x4BC JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4CB JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x53A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x246 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4E91F811 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x4E91F811 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH2 0x2F1 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND CALLER EQ JUMPDEST PUSH2 0x330 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x13CD19D7 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0x9E68CEB8 SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x38A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x39E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3F3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x5173A57B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xA2E74AF6 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x48E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x518 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x587 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xF46901ED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xF46901ED SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT INVALID DIFFICULTY PC PUSH20 0x7761704665655365747465723A20464F52424944 DIFFICULTY GASLIMIT 0x4E STOP STOP STOP STOP STOP STOP LOG2 PUSH6 0x627A7A723158 KECCAK256 LOG0 0xBE PUSH23 0x3E035529ABB8CC9D7D753668D36FA96DA26D709983F608 DELEGATECALL 0x2E JUMPDEST RETURNDATASIZE PUSH2 0x5964 PUSH20 0x6F6C634300051000320000000000000000000000 ", - "sourceMap": "69:1398:4:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;69:1398:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;126:45;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;126:45:4;-1:-1:-1;;;;;126:45:4;;:::i;:::-;;;;-1:-1:-1;;;;;126:45:4;;;;;;;;;;;;;;1044:194;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1044:194:4;;;;:::i;:::-;;100:20;;;:::i;1248:217::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1248:217:4;;-1:-1:-1;;;;;1248:217:4;;;;;;;;:::i;860:174::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;860:174:4;-1:-1:-1;;;;;860:174:4;;:::i;514:184::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;514:184:4;;;;;;;;;;:::i;177:29::-;;;:::i;349:155::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;349:155:4;-1:-1:-1;;;;;349:155:4;;:::i;704:150::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;704:150:4;-1:-1:-1;;;;;704:150:4;;:::i;126:45::-;;;;;;;;;;;;-1:-1:-1;;;;;126:45:4;;:::o;1044:194::-;1139:5;;-1:-1:-1;;;;;1139:5:4;1125:10;:19;1117:58;;;;;-1:-1:-1;;;1117:58:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1117:58:4;;;;;;;;;;;;;;;1185:7;;:46;;;-1:-1:-1;;;1185:46:4;;;;;;;;;;;-1:-1:-1;;;;;1185:7:4;;;;-1:-1:-1;;1185:46:4;;;;;-1:-1:-1;;1185:46:4;;;;;;;;-1:-1:-1;1185:7:4;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;1185:46:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1185:46:4;;;;1044:194;:::o;100:20::-;;;-1:-1:-1;;;;;100:20:4;;:::o;1248:217::-;1340:5;;-1:-1:-1;;;;;1340:5:4;1326:10;:19;;1325:59;;-1:-1:-1;;;;;;1366:16:4;;;;;;;-1:-1:-1;1366:16:4;;;;;;;1352:10;:30;1325:59;1317:98;;;;;-1:-1:-1;;;1317:98:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1317:98:4;;;;;;;;;;;;;;;1425:7;;:33;;;-1:-1:-1;;;1425:33:4;;-1:-1:-1;;;;;1425:33:4;;;;;;;;;;;;;;;;:7;;;;;:18;;:33;;;;;-1:-1:-1;;1425:33:4;;;;;;;-1:-1:-1;1425:7:4;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;1425:33:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1425:33:4;;;;1248:217;;:::o;860:174::-;946:5;;-1:-1:-1;;;;;946:5:4;932:10;:19;924:58;;;;;-1:-1:-1;;;924:58:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;924:58:4;;;;;;;;;;;;;;;992:7;;:35;;;-1:-1:-1;;;992:35:4;;-1:-1:-1;;;;;992:35:4;;;;;;;;;:7;;;;;:22;;:35;;;;;-1:-1:-1;;992:35:4;;;;;;;-1:-1:-1;992:7:4;:35;;;5:2:-1;;;;30:1;27;20:12;514:184:4;618:5;;-1:-1:-1;;;;;618:5:4;604:10;:19;596:58;;;;;-1:-1:-1;;;596:58:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;596:58:4;;;;;;;;;;;;;;;-1:-1:-1;;;;;664:16:4;;;;;;;-1:-1:-1;664:16:4;;;;;:27;;-1:-1:-1;;;;;;664:27:4;;;;;;;;514:184::o;177:29::-;;;-1:-1:-1;;;;;177:29:4;;:::o;349:155::-;435:5;;-1:-1:-1;;;;;435:5:4;421:10;:19;413:58;;;;;-1:-1:-1;;;413:58:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;413:58:4;;;;;;;;;;;;;;;481:5;:16;;-1:-1:-1;;;;;;481:16:4;-1:-1:-1;;;;;481:16:4;;;;;;;;;;349:155::o;704:150::-;778:5;;-1:-1:-1;;;;;778:5:4;764:10;:19;756:58;;;;;-1:-1:-1;;;756:58:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;756:58:4;;;;;;;;;;;;;;;824:7;;:23;;;-1:-1:-1;;;824:23:4;;-1:-1:-1;;;;;824:23:4;;;;;;;;;:7;;;;;-1:-1:-1;;824:23:4;;;;;-1:-1:-1;;824:23:4;;;;;;;-1:-1:-1;824:7:4;:23;;;5:2:-1;;;;30:1;27;20:12" - } - }, - "interface": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_factory", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "constant": true, - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "contract IDXswapFactory", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "pairOwners", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "feeTo", - "type": "address" - } - ], - "name": "setFeeTo", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "feeToSetter", - "type": "address" - } - ], - "name": "setFeeToSetter", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint8", - "name": "protocolFeeDenominator", - "type": "uint8" - } - ], - "name": "setProtocolFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - }, - { - "internalType": "uint32", - "name": "swapFee", - "type": "uint32" - } - ], - "name": "setSwapFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferPairOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "608060405234801561001057600080fd5b506040516106a43803806106a48339818101604052604081101561003357600080fd5b508051602090910151600080546001600160a01b039384166001600160a01b0319918216179091556002805493909216921691909117905561062a8061007a6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a2e74af611610066578063a2e74af614610136578063a6dab93f1461015c578063c45a01551461018a578063f2fde38b14610192578063f46901ed146101b857610093565b806317c06b34146100985780634e91f811146100da5780638da5cb5b146100fc5780639e68ceb814610104575b600080fd5b6100be600480360360208110156100ae57600080fd5b50356001600160a01b03166101de565b604080516001600160a01b039092168252519081900360200190f35b6100fa600480360360208110156100f057600080fd5b503560ff166101f9565b005b6100be6102b0565b6100fa6004803603604081101561011a57600080fd5b5080356001600160a01b0316906020013563ffffffff166102bf565b6100fa6004803603602081101561014c57600080fd5b50356001600160a01b03166103a6565b6100fa6004803603604081101561017257600080fd5b506001600160a01b0381358116916020013516610441565b6100be6104bc565b6100fa600480360360208110156101a857600080fd5b50356001600160a01b03166104cb565b6100fa600480360360208110156101ce57600080fd5b50356001600160a01b031661053a565b6001602052600090815260409020546001600160a01b031681565b6000546001600160a01b03163314610246576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051634e91f81160e01b815260ff8416600482015290516001600160a01b0390921691634e91f8119160248082019260009290919082900301818387803b15801561029557600080fd5b505af11580156102a9573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031681565b6000546001600160a01b03163314806102f157506001600160a01b038281166000908152600160205260409020541633145b610330576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600254604080516313cd19d760e31b81526001600160a01b03858116600483015263ffffffff8516602483015291519190921691639e68ceb891604480830192600092919082900301818387803b15801561038a57600080fd5b505af115801561039e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146103f3576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051635173a57b60e11b81526001600160a01b0384811660048301529151919092169163a2e74af691602480830192600092919082900301818387803b15801561029557600080fd5b6000546001600160a01b0316331461048e576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6002546001600160a01b031681565b6000546001600160a01b03163314610518576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610587576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6002546040805163f46901ed60e01b81526001600160a01b0384811660048301529151919092169163f46901ed91602480830192600092919082900301818387803b15801561029557600080fdfe4458737761704665655365747465723a20464f5242494444454e000000000000a265627a7a72315820a0be763e035529abb8cc9d7d753668d36fa96da26d709983f608f42e5b3d615964736f6c63430005100032", - "bin": "608060405234801561001057600080fd5b506040516106a43803806106a48339818101604052604081101561003357600080fd5b508051602090910151600080546001600160a01b039384166001600160a01b0319918216179091556002805493909216921691909117905561062a8061007a6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a2e74af611610066578063a2e74af614610136578063a6dab93f1461015c578063c45a01551461018a578063f2fde38b14610192578063f46901ed146101b857610093565b806317c06b34146100985780634e91f811146100da5780638da5cb5b146100fc5780639e68ceb814610104575b600080fd5b6100be600480360360208110156100ae57600080fd5b50356001600160a01b03166101de565b604080516001600160a01b039092168252519081900360200190f35b6100fa600480360360208110156100f057600080fd5b503560ff166101f9565b005b6100be6102b0565b6100fa6004803603604081101561011a57600080fd5b5080356001600160a01b0316906020013563ffffffff166102bf565b6100fa6004803603602081101561014c57600080fd5b50356001600160a01b03166103a6565b6100fa6004803603604081101561017257600080fd5b506001600160a01b0381358116916020013516610441565b6100be6104bc565b6100fa600480360360208110156101a857600080fd5b50356001600160a01b03166104cb565b6100fa600480360360208110156101ce57600080fd5b50356001600160a01b031661053a565b6001602052600090815260409020546001600160a01b031681565b6000546001600160a01b03163314610246576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051634e91f81160e01b815260ff8416600482015290516001600160a01b0390921691634e91f8119160248082019260009290919082900301818387803b15801561029557600080fd5b505af11580156102a9573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031681565b6000546001600160a01b03163314806102f157506001600160a01b038281166000908152600160205260409020541633145b610330576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600254604080516313cd19d760e31b81526001600160a01b03858116600483015263ffffffff8516602483015291519190921691639e68ceb891604480830192600092919082900301818387803b15801561038a57600080fd5b505af115801561039e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146103f3576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051635173a57b60e11b81526001600160a01b0384811660048301529151919092169163a2e74af691602480830192600092919082900301818387803b15801561029557600080fd5b6000546001600160a01b0316331461048e576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6002546001600160a01b031681565b6000546001600160a01b03163314610518576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610587576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6002546040805163f46901ed60e01b81526001600160a01b0384811660048301529151919092169163f46901ed91602480830192600092919082900301818387803b15801561029557600080fdfe4458737761704665655365747465723a20464f5242494444454e000000000000a265627a7a72315820a0be763e035529abb8cc9d7d753668d36fa96da26d709983f608f42e5b3d615964736f6c63430005100032", - "bin-runtime": "608060405234801561001057600080fd5b50600436106100935760003560e01c8063a2e74af611610066578063a2e74af614610136578063a6dab93f1461015c578063c45a01551461018a578063f2fde38b14610192578063f46901ed146101b857610093565b806317c06b34146100985780634e91f811146100da5780638da5cb5b146100fc5780639e68ceb814610104575b600080fd5b6100be600480360360208110156100ae57600080fd5b50356001600160a01b03166101de565b604080516001600160a01b039092168252519081900360200190f35b6100fa600480360360208110156100f057600080fd5b503560ff166101f9565b005b6100be6102b0565b6100fa6004803603604081101561011a57600080fd5b5080356001600160a01b0316906020013563ffffffff166102bf565b6100fa6004803603602081101561014c57600080fd5b50356001600160a01b03166103a6565b6100fa6004803603604081101561017257600080fd5b506001600160a01b0381358116916020013516610441565b6100be6104bc565b6100fa600480360360208110156101a857600080fd5b50356001600160a01b03166104cb565b6100fa600480360360208110156101ce57600080fd5b50356001600160a01b031661053a565b6001602052600090815260409020546001600160a01b031681565b6000546001600160a01b03163314610246576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051634e91f81160e01b815260ff8416600482015290516001600160a01b0390921691634e91f8119160248082019260009290919082900301818387803b15801561029557600080fd5b505af11580156102a9573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031681565b6000546001600160a01b03163314806102f157506001600160a01b038281166000908152600160205260409020541633145b610330576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600254604080516313cd19d760e31b81526001600160a01b03858116600483015263ffffffff8516602483015291519190921691639e68ceb891604480830192600092919082900301818387803b15801561038a57600080fd5b505af115801561039e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146103f3576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051635173a57b60e11b81526001600160a01b0384811660048301529151919092169163a2e74af691602480830192600092919082900301818387803b15801561029557600080fd5b6000546001600160a01b0316331461048e576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6002546001600160a01b031681565b6000546001600160a01b03163314610518576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610587576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6002546040805163f46901ed60e01b81526001600160a01b0384811660048301529151919092169163f46901ed91602480830192600092919082900301818387803b15801561029557600080fdfe4458737761704665655365747465723a20464f5242494444454e000000000000a265627a7a72315820a0be763e035529abb8cc9d7d753668d36fa96da26d709983f608f42e5b3d615964736f6c63430005100032", - "srcmap": "69:1398:4:-;;;215:128;8:9:-1;5:2;;;30:1;27;20:12;5:2;215:128:4;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;215:128:4;;;;;;;278:5;:14;;-1:-1:-1;;;;;278:14:4;;;-1:-1:-1;;;;;;278:14:4;;;;;;302:7;:34;;;;;;;;;;;;;;-1:-1:-1;;;;69:1398:4;;;;", - "srcmap-runtime": "69:1398:4:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;69:1398:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;126:45;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;126:45:4;-1:-1:-1;;;;;126:45:4;;:::i;:::-;;;;-1:-1:-1;;;;;126:45:4;;;;;;;;;;;;;;1044:194;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1044:194:4;;;;:::i;:::-;;100:20;;;:::i;1248:217::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1248:217:4;;-1:-1:-1;;;;;1248:217:4;;;;;;;;:::i;860:174::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;860:174:4;-1:-1:-1;;;;;860:174:4;;:::i;514:184::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;514:184:4;;;;;;;;;;:::i;177:29::-;;;:::i;349:155::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;349:155:4;-1:-1:-1;;;;;349:155:4;;:::i;704:150::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;704:150:4;-1:-1:-1;;;;;704:150:4;;:::i;126:45::-;;;;;;;;;;;;-1:-1:-1;;;;;126:45:4;;:::o;1044:194::-;1139:5;;-1:-1:-1;;;;;1139:5:4;1125:10;:19;1117:58;;;;;-1:-1:-1;;;1117:58:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1117:58:4;;;;;;;;;;;;;;;1185:7;;:46;;;-1:-1:-1;;;1185:46:4;;;;;;;;;;;-1:-1:-1;;;;;1185:7:4;;;;-1:-1:-1;;1185:46:4;;;;;-1:-1:-1;;1185:46:4;;;;;;;;-1:-1:-1;1185:7:4;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;1185:46:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1185:46:4;;;;1044:194;:::o;100:20::-;;;-1:-1:-1;;;;;100:20:4;;:::o;1248:217::-;1340:5;;-1:-1:-1;;;;;1340:5:4;1326:10;:19;;1325:59;;-1:-1:-1;;;;;;1366:16:4;;;;;;;-1:-1:-1;1366:16:4;;;;;;;1352:10;:30;1325:59;1317:98;;;;;-1:-1:-1;;;1317:98:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1317:98:4;;;;;;;;;;;;;;;1425:7;;:33;;;-1:-1:-1;;;1425:33:4;;-1:-1:-1;;;;;1425:33:4;;;;;;;;;;;;;;;;:7;;;;;:18;;:33;;;;;-1:-1:-1;;1425:33:4;;;;;;;-1:-1:-1;1425:7:4;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;1425:33:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1425:33:4;;;;1248:217;;:::o;860:174::-;946:5;;-1:-1:-1;;;;;946:5:4;932:10;:19;924:58;;;;;-1:-1:-1;;;924:58:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;924:58:4;;;;;;;;;;;;;;;992:7;;:35;;;-1:-1:-1;;;992:35:4;;-1:-1:-1;;;;;992:35:4;;;;;;;;;:7;;;;;:22;;:35;;;;;-1:-1:-1;;992:35:4;;;;;;;-1:-1:-1;992:7:4;:35;;;5:2:-1;;;;30:1;27;20:12;514:184:4;618:5;;-1:-1:-1;;;;;618:5:4;604:10;:19;596:58;;;;;-1:-1:-1;;;596:58:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;596:58:4;;;;;;;;;;;;;;;-1:-1:-1;;;;;664:16:4;;;;;;;-1:-1:-1;664:16:4;;;;;:27;;-1:-1:-1;;;;;;664:27:4;;;;;;;;514:184::o;177:29::-;;;-1:-1:-1;;;;;177:29:4;;:::o;349:155::-;435:5;;-1:-1:-1;;;;;435:5:4;421:10;:19;413:58;;;;;-1:-1:-1;;;413:58:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;413:58:4;;;;;;;;;;;;;;;481:5;:16;;-1:-1:-1;;;;;;481:16:4;-1:-1:-1;;;;;481:16:4;;;;;;;;;;349:155::o;704:150::-;778:5;;-1:-1:-1;;;;;778:5:4;764:10;:19;756:58;;;;;-1:-1:-1;;;756:58:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;756:58:4;;;;;;;;;;;;;;;824:7;;:23;;;-1:-1:-1;;;824:23:4;;-1:-1:-1;;;;;824:23:4;;;;;;;;;:7;;;;;-1:-1:-1;;824:23:4;;;;;-1:-1:-1;;824:23:4;;;;;;;-1:-1:-1;824:7:4;:23;;;5:2:-1;;;;30:1;27;20:12" - }, - "contracts/DXswapPair.sol:DXswapPair": { - "abi": [ - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Burn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "name": "Mint", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Swap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint112", - "name": "reserve0", - "type": "uint112" - }, - { - "indexed": false, - "internalType": "uint112", - "name": "reserve1", - "type": "uint112" - } - ], - "name": "Sync", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "MINIMUM_LIQUIDITY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "burn", - "outputs": [ - { - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getReserves", - "outputs": [ - { - "internalType": "uint112", - "name": "_reserve0", - "type": "uint112" - }, - { - "internalType": "uint112", - "name": "_reserve1", - "type": "uint112" - }, - { - "internalType": "uint32", - "name": "_blockTimestampLast", - "type": "uint32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "_token0", - "type": "address" - }, - { - "internalType": "address", - "name": "_token1", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "kLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "liquidity", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "price0CumulativeLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "price1CumulativeLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint32", - "name": "_swapFee", - "type": "uint32" - } - ], - "name": "setSwapFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "skim", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "swap", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "swapFee", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "sync", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "token0", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "token1", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "6080604052600c805463ffffffff191660191790556001600d5534801561002557600080fd5b50604051469080605261256f8239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561245e806101116000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH1 0x19 OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0xD SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD CHAINID SWAP1 DUP1 PUSH1 0x52 PUSH2 0x256F DUP3 CODECOPY PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB PUSH1 0x52 ADD DUP3 KECCAK256 DUP3 DUP3 ADD DUP3 MSTORE PUSH1 0x6 DUP4 MSTORE PUSH6 0x44587377617 PUSH1 0xD4 SHL PUSH1 0x20 SWAP4 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD DUP4 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL SWAP1 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x3649D708A7ABF9E212D0A587955EAD4123223014B2E46201DFB587457CBD4591 DUP2 DUP4 ADD MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP1 MSTORE DUP3 MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x3 SSTORE POP PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0x245E DUP1 PUSH2 0x111 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1CF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6A627842 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xBA9A7A56 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x583 JUMPI DUP1 PUSH4 0xD6D788C3 EQ PUSH2 0x5D4 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x5F7 JUMPI DUP1 PUSH4 0xFFF6CAE9 EQ PUSH2 0x625 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0xBA9A7A56 EQ PUSH2 0x545 JUMPI DUP1 PUSH4 0xBC25CF77 EQ PUSH2 0x54D JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xD21220A7 EQ PUSH2 0x57B JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0x89AFCB44 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x511 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x519 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x6A627842 EQ PUSH2 0x458 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x47E JUMPI DUP1 PUSH4 0x7464FC3D EQ PUSH2 0x4A4 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x485CC955 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x485CC955 EQ PUSH2 0x3F9 JUMPI DUP1 PUSH4 0x54CF2AEB EQ PUSH2 0x427 JUMPI DUP1 PUSH4 0x5909C0D5 EQ PUSH2 0x448 JUMPI DUP1 PUSH4 0x5A3D5493 EQ PUSH2 0x450 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x3D3 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x3F1 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x1AD JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x317 JUMPI DUP1 PUSH4 0xDFE1681 EQ PUSH2 0x357 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x37B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x395 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x22C0D9F EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x262 JUMPI DUP1 PUSH4 0x902F1AC EQ PUSH2 0x2DF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP4 ADD CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x62D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26A PUSH2 0xB7F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x28C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2D1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2E7 PUSH2 0xBA1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x32D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xBCB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x35F PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xBF1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xBF7 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xC91 JUMP JUMPDEST PUSH2 0x3DB PUSH2 0xCB5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xCBA JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x40F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xCC0 JUMP JUMPDEST PUSH2 0x42F PUSH2 0xD45 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xD51 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xD57 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD5D JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x494 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x105E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1076 JUMP JUMPDEST PUSH2 0x4F8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1088 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x26A PUSH2 0x142F JUMP JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x52F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x144E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x145B JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x563 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1461 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15CD JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15DC JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x17EF JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x60D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x18BF JUMP JUMPDEST PUSH2 0x260 PUSH2 0x18DC JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x679 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE DUP5 ISZERO ISZERO DUP1 PUSH2 0x68C JUMPI POP PUSH1 0x0 DUP5 GT JUMPDEST PUSH2 0x6C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23B6 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6D2 PUSH2 0xBA1 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP8 LT DUP1 ISZERO PUSH2 0x6F7 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP7 LT JUMPDEST PUSH2 0x732 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2394 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 SWAP1 DUP2 AND SWAP1 DUP10 AND DUP3 EQ DUP1 ISZERO SWAP1 PUSH2 0x770 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST PUSH2 0x7BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x445873776170506169723A20494E56414C49445F544F PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP11 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x7CB DUP3 DUP11 DUP14 PUSH2 0x1A3F JUMP JUMPDEST DUP10 ISZERO PUSH2 0x7DC JUMPI PUSH2 0x7DC DUP2 DUP11 DUP13 PUSH2 0x1A3F JUMP JUMPDEST DUP7 ISZERO PUSH2 0x897 JUMPI DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x78B94AE6 CALLER DUP14 DUP14 DUP13 DUP13 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x87E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x892 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8F1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x907 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x953 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x967 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x97D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP PUSH1 0x0 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP6 AND DUP11 SWAP1 SUB DUP4 GT PUSH2 0x9A0 JUMPI PUSH1 0x0 PUSH2 0x9AF JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 GT PUSH2 0x9CC JUMPI PUSH1 0x0 PUSH2 0x9DB JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 GT DUP1 PUSH2 0x9EC JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST PUSH2 0xA27 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23DC PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC SLOAD PUSH1 0x0 SWAP1 PUSH2 0xA64 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xA58 DUP8 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0xC SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0xA86 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH2 0xAB8 PUSH4 0x5F5E100 PUSH2 0xAAC PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP12 DUP2 AND SWAP1 DUP12 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xAC8 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST LT ISZERO PUSH2 0xB0B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x445873776170506169723A204B PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH2 0xB19 DUP5 DUP5 DUP9 DUP9 PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP14 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP13 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND SWAP2 CALLER SWAP2 PUSH32 0xD78AD95FA46C994B6551D0DA85FC275FE613CE37657FB8D5E3D130840159D822 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x44587377617 PUSH1 0xD4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP3 PUSH1 0x1 PUSH1 0x70 SHL DUP4 DIV SWAP1 SWAP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1E52 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x0 NOT EQ PUSH2 0xC7C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xC57 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE JUMPDEST PUSH2 0xC87 DUP5 DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD17 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x7 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xC SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0xDAB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0xDBB PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP4 SWAP6 POP SWAP2 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 PUSH2 0xED5 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xEF2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF00 DUP8 DUP8 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0xF3D JUMPI PUSH2 0xF29 PUSH2 0x3E8 PUSH2 0xA58 PUSH2 0xF24 DUP8 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0x2146 JUMP JUMPDEST SWAP9 POP PUSH2 0xF38 PUSH1 0x0 PUSH2 0x3E8 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xF8C JUMP JUMPDEST PUSH2 0xF89 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF5A DUP7 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF61 JUMPI INVALID JUMPDEST DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF7C DUP7 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF83 JUMPI INVALID JUMPDEST DIV PUSH2 0x222E JUMP JUMPDEST SWAP9 POP JUMPDEST PUSH1 0x0 DUP10 GT PUSH2 0xFCB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x236B PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFD5 DUP11 DUP11 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xFE1 DUP7 DUP7 DUP11 DUP11 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x1011 JUMPI PUSH1 0x8 SLOAD PUSH2 0x100D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP2 MLOAD CALLER SWAP3 PUSH32 0x4C209B5FC8AD50758F13E2E1088BA56A560DFF690A1C6FEF26394F4C03821C4F SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP SWAP5 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xB SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x10D7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0x10E7 PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP5 SWAP7 POP SWAP3 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP4 SWAP2 AND SWAP2 PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1143 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1157 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x116D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ADDRESS PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0x1204 DUP9 DUP9 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x121B DUP5 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x1222 JUMPI INVALID JUMPDEST DIV SWAP11 POP DUP1 PUSH2 0x1236 DUP5 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x123D JUMPI INVALID JUMPDEST DIV SWAP10 POP PUSH1 0x0 DUP12 GT DUP1 ISZERO PUSH2 0x1250 JUMPI POP PUSH1 0x0 DUP11 GT JUMPDEST PUSH2 0x128B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2401 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1295 ADDRESS DUP5 PUSH2 0x2246 JUMP JUMPDEST PUSH2 0x12A0 DUP8 DUP14 DUP14 PUSH2 0x1A3F JUMP JUMPDEST PUSH2 0x12AB DUP7 DUP14 DUP13 PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1305 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x131B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1367 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x137B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP PUSH2 0x13A1 DUP6 DUP6 DUP12 DUP12 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x13D1 JUMPI PUSH1 0x8 SLOAD PUSH2 0x13CD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP13 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND SWAP3 CALLER SWAP3 PUSH32 0xDCCD412F0B1252819CB1FD330B93224CA42612892BB3F4F789976E6D81936496 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP POP POP POP POP POP PUSH1 0x1 PUSH1 0xD DUP2 SWAP1 SSTORE POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x445853 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST PUSH2 0x3E8 DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x14AD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP5 SWAP1 SWAP4 AND SWAP3 PUSH2 0x155C SWAP3 DUP6 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 DUP6 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1533 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1549 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x15C3 SWAP3 DUP5 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST TIMESTAMP DUP5 LT ISZERO PUSH2 0x1637 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x11161CDDD85C115490CC8C0E8811561412549151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP12 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP6 ADD DUP3 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x102 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH2 0x122 DUP1 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP7 ADD DUP7 MSTORE PUSH2 0x142 DUP5 ADD DUP1 DUP3 MSTORE DUP7 MLOAD SWAP7 DUP4 ADD SWAP7 SWAP1 SWAP7 KECCAK256 SWAP6 DUP4 SWAP1 MSTORE PUSH2 0x162 DUP5 ADD DUP1 DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0xFF DUP10 AND PUSH2 0x182 DUP6 ADD MSTORE PUSH2 0x1A2 DUP5 ADD DUP9 SWAP1 MSTORE PUSH2 0x1C2 DUP5 ADD DUP8 SWAP1 MSTORE MLOAD SWAP2 SWAP4 SWAP3 PUSH2 0x1E2 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1752 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1788 JUMPI POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x17D9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617045524332303A20494E56414C49445F5349474E41545552450000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x17E4 DUP10 DUP10 DUP10 PUSH2 0x1E52 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1846 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3E8 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x18A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A20464F5242494444454E5F46454500000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x1928 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x1A38 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1979 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x198D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x19A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A04 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x1 PUSH1 0xD SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH32 0x7472616E7366657228616464726573732C75696E743235362900000000000000 PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP7 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP5 MSTORE SWAP2 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP2 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1AEC JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1ACD JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1B4E JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1B53 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x1B81 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x1B81 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x1BD2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A205452414E534645525F4641494C45440000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0x1BF4 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0x1BF1 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 GT DUP1 ISZERO SWAP1 PUSH2 0x1CAA JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 GT ISZERO JUMPDEST PUSH2 0x1CF2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x445873776170506169723A204F564552464C4F57 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH4 0xFFFFFFFF TIMESTAMP DUP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV DUP2 AND DUP3 SUB SWAP1 DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1D22 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 AND ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1D36 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1DA7 JUMPI DUP1 PUSH4 0xFFFFFFFF AND PUSH2 0x1D64 DUP6 PUSH2 0x1D4F DUP7 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x22F6 AND JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE PUSH4 0xFFFFFFFF DUP2 AND PUSH2 0x1D8F DUP5 PUSH2 0x1D4F DUP8 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP9 DUP2 AND SWAP2 SWAP1 SWAP2 OR PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x70 SHL NOT AND PUSH1 0x1 PUSH1 0x70 SHL DUP9 DUP4 AND DUP2 MUL SWAP2 SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0xE0 SHL PUSH4 0xFFFFFFFF DUP8 AND MUL OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP4 DIV SWAP1 SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x1C411E9A96E071241C2F21F7726B17AE89E3CAB4C78BE50E062B03A9FFFBBAD1 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1EDD SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x1F12 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17E7E58 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1FE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x17FB8215 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2FF7042A SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2036 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x204A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2060 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO DUP1 ISZERO SWAP6 POP SWAP2 SWAP3 POP SWAP1 PUSH2 0x2131 JUMPI DUP1 ISZERO PUSH2 0x212C JUMPI PUSH1 0x0 PUSH2 0x20A3 PUSH2 0xF24 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 DUP2 AND SWAP1 DUP10 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x20B0 DUP4 PUSH2 0x2146 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x2129 JUMPI PUSH1 0x0 PUSH2 0x20DE PUSH2 0x20CF DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2105 DUP4 PUSH2 0x20F9 DUP7 PUSH1 0xFF DUP11 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0x2112 JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 ISZERO PUSH2 0x2125 JUMPI PUSH2 0x2125 DUP9 DUP3 PUSH2 0x2198 JUMP JUMPDEST POP POP POP JUMPDEST POP POP JUMPDEST PUSH2 0x213D JUMP JUMPDEST DUP1 ISZERO PUSH2 0x213D JUMPI PUSH1 0x0 PUSH1 0xB SSTORE JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 GT ISZERO PUSH2 0x2189 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x2 DUP3 DIV ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2183 JUMPI DUP1 SWAP2 POP PUSH1 0x2 DUP2 DUP3 DUP6 DUP2 PUSH2 0x2172 JUMPI INVALID JUMPDEST DIV ADD DUP2 PUSH2 0x217B JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x215B JUMP JUMPDEST POP PUSH2 0x2193 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2193 JUMPI POP PUSH1 0x1 JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x21AB SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x21D6 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x223D JUMPI DUP2 PUSH2 0x223F JUMP JUMPDEST DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x226F SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SLOAD PUSH2 0x229C SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH1 0x1 PUSH1 0x70 SHL MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP5 AND DUP2 PUSH2 0x2313 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F 0x4D 0x49 0x4E SLOAD GASLIMIT DIFFICULTY DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4F SSTORE SLOAD POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x49 0x4E POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F TIMESTAMP SSTORE MSTORE 0x4E GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 0xBC SWAP15 MSTORE 0xC6 0x22 0xA7 RETURN PUSH25 0xA026EE16432D9BBC35CC0DB3D76CFAFD5D67631F595A9B1864 PUSH20 0x6F6C63430005100032454950373132446F6D6169 PUSH15 0x28737472696E67206E616D652C7374 PUSH19 0x696E672076657273696F6E2C75696E74323536 KECCAK256 PUSH4 0x6861696E 0x49 PUSH5 0x2C61646472 PUSH6 0x737320766572 PUSH10 0x6679696E67436F6E7472 PUSH2 0x6374 0x29 ", - "sourceMap": "278:10031:5:-;;;1094:26;;;-1:-1:-1;;1094:26:5;1118:2;1094:26;;;;1160:25;;2242:58;5:2:-1;;;;30:1;27;20:12;5:2;-1:-1;1086:95:1;;990:7;;1086:95;;;;;;;;;;;;;;;;1215:4;;;;;;;;-1:-1:-1;;;1215:4:1;;;;;1249:10;;;;;;;;;;-1:-1:-1;;;1249:10:1;;;;1058:272;;;;;;;;;1199:22;1058:272;;;;1239:21;1058:272;;;;;;;;;;;1311:4;1058:272;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1058:272:1;;;;;;1035:305;;;;;;;;1016:16;:324;-1:-1:-1;2273:7:5;:20;;-1:-1:-1;;;;;;2273:20:5;2283:10;2273:20;;;-1:-1:-1;;278:10031:5;-1:-1:-1;278:10031:5;;" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1CF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6A627842 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xBA9A7A56 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x583 JUMPI DUP1 PUSH4 0xD6D788C3 EQ PUSH2 0x5D4 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x5F7 JUMPI DUP1 PUSH4 0xFFF6CAE9 EQ PUSH2 0x625 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0xBA9A7A56 EQ PUSH2 0x545 JUMPI DUP1 PUSH4 0xBC25CF77 EQ PUSH2 0x54D JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xD21220A7 EQ PUSH2 0x57B JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0x89AFCB44 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x511 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x519 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x6A627842 EQ PUSH2 0x458 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x47E JUMPI DUP1 PUSH4 0x7464FC3D EQ PUSH2 0x4A4 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x485CC955 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x485CC955 EQ PUSH2 0x3F9 JUMPI DUP1 PUSH4 0x54CF2AEB EQ PUSH2 0x427 JUMPI DUP1 PUSH4 0x5909C0D5 EQ PUSH2 0x448 JUMPI DUP1 PUSH4 0x5A3D5493 EQ PUSH2 0x450 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x3D3 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x3F1 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x1AD JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x317 JUMPI DUP1 PUSH4 0xDFE1681 EQ PUSH2 0x357 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x37B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x395 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x22C0D9F EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x262 JUMPI DUP1 PUSH4 0x902F1AC EQ PUSH2 0x2DF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP4 ADD CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x62D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26A PUSH2 0xB7F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x28C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2D1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2E7 PUSH2 0xBA1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x32D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xBCB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x35F PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xBF1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xBF7 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xC91 JUMP JUMPDEST PUSH2 0x3DB PUSH2 0xCB5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xCBA JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x40F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xCC0 JUMP JUMPDEST PUSH2 0x42F PUSH2 0xD45 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xD51 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xD57 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD5D JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x494 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x105E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1076 JUMP JUMPDEST PUSH2 0x4F8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1088 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x26A PUSH2 0x142F JUMP JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x52F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x144E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x145B JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x563 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1461 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15CD JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15DC JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x17EF JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x60D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x18BF JUMP JUMPDEST PUSH2 0x260 PUSH2 0x18DC JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x679 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE DUP5 ISZERO ISZERO DUP1 PUSH2 0x68C JUMPI POP PUSH1 0x0 DUP5 GT JUMPDEST PUSH2 0x6C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23B6 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6D2 PUSH2 0xBA1 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP8 LT DUP1 ISZERO PUSH2 0x6F7 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP7 LT JUMPDEST PUSH2 0x732 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2394 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 SWAP1 DUP2 AND SWAP1 DUP10 AND DUP3 EQ DUP1 ISZERO SWAP1 PUSH2 0x770 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST PUSH2 0x7BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x445873776170506169723A20494E56414C49445F544F PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP11 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x7CB DUP3 DUP11 DUP14 PUSH2 0x1A3F JUMP JUMPDEST DUP10 ISZERO PUSH2 0x7DC JUMPI PUSH2 0x7DC DUP2 DUP11 DUP13 PUSH2 0x1A3F JUMP JUMPDEST DUP7 ISZERO PUSH2 0x897 JUMPI DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x78B94AE6 CALLER DUP14 DUP14 DUP13 DUP13 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x87E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x892 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8F1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x907 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x953 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x967 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x97D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP PUSH1 0x0 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP6 AND DUP11 SWAP1 SUB DUP4 GT PUSH2 0x9A0 JUMPI PUSH1 0x0 PUSH2 0x9AF JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 GT PUSH2 0x9CC JUMPI PUSH1 0x0 PUSH2 0x9DB JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 GT DUP1 PUSH2 0x9EC JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST PUSH2 0xA27 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23DC PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC SLOAD PUSH1 0x0 SWAP1 PUSH2 0xA64 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xA58 DUP8 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0xC SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0xA86 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH2 0xAB8 PUSH4 0x5F5E100 PUSH2 0xAAC PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP12 DUP2 AND SWAP1 DUP12 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xAC8 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST LT ISZERO PUSH2 0xB0B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x445873776170506169723A204B PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH2 0xB19 DUP5 DUP5 DUP9 DUP9 PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP14 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP13 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND SWAP2 CALLER SWAP2 PUSH32 0xD78AD95FA46C994B6551D0DA85FC275FE613CE37657FB8D5E3D130840159D822 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x44587377617 PUSH1 0xD4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP3 PUSH1 0x1 PUSH1 0x70 SHL DUP4 DIV SWAP1 SWAP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1E52 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x0 NOT EQ PUSH2 0xC7C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xC57 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE JUMPDEST PUSH2 0xC87 DUP5 DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD17 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x7 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xC SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0xDAB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0xDBB PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP4 SWAP6 POP SWAP2 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 PUSH2 0xED5 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xEF2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF00 DUP8 DUP8 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0xF3D JUMPI PUSH2 0xF29 PUSH2 0x3E8 PUSH2 0xA58 PUSH2 0xF24 DUP8 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0x2146 JUMP JUMPDEST SWAP9 POP PUSH2 0xF38 PUSH1 0x0 PUSH2 0x3E8 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xF8C JUMP JUMPDEST PUSH2 0xF89 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF5A DUP7 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF61 JUMPI INVALID JUMPDEST DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF7C DUP7 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF83 JUMPI INVALID JUMPDEST DIV PUSH2 0x222E JUMP JUMPDEST SWAP9 POP JUMPDEST PUSH1 0x0 DUP10 GT PUSH2 0xFCB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x236B PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFD5 DUP11 DUP11 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xFE1 DUP7 DUP7 DUP11 DUP11 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x1011 JUMPI PUSH1 0x8 SLOAD PUSH2 0x100D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP2 MLOAD CALLER SWAP3 PUSH32 0x4C209B5FC8AD50758F13E2E1088BA56A560DFF690A1C6FEF26394F4C03821C4F SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP SWAP5 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xB SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x10D7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0x10E7 PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP5 SWAP7 POP SWAP3 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP4 SWAP2 AND SWAP2 PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1143 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1157 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x116D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ADDRESS PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0x1204 DUP9 DUP9 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x121B DUP5 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x1222 JUMPI INVALID JUMPDEST DIV SWAP11 POP DUP1 PUSH2 0x1236 DUP5 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x123D JUMPI INVALID JUMPDEST DIV SWAP10 POP PUSH1 0x0 DUP12 GT DUP1 ISZERO PUSH2 0x1250 JUMPI POP PUSH1 0x0 DUP11 GT JUMPDEST PUSH2 0x128B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2401 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1295 ADDRESS DUP5 PUSH2 0x2246 JUMP JUMPDEST PUSH2 0x12A0 DUP8 DUP14 DUP14 PUSH2 0x1A3F JUMP JUMPDEST PUSH2 0x12AB DUP7 DUP14 DUP13 PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1305 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x131B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1367 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x137B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP PUSH2 0x13A1 DUP6 DUP6 DUP12 DUP12 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x13D1 JUMPI PUSH1 0x8 SLOAD PUSH2 0x13CD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP13 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND SWAP3 CALLER SWAP3 PUSH32 0xDCCD412F0B1252819CB1FD330B93224CA42612892BB3F4F789976E6D81936496 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP POP POP POP POP POP PUSH1 0x1 PUSH1 0xD DUP2 SWAP1 SSTORE POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x445853 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST PUSH2 0x3E8 DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x14AD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP5 SWAP1 SWAP4 AND SWAP3 PUSH2 0x155C SWAP3 DUP6 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 DUP6 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1533 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1549 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x15C3 SWAP3 DUP5 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST TIMESTAMP DUP5 LT ISZERO PUSH2 0x1637 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x11161CDDD85C115490CC8C0E8811561412549151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP12 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP6 ADD DUP3 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x102 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH2 0x122 DUP1 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP7 ADD DUP7 MSTORE PUSH2 0x142 DUP5 ADD DUP1 DUP3 MSTORE DUP7 MLOAD SWAP7 DUP4 ADD SWAP7 SWAP1 SWAP7 KECCAK256 SWAP6 DUP4 SWAP1 MSTORE PUSH2 0x162 DUP5 ADD DUP1 DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0xFF DUP10 AND PUSH2 0x182 DUP6 ADD MSTORE PUSH2 0x1A2 DUP5 ADD DUP9 SWAP1 MSTORE PUSH2 0x1C2 DUP5 ADD DUP8 SWAP1 MSTORE MLOAD SWAP2 SWAP4 SWAP3 PUSH2 0x1E2 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1752 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1788 JUMPI POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x17D9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617045524332303A20494E56414C49445F5349474E41545552450000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x17E4 DUP10 DUP10 DUP10 PUSH2 0x1E52 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1846 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3E8 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x18A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A20464F5242494444454E5F46454500000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x1928 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x1A38 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1979 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x198D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x19A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A04 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x1 PUSH1 0xD SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH32 0x7472616E7366657228616464726573732C75696E743235362900000000000000 PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP7 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP5 MSTORE SWAP2 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP2 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1AEC JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1ACD JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1B4E JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1B53 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x1B81 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x1B81 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x1BD2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A205452414E534645525F4641494C45440000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0x1BF4 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0x1BF1 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 GT DUP1 ISZERO SWAP1 PUSH2 0x1CAA JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 GT ISZERO JUMPDEST PUSH2 0x1CF2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x445873776170506169723A204F564552464C4F57 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH4 0xFFFFFFFF TIMESTAMP DUP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV DUP2 AND DUP3 SUB SWAP1 DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1D22 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 AND ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1D36 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1DA7 JUMPI DUP1 PUSH4 0xFFFFFFFF AND PUSH2 0x1D64 DUP6 PUSH2 0x1D4F DUP7 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x22F6 AND JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE PUSH4 0xFFFFFFFF DUP2 AND PUSH2 0x1D8F DUP5 PUSH2 0x1D4F DUP8 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP9 DUP2 AND SWAP2 SWAP1 SWAP2 OR PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x70 SHL NOT AND PUSH1 0x1 PUSH1 0x70 SHL DUP9 DUP4 AND DUP2 MUL SWAP2 SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0xE0 SHL PUSH4 0xFFFFFFFF DUP8 AND MUL OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP4 DIV SWAP1 SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x1C411E9A96E071241C2F21F7726B17AE89E3CAB4C78BE50E062B03A9FFFBBAD1 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1EDD SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x1F12 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17E7E58 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1FE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x17FB8215 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2FF7042A SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2036 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x204A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2060 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO DUP1 ISZERO SWAP6 POP SWAP2 SWAP3 POP SWAP1 PUSH2 0x2131 JUMPI DUP1 ISZERO PUSH2 0x212C JUMPI PUSH1 0x0 PUSH2 0x20A3 PUSH2 0xF24 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 DUP2 AND SWAP1 DUP10 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x20B0 DUP4 PUSH2 0x2146 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x2129 JUMPI PUSH1 0x0 PUSH2 0x20DE PUSH2 0x20CF DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2105 DUP4 PUSH2 0x20F9 DUP7 PUSH1 0xFF DUP11 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0x2112 JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 ISZERO PUSH2 0x2125 JUMPI PUSH2 0x2125 DUP9 DUP3 PUSH2 0x2198 JUMP JUMPDEST POP POP POP JUMPDEST POP POP JUMPDEST PUSH2 0x213D JUMP JUMPDEST DUP1 ISZERO PUSH2 0x213D JUMPI PUSH1 0x0 PUSH1 0xB SSTORE JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 GT ISZERO PUSH2 0x2189 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x2 DUP3 DIV ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2183 JUMPI DUP1 SWAP2 POP PUSH1 0x2 DUP2 DUP3 DUP6 DUP2 PUSH2 0x2172 JUMPI INVALID JUMPDEST DIV ADD DUP2 PUSH2 0x217B JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x215B JUMP JUMPDEST POP PUSH2 0x2193 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2193 JUMPI POP PUSH1 0x1 JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x21AB SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x21D6 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x223D JUMPI DUP2 PUSH2 0x223F JUMP JUMPDEST DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x226F SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SLOAD PUSH2 0x229C SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH1 0x1 PUSH1 0x70 SHL MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP5 AND DUP2 PUSH2 0x2313 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F 0x4D 0x49 0x4E SLOAD GASLIMIT DIFFICULTY DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4F SSTORE SLOAD POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x49 0x4E POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F TIMESTAMP SSTORE MSTORE 0x4E GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 0xBC SWAP15 MSTORE 0xC6 0x22 0xA7 RETURN PUSH25 0xA026EE16432D9BBC35CC0DB3D76CFAFD5D67631F595A9B1864 PUSH20 0x6F6C634300051000320000000000000000000000 ", - "sourceMap": "278:10031:5:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;278:10031:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7849:1881;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;7849:1881:5;;;;;;;;-1:-1:-1;;;;;7849:1881:5;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;7849:1881:5;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7849:1881:5;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;7849:1881:5;;-1:-1:-1;7849:1881:5;-1:-1:-1;7849:1881:5;:::i;:::-;;175:38:1;;;:::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;175:38:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1329:227:5;;;:::i;:::-;;;;-1:-1:-1;;;;;1329:227:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2161:144:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2161:144:1;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;571:21:5;;;:::i;:::-;;;;-1:-1:-1;;;;;571:21:5;;;;;;;;;;;;;;303:24:1;;;:::i;:::-;;;;;;;;;;;;;;;;2453:295;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2453:295:1;;;;;;;;;;;;;;;;;:::i;589:108::-;;;:::i;262:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;448:31;;;:::i;2362:207:5:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2362:207:5;;;;;;;;;;:::i;1094:26::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;915:32;;;:::i;953:::-;;;:::i;4966:1220::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4966:1220:5;-1:-1:-1;;;;;4966:1220:5;;:::i;333:41:1:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;333:41:1;-1:-1:-1;;;;;333:41:1;;:::i;991:17:5:-;;;:::i;703:38:1:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;703:38:1;-1:-1:-1;;;;;703:38:1;;:::i;6295:1445:5:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6295:1445:5;-1:-1:-1;;;;;6295:1445:5;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;219:37:1;;;:::i;2311:136::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2311:136:1;;;;;;;;:::i;396:46:5:-;;;:::i;9776:329::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9776:329:5;-1:-1:-1;;;;;9776:329:5;;:::i;543:22::-;;;:::i;598:21::-;;;:::i;2754:666:1:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;2754:666:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2754:666:1;;;;;;;;:::i;2627:254:5:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2627:254:5;;;;:::i;380:61:1:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;380:61:1;;;;;;;;;;:::i;10151:156:5:-;;;:::i;7849:1881::-;1225:8;;1237:1;1225:13;1217:44;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;;;;1282:1;1271:8;:12;7962:14;;;;:32;;;7993:1;7980:10;:14;7962:32;7954:83;;;;-1:-1:-1;;;7954:83:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8048:17;8067;8089:13;:11;:13::i;:::-;-1:-1:-1;8047:55:5;;-1:-1:-1;8047:55:5;-1:-1:-1;;;;;;8135:22:5;;;;:48;;;;-1:-1:-1;;;;;;8161:22:5;;;;8135:48;8127:95;;;;-1:-1:-1;;;8127:95:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8362:6;;8396;;8233:13;;;;-1:-1:-1;;;;;8362:6:5;;;;8396;;;;8420:13;;;;;;;:30;;-1:-1:-1;;;;;;8437:13:5;;;;;;;;8420:30;8412:65;;;;;-1:-1:-1;;;8412:65:5;;;;;;;;;;;;-1:-1:-1;;;8412:65:5;;;;;;;;;;;;;;;8491:14;;8487:58;;8507:38;8521:7;8530:2;8534:10;8507:13;:38::i;:::-;8593:14;;8589:58;;8609:38;8623:7;8632:2;8636:10;8609:13;:38::i;:::-;8695:15;;8691:91;;8726:2;-1:-1:-1;;;;;8712:28:5;;8741:10;8753;8765;8777:4;;8712:70;;;;;;;;;;;;;-1:-1:-1;;;;;8712:70:5;-1:-1:-1;;;;;8712:70:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;8712:70:5;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8712:70:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8712:70:5;;;;8691:91;8803:40;;;-1:-1:-1;;;8803:40:5;;8837:4;8803:40;;;;;;-1:-1:-1;;;;;8803:25:5;;;-1:-1:-1;;8803:40:5;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;8803:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8803:40:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8803:40:5;8864;;;-1:-1:-1;;;8864:40:5;;8898:4;8864:40;;;;;;8803;;-1:-1:-1;;;;;;8864:25:5;;;-1:-1:-1;;8864:40:5;;;;;8803;;8864;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;8864:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8864:40:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8864:40:5;;-1:-1:-1;8924:14:5;;-1:-1:-1;;;;;;;8952:22:5;;;;;8941:33;;:75;;9015:1;8941:75;;;-1:-1:-1;;;;;8989:22:5;;;;;8977:35;;8941:75;8924:92;-1:-1:-1;9026:14:5;-1:-1:-1;;;;;9054:22:5;;;;;9043:33;;:75;;9117:1;9043:75;;;-1:-1:-1;;;;;9091:22:5;;;;;9079:35;;9043:75;9026:92;;9148:1;9136:9;:13;:30;;;;9165:1;9153:9;:13;9136:30;9128:80;;;;-1:-1:-1;;;9128:80:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9356:7;;9294:21;;9318:47;;9342:22;;:9;;9356:7;;;;;9342:13;:22;:::i;:::-;9318:19;:8;9331:5;9318:19;:12;:19;:::i;:::-;:23;:47;:23;:47;:::i;:::-;9439:7;;9294:71;;-1:-1:-1;9377:21:5;;9401:47;;9425:22;;:9;;9439:7;;;;;9425:13;:22;:::i;9401:47::-;9377:71;-1:-1:-1;9510:44:5;9545:8;9510:30;-1:-1:-1;;;;;9510:15:5;;;;:30;;:19;:30::i;:::-;:34;:44;:34;:44;:::i;:::-;9468:38;:16;9489;9468:38;:20;:38;:::i;:::-;:86;;9460:112;;;;;-1:-1:-1;;;9460:112:5;;;;;;;;;;;;-1:-1:-1;;;9460:112:5;;;;;;;;;;;;;;;1293:1;;9593:49;9601:8;9611;9621:9;9632;9593:7;:49::i;:::-;9657:66;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9657:66:5;;;9662:10;;9657:66;;;;;;;;;-1:-1:-1;;1315:1:5;1304:8;:12;-1:-1:-1;;;;;;;;;7849:1881:5:o;175:38:1:-;;;;;;;;;;;;;-1:-1:-1;;;175:38:1;;;;;:::o;1329:227:5:-;1461:8;;-1:-1:-1;;;;;1461:8:5;;;;-1:-1:-1;;;1491:8:5;;;;;;-1:-1:-1;;;1531:18:5;;;;;1329:227::o;2161:144:1:-;2225:4;2241:36;2250:10;2262:7;2271:5;2241:8;:36::i;:::-;-1:-1:-1;2294:4:1;2161:144;;;;;:::o;571:21:5:-;;;-1:-1:-1;;;;;571:21:5;;:::o;303:24:1:-;;;;:::o;2453:295::-;-1:-1:-1;;;;;2551:15:1;;2531:4;2551:15;;;:9;:15;;;;;;;;2567:10;2551:27;;;;;;;;-1:-1:-1;;2551:39:1;2547:138;;-1:-1:-1;;;;;2636:15:1;;;;;;:9;:15;;;;;;;;2652:10;2636:27;;;;;;;;:38;;2668:5;2636:31;:38::i;:::-;-1:-1:-1;;;;;2606:15:1;;;;;;:9;:15;;;;;;;;2622:10;2606:27;;;;;;;:68;2547:138;2694:26;2704:4;2710:2;2714:5;2694:9;:26::i;:::-;-1:-1:-1;2737:4:1;2453:295;;;;;:::o;589:108::-;631:66;589:108;:::o;262:35::-;295:2;262:35;:::o;448:31::-;;;;:::o;2362:207:5:-;2457:7;;-1:-1:-1;;;;;2457:7:5;2443:10;:21;2435:55;;;;;-1:-1:-1;;;2435:55:5;;;;;;;;;;;;-1:-1:-1;;;2435:55:5;;;;;;;;;;;;;;;2520:6;:16;;-1:-1:-1;;;;;2520:16:5;;;-1:-1:-1;;;;;;2520:16:5;;;;;;;2546:6;:16;;;;;;;;;;;2362:207::o;1094:26::-;;;;;;:::o;915:32::-;;;;:::o;953:::-;;;;:::o;4966:1220::-;5015:14;1225:8;;1237:1;1225:13;1217:44;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;;;;1282:1;1271:8;:12;;;1282:1;5083:13;:11;:13::i;:::-;-1:-1:-1;5144:6:5;;5137:39;;;-1:-1:-1;;;5137:39:5;;5170:4;5137:39;;;;;;5041:55;;-1:-1:-1;5041:55:5;;-1:-1:-1;;;;;;;;5144:6:5;;;;-1:-1:-1;;5137:39:5;;;;;;;;;;;;;;5144:6;5137:39;;;5:2:-1;;;;30:1;27;20:12;5:2;5137:39:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5137:39:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5137:39:5;5209:6;;5202:39;;;-1:-1:-1;;;5202:39:5;;5235:4;5202:39;;;;;;5137;;-1:-1:-1;;;;;;;;5209:6:5;;;;-1:-1:-1;;5202:39:5;;;;;5137;;5202;;;;;;;;5209:6;5202:39;;;5:2:-1;;;;30:1;27;20:12;5:2;5202:39:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5202:39:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5202:39:5;;-1:-1:-1;5251:12:5;5266:23;:8;-1:-1:-1;;;;;5266:23:5;;:12;:23::i;:::-;5251:38;-1:-1:-1;5299:12:5;5314:23;:8;-1:-1:-1;;;;;5314:23:5;;:12;:23::i;:::-;5299:38;;5348:10;5361:30;5370:9;5381;5361:8;:30::i;:::-;5401:17;5421:11;5348:43;;-1:-1:-1;5524:17:5;5520:347;;5569:54;437:5;5569:31;5579:20;:7;5591;5579:20;:11;:20;:::i;:::-;5569:9;:31::i;:54::-;5557:66;;5636:36;5650:1;437:5;5636;:36::i;:::-;5520:347;;;5770:86;-1:-1:-1;;;;;5779:37:5;;:25;:7;5791:12;5779:11;:25::i;:::-;:37;;;;;;-1:-1:-1;;;;;5818:37:5;;:25;:7;5830:12;5818:11;:25::i;:::-;:37;;;;;;5770:8;:86::i;:::-;5758:98;;5520:347;5896:1;5884:9;:13;5876:67;;;;-1:-1:-1;;;5876:67:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5953:20;5959:2;5963:9;5953:5;:20::i;:::-;5984:49;5992:8;6002;6012:9;6023;5984:7;:49::i;:::-;6047:5;6043:47;;;6081:8;;6062:28;;-1:-1:-1;;;;;6067:8:5;;;;-1:-1:-1;;;6081:8:5;;;6062:18;:28::i;:::-;6054:5;:36;6043:47;6145:34;;;;;;;;;;;;;;6150:10;;6145:34;;;;;;;;-1:-1:-1;;1315:1:5;1304:8;:12;-1:-1:-1;4966:1220:5;;;-1:-1:-1;;;;;;4966:1220:5:o;333:41:1:-;;;;;;;;;;;;;:::o;991:17:5:-;;;;:::o;703:38:1:-;;;;;;;;;;;;;:::o;6295:1445:5:-;6344:12;6358;1225:8;;1237:1;1225:13;1217:44;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;;;;1282:1;1271:8;:12;;;1282:1;6424:13;:11;:13::i;:::-;-1:-1:-1;6480:6:5;;6560;;6638:40;;;-1:-1:-1;;;6638:40:5;;6672:4;6638:40;;;;;;6382:55;;-1:-1:-1;6382:55:5;;-1:-1:-1;;;;;;6480:6:5;;;;6560;;;-1:-1:-1;;6480:6:5;;-1:-1:-1;;6638:40:5;;;;;;;;;;;;;;6480:6;6638:40;;;5:2:-1;;;;30:1;27;20:12;5:2;6638:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6638:40:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6638:40:5;6704;;;-1:-1:-1;;;6704:40:5;;6738:4;6704:40;;;;;;6638;;-1:-1:-1;;;;;;;;6704:25:5;;;-1:-1:-1;;6704:40:5;;;;;6638;;6704;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;6704:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6704:40:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6704:40:5;6789:4;6754:14;6771:24;;;:9;6704:40;6771:24;;;;;6704:40;;-1:-1:-1;6819:30:5;6828:9;6839;6819:8;:30::i;:::-;6859:17;6879:11;6806:43;;-1:-1:-1;6879:11:5;6988:23;:9;7002:8;6988:23;:13;:23;:::i;:::-;:38;;;;;;;-1:-1:-1;7120:12:5;7094:23;:9;7108:8;7094:23;:13;:23;:::i;:::-;:38;;;;;;7084:48;;7208:1;7198:7;:11;:26;;;;;7223:1;7213:7;:11;7198:26;7190:80;;;;-1:-1:-1;;;7190:80:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7280:31;7294:4;7301:9;7280:5;:31::i;:::-;7321:35;7335:7;7344:2;7348:7;7321:13;:35::i;:::-;7366;7380:7;7389:2;7393:7;7366:13;:35::i;:::-;7422:40;;;-1:-1:-1;;;7422:40:5;;7456:4;7422:40;;;;;;-1:-1:-1;;;;;7422:25:5;;;-1:-1:-1;;7422:40:5;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;7422:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7422:40:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7422:40:5;7483;;;-1:-1:-1;;;7483:40:5;;7517:4;7483:40;;;;;;7422;;-1:-1:-1;;;;;;7483:25:5;;;-1:-1:-1;;7483:40:5;;;;;7422;;7483;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;7483:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7483:40:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7483:40:5;;-1:-1:-1;7534:49:5;7542:8;7483:40;7562:9;7573;7534:7;:49::i;:::-;7597:5;7593:47;;;7631:8;;7612:28;;-1:-1:-1;;;;;7617:8:5;;;;-1:-1:-1;;;7631:8:5;;;7612:18;:28::i;:::-;7604:5;:36;7593:47;7695:38;;;;;;;;;;;;;;-1:-1:-1;;;;;7695:38:5;;;7700:10;;7695:38;;;;;;;;;;;1293:1;;;;;;;;;1315;1304:8;:12;;;;6295:1445;;;:::o;219:37:1:-;;;;;;;;;;;;;-1:-1:-1;;;219:37:1;;;;;:::o;2311:136::-;2371:4;2387:32;2397:10;2409:2;2413:5;2387:9;:32::i;396:46:5:-;437:5;396:46;:::o;9776:329::-;1225:8;;1237:1;1225:13;1217:44;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;;;;1282:1;1271:8;:12;9844:6;;9893;;9996:8;;9951:40;;;-1:-1:-1;;;9951:40:5;;9985:4;9951:40;;;;;;-1:-1:-1;;;;;9844:6:5;;;;9893;;;;9924:82;;9844:6;;9947:2;;9951:54;;-1:-1:-1;;;;;9996:8:5;;9844:6;;-1:-1:-1;;9951:40:5;;;;;;;;;;;;;;;9844:6;9951:40;;;5:2:-1;;;;30:1;27;20:12;5:2;9951:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9951:40:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9951:40:5;;:54;:44;:54;:::i;:::-;9924:13;:82::i;:::-;10088:8;;10043:40;;;-1:-1:-1;;;10043:40:5;;10077:4;10043:40;;;;;;10016:82;;10030:7;;10039:2;;10043:54;;-1:-1:-1;;;10088:8:5;;-1:-1:-1;;;;;10088:8:5;;-1:-1:-1;;;;;10043:25:5;;;-1:-1:-1;;10043:40:5;;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;10016:82:5;-1:-1:-1;;1315:1:5;1304:8;:12;-1:-1:-1;9776:329:5:o;543:22::-;;;-1:-1:-1;;;;;543:22:5;;:::o;598:21::-;;;-1:-1:-1;;;;;598:21:5;;:::o;2754:666:1:-;2899:15;2887:8;:27;;2879:60;;;;;-1:-1:-1;;;2879:60:1;;;;;;;;;;;;-1:-1:-1;;;2879:60:1;;;;;;;;;;;;;;;3051:16;;-1:-1:-1;;;;;3146:13:1;;;2949:14;3146:13;;;:6;:13;;;;;;;;:15;;-1:-1:-1;3146:15:1;;;;;;3095:77;;631:66;3095:77;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3095:77:1;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3095:77:1;;;;;3085:88;;;;;;-1:-1:-1;;;2989:198:1;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2989:198:1;;;;;;2966:231;;;;;;;;;3234:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2949:14;;-1:-1:-1;3234:26:1;;;;;-1:-1:-1;;3234:26:1;;;;;;;;;;-1:-1:-1;3234:26:1;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;3234:26:1;;-1:-1:-1;;3234:26:1;;;-1:-1:-1;;;;;;;3278:30:1;;;;;;:59;;-1:-1:-1;;;;;;3312:25:1;;;;;;;3278:59;3270:102;;;;;-1:-1:-1;;;3270:102:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;3382:31;3391:5;3398:7;3407:5;3382:8;:31::i;:::-;2754:666;;;;;;;;;:::o;2627:254:5:-;2705:7;;-1:-1:-1;;;;;2705:7:5;2691:10;:21;2683:55;;;;;-1:-1:-1;;;2683:55:5;;;;;;;;;;;;-1:-1:-1;;;2683:55:5;;;;;;;;;;;;;;;2788:4;2776:8;:16;;;;2768:54;;;;;-1:-1:-1;;;2768:54:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;2856:7;:18;;-1:-1:-1;;2856:18:5;;;;;;;;;;;;2627:254::o;380:61:1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;10151:156:5:-;1225:8;;1237:1;1225:13;1217:44;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;;;;1282:1;1271:8;:12;10206:6;;10199:39;;;-1:-1:-1;;;10199:39:5;;10232:4;10199:39;;;;;;10191:109;;-1:-1:-1;;;;;10206:6:5;;-1:-1:-1;;10199:39:5;;;;;;;;;;;;;;10206:6;10199:39;;;5:2:-1;;;;30:1;27;20:12;5:2;10199:39:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10199:39:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10199:39:5;10247:6;;10240:39;;;-1:-1:-1;;;10240:39:5;;10273:4;10240:39;;;;;;-1:-1:-1;;;;;10247:6:5;;;;-1:-1:-1;;10240:39:5;;;;;10199;;10240;;;;;;;;10247:6;10240:39;;;5:2:-1;;;;30:1;27;20:12;5:2;10240:39:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10240:39:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10240:39:5;10281:8;;-1:-1:-1;;;;;10281:8:5;;;;-1:-1:-1;;;10291:8:5;;;10191:7;:109::i;:::-;1315:1;1304:8;:12;10151:156::o;1562:285::-;500:34;;;;;;;;;;;;;;;;;1689:43;;-1:-1:-1;;;;;1689:43:5;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1689:43:5;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1678:55:5;;;;-1:-1:-1;;1657:17:5;;1678:10;;;1689:43;1678:55;;;25:18:-1;1678:55:5;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1678:55:5;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;1642:91:5;;;;1751:7;:57;;;;-1:-1:-1;1763:11:5;;:16;;:44;;;1794:4;1783:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1783:24:5;1763:44;1743:97;;;;;-1:-1:-1;;;1743:97:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;1562:285;;;;;:::o;420:140:13:-;472:6;498;;;:30;;-1:-1:-1;;513:5:13;;;527:1;522;513:5;522:1;508:15;;;;;:20;498:30;490:63;;;;;-1:-1:-1;;;490:63:13;;;;;;;;;;;;-1:-1:-1;;;490:63:13;;;;;;;;;;;;;;287:127;370:5;;;365:16;;;;357:50;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;;;2963:848:5;-1:-1:-1;;;;;3074:23:5;;;;;:50;;-1:-1:-1;;;;;;3101:23:5;;;3074:50;3066:83;;;;;-1:-1:-1;;;3066:83:5;;;;;;;;;;;;-1:-1:-1;;;3066:83:5;;;;;;;;;;;;;;;3262:18;;3190:23;:15;:23;;;-1:-1:-1;;;3262:18:5;;;;3245:35;;;3317:15;;;;;;:33;;-1:-1:-1;;;;;;3336:14:5;;;;3317:33;:51;;;;-1:-1:-1;;;;;;3354:14:5;;;;3317:51;3313:332;;;3521:11;3468:64;;3473:44;3507:9;3473:27;3490:9;3473:16;:27::i;:::-;-1:-1:-1;;;;;3473:33:5;;;:44::i;:::-;3444:20;:88;;-1:-1:-1;;;;;3468:50:5;;;;:64;;;;3444:88;;;3570:64;;;3575:44;3609:9;3575:27;3592:9;3575:16;:27::i;:44::-;3546:20;:88;;-1:-1:-1;;;;;3570:50:5;;;;:64;;;;3546:88;;;3313:332;3654:8;:28;;-1:-1:-1;;3654:28:5;-1:-1:-1;;;;;3654:28:5;;;;;;;-1:-1:-1;;;;3692:28:5;-1:-1:-1;;;3692:28:5;;;;;;;;;-1:-1:-1;;;;;3730:35:5;-1:-1:-1;;;3730:35:5;;;;;;;;;3780:24;;;3785:8;;;3780:24;;3795:8;;;;;;;3780:24;;;;;;;;;;;;;;;;;2963:848;;;;;;:::o;1767:166:1:-;-1:-1:-1;;;;;1847:16:1;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;1895:31;;;;;;;;;;;;;;;;;1767:166;;;:::o;1939:216::-;-1:-1:-1;;;;;2032:15:1;;;;;;-1:-1:-1;2032:15:1;;;;;;:26;;2052:5;2032:19;:26::i;:::-;-1:-1:-1;;;;;2014:15:1;;;;;;;-1:-1:-1;2014:15:1;;;;;;:44;;;;2084:13;;;;;;;:24;;2102:5;2084:17;:24::i;:::-;-1:-1:-1;;;;;2068:13:1;;;;;;;-1:-1:-1;2068:13:1;;;;;;;;;:40;;;;2123:25;;;;;;;2068:13;;2123:25;;;;;;;;;;;;;1939:216;;;:::o;3931:926:5:-;4057:7;;4042:31;;;-1:-1:-1;;;4042:31:5;;;;4004:10;;;;-1:-1:-1;;;;;4057:7:5;;;;4042:29;;:31;;;;;;;;;;;;;;;4057:7;4042:31;;;5:2:-1;;;;30:1;27;20:12;5:2;4042:31:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4042:31:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4042:31:5;4129:7;;4114:48;;;-1:-1:-1;;;4114:48:5;;;;4042:31;;-1:-1:-1;4083:28:5;;-1:-1:-1;;;;;4129:7:5;;;;4114:46;;:48;;;;;4042:31;;4114:48;;;;;;;;4129:7;4114:48;;;5:2:-1;;;;30:1;27;20:12;5:2;4114:48:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4114:48:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4114:48:5;4223:5;;-1:-1:-1;;;;;4180:19:5;;;;;;-1:-1:-1;4114:48:5;;-1:-1:-1;4223:5:5;4253:598;;4282:11;;4278:506;;4313:10;4326:41;4336:30;-1:-1:-1;;;;;4336:15:5;;;;:30;;:19;:30::i;4326:41::-;4313:54;;4385:14;4402:17;4412:6;4402:9;:17::i;:::-;4385:34;;4449:9;4441:5;:17;4437:333;;;4482:14;4499:37;4515:20;:5;4525:9;4515:20;:9;:20;:::i;:::-;4499:11;;;:37;:15;:37;:::i;:::-;4482:54;-1:-1:-1;4558:16:5;4577:48;4615:9;4577:33;:5;:33;;;;:9;:33;:::i;:::-;:37;:48;:37;:48;:::i;:::-;4558:67;;4647:14;4676:11;4664:9;:23;;;;;;;-1:-1:-1;4713:13:5;;4709:42;;4728:23;4734:5;4741:9;4728:5;:23::i;:::-;4437:333;;;;4278:506;;;4253:598;;;4804:11;;4800:51;;4839:1;4831:5;:9;4800:51;3931:926;;;;;;;:::o;307:292:12:-;352:6;378:1;374;:5;370:223;;;-1:-1:-1;399:1:12;431;427;423:5;;:9;446:89;457:1;453;:5;446:89;;;482:1;478:5;;519:1;514;510;506;:5;;;;;;:9;505:15;;;;;;501:19;;446:89;;;370:223;;;;555:6;;551:42;;-1:-1:-1;581:1:12;551:42;307:292;;;:::o;1353:197:1:-;1425:11;;:22;;1441:5;1425:22;:15;:22;:::i;:::-;1411:11;:36;;;-1:-1:-1;;;;;1473:13:1;;;;-1:-1:-1;1473:13:1;;;;;;:24;;1491:5;1473:17;:24::i;:::-;-1:-1:-1;;;;;1457:13:1;;;;;;-1:-1:-1;1457:13:1;;;;;;;;:40;;;;1512:31;;;;;;;1457:13;;;;1512:31;;;;;;;;;;1353:197;;:::o;98:94:12:-;150:6;176:1;172;:5;:13;;184:1;172:13;;;180:1;172:13;168:17;98:94;-1:-1:-1;;;98:94:12:o;1556:205:1:-;-1:-1:-1;;;;;1634:15:1;;;;;;-1:-1:-1;1634:15:1;;;;;;:26;;1654:5;1634:19;:26::i;:::-;-1:-1:-1;;;;;1616:15:1;;;;;;-1:-1:-1;1616:15:1;;;;;:44;;;;1684:11;:22;;1700:5;1684:15;:22::i;:::-;1670:11;:36;;;1721:33;;;;;;;;-1:-1:-1;;;;;1721:33:1;;;;;;;;;;;;;1556:205;;:::o;283:118:15:-;-1:-1:-1;;;;;358:10:15;-1:-1:-1;;;358:17:15;;283:118::o;469:106::-;529:9;-1:-1:-1;;;;;558:10:15;;-1:-1:-1;;;;;554:14:15;;558:10;554:14;;;;;;469:106;-1:-1:-1;;;469:106:15:o;155:126:13:-;238:5;;;233:16;;;;225:49;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;;" - } - }, - "interface": [ - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Burn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "name": "Mint", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Swap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint112", - "name": "reserve0", - "type": "uint112" - }, - { - "indexed": false, - "internalType": "uint112", - "name": "reserve1", - "type": "uint112" - } - ], - "name": "Sync", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "MINIMUM_LIQUIDITY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "burn", - "outputs": [ - { - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getReserves", - "outputs": [ - { - "internalType": "uint112", - "name": "_reserve0", - "type": "uint112" - }, - { - "internalType": "uint112", - "name": "_reserve1", - "type": "uint112" - }, - { - "internalType": "uint32", - "name": "_blockTimestampLast", - "type": "uint32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "_token0", - "type": "address" - }, - { - "internalType": "address", - "name": "_token1", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "kLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "liquidity", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "price0CumulativeLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "price1CumulativeLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint32", - "name": "_swapFee", - "type": "uint32" - } - ], - "name": "setSwapFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "skim", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "swap", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "swapFee", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "sync", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "token0", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "token1", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "6080604052600c805463ffffffff191660191790556001600d5534801561002557600080fd5b50604051469080605261256f8239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561245e806101116000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", - "bin": "6080604052600c805463ffffffff191660191790556001600d5534801561002557600080fd5b50604051469080605261256f8239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561245e806101116000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", - "bin-runtime": "608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032", - "srcmap": "278:10031:5:-;;;1094:26;;;-1:-1:-1;;1094:26:5;1118:2;1094:26;;;;1160:25;;2242:58;5:2:-1;;;;30:1;27;20:12;5:2;-1:-1;1086:95:1;;990:7;;1086:95;;;;;;;;;;;;;;;;1215:4;;;;;;;;-1:-1:-1;;;1215:4:1;;;;;1249:10;;;;;;;;;;-1:-1:-1;;;1249:10:1;;;;1058:272;;;;;;;;;1199:22;1058:272;;;;1239:21;1058:272;;;;;;;;;;;1311:4;1058:272;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1058:272:1;;;;;;1035:305;;;;;;;;1016:16;:324;-1:-1:-1;2273:7:5;:20;;-1:-1:-1;;;;;;2273:20:5;2283:10;2273:20;;;-1:-1:-1;;278:10031:5;-1:-1:-1;278:10031:5;;", - "srcmap-runtime": "278:10031:5:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;278:10031:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7849:1881;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;7849:1881:5;;;;;;;;-1:-1:-1;;;;;7849:1881:5;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;7849:1881:5;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7849:1881:5;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;7849:1881:5;;-1:-1:-1;7849:1881:5;-1:-1:-1;7849:1881:5;:::i;:::-;;175:38:1;;;:::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;175:38:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1329:227:5;;;:::i;:::-;;;;-1:-1:-1;;;;;1329:227:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2161:144:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2161:144:1;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;571:21:5;;;:::i;:::-;;;;-1:-1:-1;;;;;571:21:5;;;;;;;;;;;;;;303:24:1;;;:::i;:::-;;;;;;;;;;;;;;;;2453:295;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2453:295:1;;;;;;;;;;;;;;;;;:::i;589:108::-;;;:::i;262:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;448:31;;;:::i;2362:207:5:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2362:207:5;;;;;;;;;;:::i;1094:26::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;915:32;;;:::i;953:::-;;;:::i;4966:1220::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4966:1220:5;-1:-1:-1;;;;;4966:1220:5;;:::i;333:41:1:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;333:41:1;-1:-1:-1;;;;;333:41:1;;:::i;991:17:5:-;;;:::i;703:38:1:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;703:38:1;-1:-1:-1;;;;;703:38:1;;:::i;6295:1445:5:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6295:1445:5;-1:-1:-1;;;;;6295:1445:5;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;219:37:1;;;:::i;2311:136::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2311:136:1;;;;;;;;:::i;396:46:5:-;;;:::i;9776:329::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9776:329:5;-1:-1:-1;;;;;9776:329:5;;:::i;543:22::-;;;:::i;598:21::-;;;:::i;2754:666:1:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;2754:666:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2754:666:1;;;;;;;;:::i;2627:254:5:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2627:254:5;;;;:::i;380:61:1:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;380:61:1;;;;;;;;;;:::i;10151:156:5:-;;;:::i;7849:1881::-;1225:8;;1237:1;1225:13;1217:44;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;;;;1282:1;1271:8;:12;7962:14;;;;:32;;;7993:1;7980:10;:14;7962:32;7954:83;;;;-1:-1:-1;;;7954:83:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8048:17;8067;8089:13;:11;:13::i;:::-;-1:-1:-1;8047:55:5;;-1:-1:-1;8047:55:5;-1:-1:-1;;;;;;8135:22:5;;;;:48;;;;-1:-1:-1;;;;;;8161:22:5;;;;8135:48;8127:95;;;;-1:-1:-1;;;8127:95:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8362:6;;8396;;8233:13;;;;-1:-1:-1;;;;;8362:6:5;;;;8396;;;;8420:13;;;;;;;:30;;-1:-1:-1;;;;;;8437:13:5;;;;;;;;8420:30;8412:65;;;;;-1:-1:-1;;;8412:65:5;;;;;;;;;;;;-1:-1:-1;;;8412:65:5;;;;;;;;;;;;;;;8491:14;;8487:58;;8507:38;8521:7;8530:2;8534:10;8507:13;:38::i;:::-;8593:14;;8589:58;;8609:38;8623:7;8632:2;8636:10;8609:13;:38::i;:::-;8695:15;;8691:91;;8726:2;-1:-1:-1;;;;;8712:28:5;;8741:10;8753;8765;8777:4;;8712:70;;;;;;;;;;;;;-1:-1:-1;;;;;8712:70:5;-1:-1:-1;;;;;8712:70:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;8712:70:5;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8712:70:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8712:70:5;;;;8691:91;8803:40;;;-1:-1:-1;;;8803:40:5;;8837:4;8803:40;;;;;;-1:-1:-1;;;;;8803:25:5;;;-1:-1:-1;;8803:40:5;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;8803:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8803:40:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8803:40:5;8864;;;-1:-1:-1;;;8864:40:5;;8898:4;8864:40;;;;;;8803;;-1:-1:-1;;;;;;8864:25:5;;;-1:-1:-1;;8864:40:5;;;;;8803;;8864;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;8864:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8864:40:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8864:40:5;;-1:-1:-1;8924:14:5;;-1:-1:-1;;;;;;;8952:22:5;;;;;8941:33;;:75;;9015:1;8941:75;;;-1:-1:-1;;;;;8989:22:5;;;;;8977:35;;8941:75;8924:92;-1:-1:-1;9026:14:5;-1:-1:-1;;;;;9054:22:5;;;;;9043:33;;:75;;9117:1;9043:75;;;-1:-1:-1;;;;;9091:22:5;;;;;9079:35;;9043:75;9026:92;;9148:1;9136:9;:13;:30;;;;9165:1;9153:9;:13;9136:30;9128:80;;;;-1:-1:-1;;;9128:80:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9356:7;;9294:21;;9318:47;;9342:22;;:9;;9356:7;;;;;9342:13;:22;:::i;:::-;9318:19;:8;9331:5;9318:19;:12;:19;:::i;:::-;:23;:47;:23;:47;:::i;:::-;9439:7;;9294:71;;-1:-1:-1;9377:21:5;;9401:47;;9425:22;;:9;;9439:7;;;;;9425:13;:22;:::i;9401:47::-;9377:71;-1:-1:-1;9510:44:5;9545:8;9510:30;-1:-1:-1;;;;;9510:15:5;;;;:30;;:19;:30::i;:::-;:34;:44;:34;:44;:::i;:::-;9468:38;:16;9489;9468:38;:20;:38;:::i;:::-;:86;;9460:112;;;;;-1:-1:-1;;;9460:112:5;;;;;;;;;;;;-1:-1:-1;;;9460:112:5;;;;;;;;;;;;;;;1293:1;;9593:49;9601:8;9611;9621:9;9632;9593:7;:49::i;:::-;9657:66;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9657:66:5;;;9662:10;;9657:66;;;;;;;;;-1:-1:-1;;1315:1:5;1304:8;:12;-1:-1:-1;;;;;;;;;7849:1881:5:o;175:38:1:-;;;;;;;;;;;;;-1:-1:-1;;;175:38:1;;;;;:::o;1329:227:5:-;1461:8;;-1:-1:-1;;;;;1461:8:5;;;;-1:-1:-1;;;1491:8:5;;;;;;-1:-1:-1;;;1531:18:5;;;;;1329:227::o;2161:144:1:-;2225:4;2241:36;2250:10;2262:7;2271:5;2241:8;:36::i;:::-;-1:-1:-1;2294:4:1;2161:144;;;;;:::o;571:21:5:-;;;-1:-1:-1;;;;;571:21:5;;:::o;303:24:1:-;;;;:::o;2453:295::-;-1:-1:-1;;;;;2551:15:1;;2531:4;2551:15;;;:9;:15;;;;;;;;2567:10;2551:27;;;;;;;;-1:-1:-1;;2551:39:1;2547:138;;-1:-1:-1;;;;;2636:15:1;;;;;;:9;:15;;;;;;;;2652:10;2636:27;;;;;;;;:38;;2668:5;2636:31;:38::i;:::-;-1:-1:-1;;;;;2606:15:1;;;;;;:9;:15;;;;;;;;2622:10;2606:27;;;;;;;:68;2547:138;2694:26;2704:4;2710:2;2714:5;2694:9;:26::i;:::-;-1:-1:-1;2737:4:1;2453:295;;;;;:::o;589:108::-;631:66;589:108;:::o;262:35::-;295:2;262:35;:::o;448:31::-;;;;:::o;2362:207:5:-;2457:7;;-1:-1:-1;;;;;2457:7:5;2443:10;:21;2435:55;;;;;-1:-1:-1;;;2435:55:5;;;;;;;;;;;;-1:-1:-1;;;2435:55:5;;;;;;;;;;;;;;;2520:6;:16;;-1:-1:-1;;;;;2520:16:5;;;-1:-1:-1;;;;;;2520:16:5;;;;;;;2546:6;:16;;;;;;;;;;;2362:207::o;1094:26::-;;;;;;:::o;915:32::-;;;;:::o;953:::-;;;;:::o;4966:1220::-;5015:14;1225:8;;1237:1;1225:13;1217:44;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;;;;1282:1;1271:8;:12;;;1282:1;5083:13;:11;:13::i;:::-;-1:-1:-1;5144:6:5;;5137:39;;;-1:-1:-1;;;5137:39:5;;5170:4;5137:39;;;;;;5041:55;;-1:-1:-1;5041:55:5;;-1:-1:-1;;;;;;;;5144:6:5;;;;-1:-1:-1;;5137:39:5;;;;;;;;;;;;;;5144:6;5137:39;;;5:2:-1;;;;30:1;27;20:12;5:2;5137:39:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5137:39:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5137:39:5;5209:6;;5202:39;;;-1:-1:-1;;;5202:39:5;;5235:4;5202:39;;;;;;5137;;-1:-1:-1;;;;;;;;5209:6:5;;;;-1:-1:-1;;5202:39:5;;;;;5137;;5202;;;;;;;;5209:6;5202:39;;;5:2:-1;;;;30:1;27;20:12;5:2;5202:39:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5202:39:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5202:39:5;;-1:-1:-1;5251:12:5;5266:23;:8;-1:-1:-1;;;;;5266:23:5;;:12;:23::i;:::-;5251:38;-1:-1:-1;5299:12:5;5314:23;:8;-1:-1:-1;;;;;5314:23:5;;:12;:23::i;:::-;5299:38;;5348:10;5361:30;5370:9;5381;5361:8;:30::i;:::-;5401:17;5421:11;5348:43;;-1:-1:-1;5524:17:5;5520:347;;5569:54;437:5;5569:31;5579:20;:7;5591;5579:20;:11;:20;:::i;:::-;5569:9;:31::i;:54::-;5557:66;;5636:36;5650:1;437:5;5636;:36::i;:::-;5520:347;;;5770:86;-1:-1:-1;;;;;5779:37:5;;:25;:7;5791:12;5779:11;:25::i;:::-;:37;;;;;;-1:-1:-1;;;;;5818:37:5;;:25;:7;5830:12;5818:11;:25::i;:::-;:37;;;;;;5770:8;:86::i;:::-;5758:98;;5520:347;5896:1;5884:9;:13;5876:67;;;;-1:-1:-1;;;5876:67:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5953:20;5959:2;5963:9;5953:5;:20::i;:::-;5984:49;5992:8;6002;6012:9;6023;5984:7;:49::i;:::-;6047:5;6043:47;;;6081:8;;6062:28;;-1:-1:-1;;;;;6067:8:5;;;;-1:-1:-1;;;6081:8:5;;;6062:18;:28::i;:::-;6054:5;:36;6043:47;6145:34;;;;;;;;;;;;;;6150:10;;6145:34;;;;;;;;-1:-1:-1;;1315:1:5;1304:8;:12;-1:-1:-1;4966:1220:5;;;-1:-1:-1;;;;;;4966:1220:5:o;333:41:1:-;;;;;;;;;;;;;:::o;991:17:5:-;;;;:::o;703:38:1:-;;;;;;;;;;;;;:::o;6295:1445:5:-;6344:12;6358;1225:8;;1237:1;1225:13;1217:44;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;;;;1282:1;1271:8;:12;;;1282:1;6424:13;:11;:13::i;:::-;-1:-1:-1;6480:6:5;;6560;;6638:40;;;-1:-1:-1;;;6638:40:5;;6672:4;6638:40;;;;;;6382:55;;-1:-1:-1;6382:55:5;;-1:-1:-1;;;;;;6480:6:5;;;;6560;;;-1:-1:-1;;6480:6:5;;-1:-1:-1;;6638:40:5;;;;;;;;;;;;;;6480:6;6638:40;;;5:2:-1;;;;30:1;27;20:12;5:2;6638:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6638:40:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6638:40:5;6704;;;-1:-1:-1;;;6704:40:5;;6738:4;6704:40;;;;;;6638;;-1:-1:-1;;;;;;;;6704:25:5;;;-1:-1:-1;;6704:40:5;;;;;6638;;6704;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;6704:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6704:40:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6704:40:5;6789:4;6754:14;6771:24;;;:9;6704:40;6771:24;;;;;6704:40;;-1:-1:-1;6819:30:5;6828:9;6839;6819:8;:30::i;:::-;6859:17;6879:11;6806:43;;-1:-1:-1;6879:11:5;6988:23;:9;7002:8;6988:23;:13;:23;:::i;:::-;:38;;;;;;;-1:-1:-1;7120:12:5;7094:23;:9;7108:8;7094:23;:13;:23;:::i;:::-;:38;;;;;;7084:48;;7208:1;7198:7;:11;:26;;;;;7223:1;7213:7;:11;7198:26;7190:80;;;;-1:-1:-1;;;7190:80:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7280:31;7294:4;7301:9;7280:5;:31::i;:::-;7321:35;7335:7;7344:2;7348:7;7321:13;:35::i;:::-;7366;7380:7;7389:2;7393:7;7366:13;:35::i;:::-;7422:40;;;-1:-1:-1;;;7422:40:5;;7456:4;7422:40;;;;;;-1:-1:-1;;;;;7422:25:5;;;-1:-1:-1;;7422:40:5;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;7422:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7422:40:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7422:40:5;7483;;;-1:-1:-1;;;7483:40:5;;7517:4;7483:40;;;;;;7422;;-1:-1:-1;;;;;;7483:25:5;;;-1:-1:-1;;7483:40:5;;;;;7422;;7483;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;7483:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7483:40:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7483:40:5;;-1:-1:-1;7534:49:5;7542:8;7483:40;7562:9;7573;7534:7;:49::i;:::-;7597:5;7593:47;;;7631:8;;7612:28;;-1:-1:-1;;;;;7617:8:5;;;;-1:-1:-1;;;7631:8:5;;;7612:18;:28::i;:::-;7604:5;:36;7593:47;7695:38;;;;;;;;;;;;;;-1:-1:-1;;;;;7695:38:5;;;7700:10;;7695:38;;;;;;;;;;;1293:1;;;;;;;;;1315;1304:8;:12;;;;6295:1445;;;:::o;219:37:1:-;;;;;;;;;;;;;-1:-1:-1;;;219:37:1;;;;;:::o;2311:136::-;2371:4;2387:32;2397:10;2409:2;2413:5;2387:9;:32::i;396:46:5:-;437:5;396:46;:::o;9776:329::-;1225:8;;1237:1;1225:13;1217:44;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;;;;1282:1;1271:8;:12;9844:6;;9893;;9996:8;;9951:40;;;-1:-1:-1;;;9951:40:5;;9985:4;9951:40;;;;;;-1:-1:-1;;;;;9844:6:5;;;;9893;;;;9924:82;;9844:6;;9947:2;;9951:54;;-1:-1:-1;;;;;9996:8:5;;9844:6;;-1:-1:-1;;9951:40:5;;;;;;;;;;;;;;;9844:6;9951:40;;;5:2:-1;;;;30:1;27;20:12;5:2;9951:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9951:40:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9951:40:5;;:54;:44;:54;:::i;:::-;9924:13;:82::i;:::-;10088:8;;10043:40;;;-1:-1:-1;;;10043:40:5;;10077:4;10043:40;;;;;;10016:82;;10030:7;;10039:2;;10043:54;;-1:-1:-1;;;10088:8:5;;-1:-1:-1;;;;;10088:8:5;;-1:-1:-1;;;;;10043:25:5;;;-1:-1:-1;;10043:40:5;;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;10016:82:5;-1:-1:-1;;1315:1:5;1304:8;:12;-1:-1:-1;9776:329:5:o;543:22::-;;;-1:-1:-1;;;;;543:22:5;;:::o;598:21::-;;;-1:-1:-1;;;;;598:21:5;;:::o;2754:666:1:-;2899:15;2887:8;:27;;2879:60;;;;;-1:-1:-1;;;2879:60:1;;;;;;;;;;;;-1:-1:-1;;;2879:60:1;;;;;;;;;;;;;;;3051:16;;-1:-1:-1;;;;;3146:13:1;;;2949:14;3146:13;;;:6;:13;;;;;;;;:15;;-1:-1:-1;3146:15:1;;;;;;3095:77;;631:66;3095:77;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3095:77:1;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3095:77:1;;;;;3085:88;;;;;;-1:-1:-1;;;2989:198:1;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2989:198:1;;;;;;2966:231;;;;;;;;;3234:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2949:14;;-1:-1:-1;3234:26:1;;;;;-1:-1:-1;;3234:26:1;;;;;;;;;;-1:-1:-1;3234:26:1;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;3234:26:1;;-1:-1:-1;;3234:26:1;;;-1:-1:-1;;;;;;;3278:30:1;;;;;;:59;;-1:-1:-1;;;;;;3312:25:1;;;;;;;3278:59;3270:102;;;;;-1:-1:-1;;;3270:102:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;3382:31;3391:5;3398:7;3407:5;3382:8;:31::i;:::-;2754:666;;;;;;;;;:::o;2627:254:5:-;2705:7;;-1:-1:-1;;;;;2705:7:5;2691:10;:21;2683:55;;;;;-1:-1:-1;;;2683:55:5;;;;;;;;;;;;-1:-1:-1;;;2683:55:5;;;;;;;;;;;;;;;2788:4;2776:8;:16;;;;2768:54;;;;;-1:-1:-1;;;2768:54:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;2856:7;:18;;-1:-1:-1;;2856:18:5;;;;;;;;;;;;2627:254::o;380:61:1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;10151:156:5:-;1225:8;;1237:1;1225:13;1217:44;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;;;;1282:1;1271:8;:12;10206:6;;10199:39;;;-1:-1:-1;;;10199:39:5;;10232:4;10199:39;;;;;;10191:109;;-1:-1:-1;;;;;10206:6:5;;-1:-1:-1;;10199:39:5;;;;;;;;;;;;;;10206:6;10199:39;;;5:2:-1;;;;30:1;27;20:12;5:2;10199:39:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10199:39:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10199:39:5;10247:6;;10240:39;;;-1:-1:-1;;;10240:39:5;;10273:4;10240:39;;;;;;-1:-1:-1;;;;;10247:6:5;;;;-1:-1:-1;;10240:39:5;;;;;10199;;10240;;;;;;;;10247:6;10240:39;;;5:2:-1;;;;30:1;27;20:12;5:2;10240:39:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10240:39:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10240:39:5;10281:8;;-1:-1:-1;;;;;10281:8:5;;;;-1:-1:-1;;;10291:8:5;;;10191:7;:109::i;:::-;1315:1;1304:8;:12;10151:156::o;1562:285::-;500:34;;;;;;;;;;;;;;;;;1689:43;;-1:-1:-1;;;;;1689:43:5;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1689:43:5;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1678:55:5;;;;-1:-1:-1;;1657:17:5;;1678:10;;;1689:43;1678:55;;;25:18:-1;1678:55:5;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1678:55:5;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;1642:91:5;;;;1751:7;:57;;;;-1:-1:-1;1763:11:5;;:16;;:44;;;1794:4;1783:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1783:24:5;1763:44;1743:97;;;;;-1:-1:-1;;;1743:97:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;1562:285;;;;;:::o;420:140:13:-;472:6;498;;;:30;;-1:-1:-1;;513:5:13;;;527:1;522;513:5;522:1;508:15;;;;;:20;498:30;490:63;;;;;-1:-1:-1;;;490:63:13;;;;;;;;;;;;-1:-1:-1;;;490:63:13;;;;;;;;;;;;;;287:127;370:5;;;365:16;;;;357:50;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;;;2963:848:5;-1:-1:-1;;;;;3074:23:5;;;;;:50;;-1:-1:-1;;;;;;3101:23:5;;;3074:50;3066:83;;;;;-1:-1:-1;;;3066:83:5;;;;;;;;;;;;-1:-1:-1;;;3066:83:5;;;;;;;;;;;;;;;3262:18;;3190:23;:15;:23;;;-1:-1:-1;;;3262:18:5;;;;3245:35;;;3317:15;;;;;;:33;;-1:-1:-1;;;;;;3336:14:5;;;;3317:33;:51;;;;-1:-1:-1;;;;;;3354:14:5;;;;3317:51;3313:332;;;3521:11;3468:64;;3473:44;3507:9;3473:27;3490:9;3473:16;:27::i;:::-;-1:-1:-1;;;;;3473:33:5;;;:44::i;:::-;3444:20;:88;;-1:-1:-1;;;;;3468:50:5;;;;:64;;;;3444:88;;;3570:64;;;3575:44;3609:9;3575:27;3592:9;3575:16;:27::i;:44::-;3546:20;:88;;-1:-1:-1;;;;;3570:50:5;;;;:64;;;;3546:88;;;3313:332;3654:8;:28;;-1:-1:-1;;3654:28:5;-1:-1:-1;;;;;3654:28:5;;;;;;;-1:-1:-1;;;;3692:28:5;-1:-1:-1;;;3692:28:5;;;;;;;;;-1:-1:-1;;;;;3730:35:5;-1:-1:-1;;;3730:35:5;;;;;;;;;3780:24;;;3785:8;;;3780:24;;3795:8;;;;;;;3780:24;;;;;;;;;;;;;;;;;2963:848;;;;;;:::o;1767:166:1:-;-1:-1:-1;;;;;1847:16:1;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;1895:31;;;;;;;;;;;;;;;;;1767:166;;;:::o;1939:216::-;-1:-1:-1;;;;;2032:15:1;;;;;;-1:-1:-1;2032:15:1;;;;;;:26;;2052:5;2032:19;:26::i;:::-;-1:-1:-1;;;;;2014:15:1;;;;;;;-1:-1:-1;2014:15:1;;;;;;:44;;;;2084:13;;;;;;;:24;;2102:5;2084:17;:24::i;:::-;-1:-1:-1;;;;;2068:13:1;;;;;;;-1:-1:-1;2068:13:1;;;;;;;;;:40;;;;2123:25;;;;;;;2068:13;;2123:25;;;;;;;;;;;;;1939:216;;;:::o;3931:926:5:-;4057:7;;4042:31;;;-1:-1:-1;;;4042:31:5;;;;4004:10;;;;-1:-1:-1;;;;;4057:7:5;;;;4042:29;;:31;;;;;;;;;;;;;;;4057:7;4042:31;;;5:2:-1;;;;30:1;27;20:12;5:2;4042:31:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4042:31:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4042:31:5;4129:7;;4114:48;;;-1:-1:-1;;;4114:48:5;;;;4042:31;;-1:-1:-1;4083:28:5;;-1:-1:-1;;;;;4129:7:5;;;;4114:46;;:48;;;;;4042:31;;4114:48;;;;;;;;4129:7;4114:48;;;5:2:-1;;;;30:1;27;20:12;5:2;4114:48:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4114:48:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4114:48:5;4223:5;;-1:-1:-1;;;;;4180:19:5;;;;;;-1:-1:-1;4114:48:5;;-1:-1:-1;4223:5:5;4253:598;;4282:11;;4278:506;;4313:10;4326:41;4336:30;-1:-1:-1;;;;;4336:15:5;;;;:30;;:19;:30::i;4326:41::-;4313:54;;4385:14;4402:17;4412:6;4402:9;:17::i;:::-;4385:34;;4449:9;4441:5;:17;4437:333;;;4482:14;4499:37;4515:20;:5;4525:9;4515:20;:9;:20;:::i;:::-;4499:11;;;:37;:15;:37;:::i;:::-;4482:54;-1:-1:-1;4558:16:5;4577:48;4615:9;4577:33;:5;:33;;;;:9;:33;:::i;:::-;:37;:48;:37;:48;:::i;:::-;4558:67;;4647:14;4676:11;4664:9;:23;;;;;;;-1:-1:-1;4713:13:5;;4709:42;;4728:23;4734:5;4741:9;4728:5;:23::i;:::-;4437:333;;;;4278:506;;;4253:598;;;4804:11;;4800:51;;4839:1;4831:5;:9;4800:51;3931:926;;;;;;;:::o;307:292:12:-;352:6;378:1;374;:5;370:223;;;-1:-1:-1;399:1:12;431;427;423:5;;:9;446:89;457:1;453;:5;446:89;;;482:1;478:5;;519:1;514;510;506;:5;;;;;;:9;505:15;;;;;;501:19;;446:89;;;370:223;;;;555:6;;551:42;;-1:-1:-1;581:1:12;551:42;307:292;;;:::o;1353:197:1:-;1425:11;;:22;;1441:5;1425:22;:15;:22;:::i;:::-;1411:11;:36;;;-1:-1:-1;;;;;1473:13:1;;;;-1:-1:-1;1473:13:1;;;;;;:24;;1491:5;1473:17;:24::i;:::-;-1:-1:-1;;;;;1457:13:1;;;;;;-1:-1:-1;1457:13:1;;;;;;;;:40;;;;1512:31;;;;;;;1457:13;;;;1512:31;;;;;;;;;;1353:197;;:::o;98:94:12:-;150:6;176:1;172;:5;:13;;184:1;172:13;;;180:1;172:13;168:17;98:94;-1:-1:-1;;;98:94:12:o;1556:205:1:-;-1:-1:-1;;;;;1634:15:1;;;;;;-1:-1:-1;1634:15:1;;;;;;:26;;1654:5;1634:19;:26::i;:::-;-1:-1:-1;;;;;1616:15:1;;;;;;-1:-1:-1;1616:15:1;;;;;:44;;;;1684:11;:22;;1700:5;1684:15;:22::i;:::-;1670:11;:36;;;1721:33;;;;;;;;-1:-1:-1;;;;;1721:33:1;;;;;;;;;;;;;1556:205;;:::o;283:118:15:-;-1:-1:-1;;;;;358:10:15;-1:-1:-1;;;358:17:15;;283:118::o;469:106::-;529:9;-1:-1:-1;;;;;558:10:15;;-1:-1:-1;;;;;554:14:15;;558:10;554:14;;;;;;469:106;-1:-1:-1;;;469:106:15:o;155:126:13:-;238:5;;;233:16;;;;225:49;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;;" - }, - "contracts/interfaces/IDXswapCallee.sol:IDXswapCallee": { - "abi": [ - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "DXswapCall", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - } - }, - "interface": [ - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "DXswapCall", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "", - "bin": "", - "bin-runtime": "", - "srcmap": "", - "srcmap-runtime": "" - }, - "contracts/interfaces/IDXswapERC20.sol:IDXswapERC20": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - } - }, - "interface": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "", - "bin": "", - "bin-runtime": "", - "srcmap": "", - "srcmap-runtime": "" - }, - "contracts/interfaces/IDXswapFactory.sol:IDXswapFactory": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token0", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token1", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "pair", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "PairCreated", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "INIT_CODE_PAIR_HASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "allPairs", - "outputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "allPairsLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "tokenA", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenB", - "type": "address" - } - ], - "name": "createPair", - "outputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "feeTo", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "feeToSetter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "tokenA", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenB", - "type": "address" - } - ], - "name": "getPair", - "outputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "protocolFeeDenominator", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "setFeeTo", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "setFeeToSetter", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint8", - "name": "_protocolFee", - "type": "uint8" - } - ], - "name": "setProtocolFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - }, - { - "internalType": "uint32", - "name": "swapFee", - "type": "uint32" - } - ], - "name": "setSwapFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - } - }, - "interface": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token0", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token1", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "pair", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "PairCreated", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "INIT_CODE_PAIR_HASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "allPairs", - "outputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "allPairsLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "tokenA", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenB", - "type": "address" - } - ], - "name": "createPair", - "outputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "feeTo", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "feeToSetter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "tokenA", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenB", - "type": "address" - } - ], - "name": "getPair", - "outputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "protocolFeeDenominator", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "setFeeTo", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "setFeeToSetter", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint8", - "name": "_protocolFee", - "type": "uint8" - } - ], - "name": "setProtocolFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - }, - { - "internalType": "uint32", - "name": "swapFee", - "type": "uint32" - } - ], - "name": "setSwapFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "", - "bin": "", - "bin-runtime": "", - "srcmap": "", - "srcmap-runtime": "" - }, - "contracts/interfaces/IDXswapPair.sol:IDXswapPair": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Burn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "name": "Mint", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Swap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint112", - "name": "reserve0", - "type": "uint112" - }, - { - "indexed": false, - "internalType": "uint112", - "name": "reserve1", - "type": "uint112" - } - ], - "name": "Sync", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "MINIMUM_LIQUIDITY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "burn", - "outputs": [ - { - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getReserves", - "outputs": [ - { - "internalType": "uint112", - "name": "reserve0", - "type": "uint112" - }, - { - "internalType": "uint112", - "name": "reserve1", - "type": "uint112" - }, - { - "internalType": "uint32", - "name": "blockTimestampLast", - "type": "uint32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "kLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "liquidity", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "price0CumulativeLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "price1CumulativeLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "setSwapFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "skim", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "swap", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "swapFee", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "sync", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "token0", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "token1", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - } - }, - "interface": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Burn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "name": "Mint", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Swap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint112", - "name": "reserve0", - "type": "uint112" - }, - { - "indexed": false, - "internalType": "uint112", - "name": "reserve1", - "type": "uint112" - } - ], - "name": "Sync", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "MINIMUM_LIQUIDITY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "burn", - "outputs": [ - { - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getReserves", - "outputs": [ - { - "internalType": "uint112", - "name": "reserve0", - "type": "uint112" - }, - { - "internalType": "uint112", - "name": "reserve1", - "type": "uint112" - }, - { - "internalType": "uint32", - "name": "blockTimestampLast", - "type": "uint32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "kLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "liquidity", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "price0CumulativeLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "price1CumulativeLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "setSwapFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "skim", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "swap", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "swapFee", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "sync", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "token0", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "token1", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "", - "bin": "", - "bin-runtime": "", - "srcmap": "", - "srcmap-runtime": "" - }, - "contracts/interfaces/IERC20.sol:IERC20": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - } - }, - "interface": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "", - "bin": "", - "bin-runtime": "", - "srcmap": "", - "srcmap-runtime": "" - }, - "contracts/interfaces/IWETH.sol:IWETH": { - "abi": [ - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "deposit", - "outputs": [], - "payable": true, - "stateMutability": "payable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - } - }, - "interface": [ - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "deposit", - "outputs": [], - "payable": true, - "stateMutability": "payable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "", - "bin": "", - "bin-runtime": "", - "srcmap": "", - "srcmap-runtime": "" - }, - "contracts/libraries/Math.sol:Math": { - "abi": [], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582037bc2442f4b30fdf8402874de6d1888898c3ade68df9e76bc96ff02bc367d7cb64736f6c63430005100032", - "opcodes": "PUSH1 0x55 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 CALLDATACOPY 0xBC 0x24 TIMESTAMP DELEGATECALL 0xB3 0xF 0xDF DUP5 MUL DUP8 0x4D 0xE6 0xD1 DUP9 DUP9 SWAP9 0xC3 0xAD 0xE6 DUP14 0xF9 0xE7 PUSH12 0xC96FF02BC367D7CB64736F6C PUSH4 0x43000510 STOP ORIGIN ", - "sourceMap": "79:522:12:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582037bc2442f4b30fdf8402874de6d1888898c3ade68df9e76bc96ff02bc367d7cb64736f6c63430005100032", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 CALLDATACOPY 0xBC 0x24 TIMESTAMP DELEGATECALL 0xB3 0xF 0xDF DUP5 MUL DUP8 0x4D 0xE6 0xD1 DUP9 DUP9 SWAP9 0xC3 0xAD 0xE6 DUP14 0xF9 0xE7 PUSH12 0xC96FF02BC367D7CB64736F6C PUSH4 0x43000510 STOP ORIGIN ", - "sourceMap": "79:522:12:-;;;;;;;;" - } - }, - "interface": [], - "bytecode": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582037bc2442f4b30fdf8402874de6d1888898c3ade68df9e76bc96ff02bc367d7cb64736f6c63430005100032", - "bin": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582037bc2442f4b30fdf8402874de6d1888898c3ade68df9e76bc96ff02bc367d7cb64736f6c63430005100032", - "bin-runtime": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582037bc2442f4b30fdf8402874de6d1888898c3ade68df9e76bc96ff02bc367d7cb64736f6c63430005100032", - "srcmap": "79:522:12:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24", - "srcmap-runtime": "79:522:12:-;;;;;;;;" - }, - "contracts/libraries/SafeMath.sol:SafeMath": { - "abi": [], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158206671d3ecff2622b6458811f5d1b4829db14b368de5bed9d0c4afb3937ddce30e64736f6c63430005100032", - "opcodes": "PUSH1 0x55 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 PUSH7 0x71D3ECFF2622B6 GASLIMIT DUP9 GT CREATE2 0xD1 0xB4 DUP3 SWAP14 0xB1 0x4B CALLDATASIZE DUP14 0xE5 0xBE 0xD9 0xD0 0xC4 0xAF 0xB3 SWAP4 PUSH30 0xDCE30E64736F6C6343000510003200000000000000000000000000000000 ", - "sourceMap": "132:430:13:-;;:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158206671d3ecff2622b6458811f5d1b4829db14b368de5bed9d0c4afb3937ddce30e64736f6c63430005100032", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 PUSH7 0x71D3ECFF2622B6 GASLIMIT DUP9 GT CREATE2 0xD1 0xB4 DUP3 SWAP14 0xB1 0x4B CALLDATASIZE DUP14 0xE5 0xBE 0xD9 0xD0 0xC4 0xAF 0xB3 SWAP4 PUSH30 0xDCE30E64736F6C6343000510003200000000000000000000000000000000 ", - "sourceMap": "132:430:13:-;;;;;;;;" - } - }, - "interface": [], - "bytecode": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158206671d3ecff2622b6458811f5d1b4829db14b368de5bed9d0c4afb3937ddce30e64736f6c63430005100032", - "bin": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158206671d3ecff2622b6458811f5d1b4829db14b368de5bed9d0c4afb3937ddce30e64736f6c63430005100032", - "bin-runtime": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158206671d3ecff2622b6458811f5d1b4829db14b368de5bed9d0c4afb3937ddce30e64736f6c63430005100032", - "srcmap": "132:430:13:-;;:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24", - "srcmap-runtime": "132:430:13:-;;;;;;;;" - }, - "contracts/libraries/TransferHelper.sol:TransferHelper": { - "abi": [], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158203210b5fc9b0bec246fb225a524d96dbbc594e61a286062754f2cc04a2fb9d04064736f6c63430005100032", - "opcodes": "PUSH1 0x55 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 ORIGIN LT 0xB5 0xFC SWAP12 SIGNEXTEND 0xEC 0x24 PUSH16 0xB225A524D96DBBC594E61A286062754F 0x2C 0xC0 0x4A 0x2F 0xB9 0xD0 BLOCKHASH PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ", - "sourceMap": "137:1350:14:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158203210b5fc9b0bec246fb225a524d96dbbc594e61a286062754f2cc04a2fb9d04064736f6c63430005100032", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 ORIGIN LT 0xB5 0xFC SWAP12 SIGNEXTEND 0xEC 0x24 PUSH16 0xB225A524D96DBBC594E61A286062754F 0x2C 0xC0 0x4A 0x2F 0xB9 0xD0 BLOCKHASH PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ", - "sourceMap": "137:1350:14:-;;;;;;;;" - } - }, - "interface": [], - "bytecode": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158203210b5fc9b0bec246fb225a524d96dbbc594e61a286062754f2cc04a2fb9d04064736f6c63430005100032", - "bin": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158203210b5fc9b0bec246fb225a524d96dbbc594e61a286062754f2cc04a2fb9d04064736f6c63430005100032", - "bin-runtime": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158203210b5fc9b0bec246fb225a524d96dbbc594e61a286062754f2cc04a2fb9d04064736f6c63430005100032", - "srcmap": "137:1350:14:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24", - "srcmap-runtime": "137:1350:14:-;;;;;;;;" - }, - "contracts/libraries/UQ112x112.sol:UQ112x112": { - "abi": [], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820873aca9adcb3b9775d4b2b6b72bb860dc700ff3f6e53c90ead2a215d18dc61cb64736f6c63430005100032", - "opcodes": "PUSH1 0x55 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 DUP8 GASPRICE 0xCA SWAP11 0xDC 0xB3 0xB9 PUSH24 0x5D4B2B6B72BB860DC700FF3F6E53C90EAD2A215D18DC61CB PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ", - "sourceMap": "183:394:15:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820873aca9adcb3b9775d4b2b6b72bb860dc700ff3f6e53c90ead2a215d18dc61cb64736f6c63430005100032", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 DUP8 GASPRICE 0xCA SWAP11 0xDC 0xB3 0xB9 PUSH24 0x5D4B2B6B72BB860DC700FF3F6E53C90EAD2A215D18DC61CB PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ", - "sourceMap": "183:394:15:-;;;;;;;;" - } - }, - "interface": [], - "bytecode": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820873aca9adcb3b9775d4b2b6b72bb860dc700ff3f6e53c90ead2a215d18dc61cb64736f6c63430005100032", - "bin": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820873aca9adcb3b9775d4b2b6b72bb860dc700ff3f6e53c90ead2a215d18dc61cb64736f6c63430005100032", - "bin-runtime": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820873aca9adcb3b9775d4b2b6b72bb860dc700ff3f6e53c90ead2a215d18dc61cb64736f6c63430005100032", - "srcmap": "183:394:15:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24", - "srcmap-runtime": "183:394:15:-;;;;;;;;" - }, - "contracts/test/ERC20.sol:ERC20": { - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "_totalSupply", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50604051610af2380380610af28339818101604052602081101561003357600080fd5b50516040514690806052610aa08239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c0909401905282519201919091206003555061011233826001600160e01b0361011816565b50610218565b610131816000546101ba60201b6107f51790919060201c565b60009081556001600160a01b0383168152600160209081526040909120546101629183906107f56101ba821b17901c565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b80820182811015610212576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b92915050565b610879806102276000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633644e5151161008c57806395d89b411161006657806395d89b411461025b578063a9059cbb14610263578063d505accf1461028f578063dd62ed3e146102e2576100cf565b80633644e5151461020757806370a082311461020f5780637ecebe0014610235576100cf565b806306fdde03146100d4578063095ea7b31461015157806318160ddd1461019157806323b872dd146101ab57806330adf81f146101e1578063313ce567146101e9575b600080fd5b6100dc610310565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101165781810151838201526020016100fe565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561016757600080fd5b506001600160a01b038135169060200135610332565b604080519115158252519081900360200190f35b610199610349565b60408051918252519081900360200190f35b61017d600480360360608110156101c157600080fd5b506001600160a01b0381358116916020810135909116906040013561034f565b6101996103e9565b6101f161040d565b6040805160ff9092168252519081900360200190f35b610199610412565b6101996004803603602081101561022557600080fd5b50356001600160a01b0316610418565b6101996004803603602081101561024b57600080fd5b50356001600160a01b031661042a565b6100dc61043c565b61017d6004803603604081101561027957600080fd5b506001600160a01b03813516906020013561045b565b6102e0600480360360e08110156102a557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610468565b005b610199600480360360408110156102f857600080fd5b506001600160a01b038135811691602001351661066c565b6040518060400160405280600681526020016504458737761760d41b81525081565b600061033f338484610689565b5060015b92915050565b60005481565b6001600160a01b0383166000908152600260209081526040808320338452909152812054600019146103d4576001600160a01b03841660009081526002602090815260408083203384529091529020546103af908363ffffffff6106eb16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6103df84848461073b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60016020526000908152604090205481565b60046020526000908152604090205481565b6040518060400160405280600381526020016244585360e81b81525081565b600061033f33848461073b565b428410156104b4576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156105cf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106055750886001600160a01b0316816001600160a01b0316145b610656576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b610661898989610689565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115610343576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054610764908263ffffffff6106eb16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610799908263ffffffff6107f516565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b80820182811015610343576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfea265627a7a72315820acc66d605ef803800bc0ad824de198572eb947847195b71e3f6678566aff2be064736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xAF2 CODESIZE SUB DUP1 PUSH2 0xAF2 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 MLOAD CHAINID SWAP1 DUP1 PUSH1 0x52 PUSH2 0xAA0 DUP3 CODECOPY PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB PUSH1 0x52 ADD DUP3 KECCAK256 DUP3 DUP3 ADD DUP3 MSTORE PUSH1 0x6 DUP4 MSTORE PUSH6 0x44587377617 PUSH1 0xD4 SHL PUSH1 0x20 SWAP4 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD DUP4 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL SWAP1 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x3649D708A7ABF9E212D0A587955EAD4123223014B2E46201DFB587457CBD4591 DUP2 DUP4 ADD MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP1 MSTORE DUP3 MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x3 SSTORE POP PUSH2 0x112 CALLER DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH2 0x118 AND JUMP JUMPDEST POP PUSH2 0x218 JUMP JUMPDEST PUSH2 0x131 DUP2 PUSH1 0x0 SLOAD PUSH2 0x1BA PUSH1 0x20 SHL PUSH2 0x7F5 OR SWAP1 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x162 SWAP2 DUP4 SWAP1 PUSH2 0x7F5 PUSH2 0x1BA DUP3 SHL OR SWAP1 SHR JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x212 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x64732D6D6174682D6164642D6F766572666C6F77000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x879 DUP1 PUSH2 0x227 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3644E515 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0x95D89B41 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x263 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x28F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2E2 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x3644E515 EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x20F JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x235 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x191 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1AB JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x1E1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1E9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDC PUSH2 0x310 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x116 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xFE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x143 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x332 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x199 PUSH2 0x349 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x34F JUMP JUMPDEST PUSH2 0x199 PUSH2 0x3E9 JUMP JUMPDEST PUSH2 0x1F1 PUSH2 0x40D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x199 PUSH2 0x412 JUMP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x225 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x418 JUMP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x24B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x42A JUMP JUMPDEST PUSH2 0xDC PUSH2 0x43C JUMP JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x45B JUMP JUMPDEST PUSH2 0x2E0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x2A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x468 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x66C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x44587377617 PUSH1 0xD4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F CALLER DUP5 DUP5 PUSH2 0x689 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x3D4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x3AF SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x6EB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE JUMPDEST PUSH2 0x3DF DUP5 DUP5 DUP5 PUSH2 0x73B JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x445853 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F CALLER DUP5 DUP5 PUSH2 0x73B JUMP JUMPDEST TIMESTAMP DUP5 LT ISZERO PUSH2 0x4B4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x11161CDDD85C115490CC8C0E8811561412549151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP12 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP6 ADD DUP3 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x102 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH2 0x122 DUP1 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP7 ADD DUP7 MSTORE PUSH2 0x142 DUP5 ADD DUP1 DUP3 MSTORE DUP7 MLOAD SWAP7 DUP4 ADD SWAP7 SWAP1 SWAP7 KECCAK256 SWAP6 DUP4 SWAP1 MSTORE PUSH2 0x162 DUP5 ADD DUP1 DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0xFF DUP10 AND PUSH2 0x182 DUP6 ADD MSTORE PUSH2 0x1A2 DUP5 ADD DUP9 SWAP1 MSTORE PUSH2 0x1C2 DUP5 ADD DUP8 SWAP1 MSTORE MLOAD SWAP2 SWAP4 SWAP3 PUSH2 0x1E2 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x605 JUMPI POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x656 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617045524332303A20494E56414C49445F5349474E41545552450000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x661 DUP10 DUP10 DUP10 PUSH2 0x689 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x343 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x764 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x6EB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x799 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x7F5 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x343 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xAC 0xC6 PUSH14 0x605EF803800BC0AD824DE198572E 0xB9 SELFBALANCE DUP5 PUSH18 0x95B71E3F6678566AFF2BE064736F6C634300 SDIV LT STOP ORIGIN GASLIMIT 0x49 POP CALLDATACOPY BALANCE ORIGIN DIFFICULTY PUSH16 0x6D61696E28737472696E67206E616D65 0x2C PUSH20 0x7472696E672076657273696F6E2C75696E743235 CALLDATASIZE KECCAK256 PUSH4 0x6861696E 0x49 PUSH5 0x2C61646472 PUSH6 0x737320766572 PUSH10 0x6679696E67436F6E7472 PUSH2 0x6374 0x29 ", - "sourceMap": "56:124:16:-;;;92:86;8:9:-1;5:2;;;30:1;27;20:12;5:2;92:86:16;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;92:86:16;1086:95:1;;990:7;;1086:95;;;;;;;;;;;;;;;;1215:4;;;;;;;;-1:-1:-1;;;1215:4:1;;;;;1249:10;;;;;;;;;;-1:-1:-1;;;1249:10:1;;;;1058:272;;;;;;;;;1199:22;1058:272;;;;1239:21;1058:272;;;;;;;;;;;1311:4;1058:272;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1058:272:1;;;;;;1035:305;;;;;;;;1016:16;:324;-1:-1:-1;140:31:16;146:10;158:12;-1:-1:-1;;;;;140:5:16;:31;:::i;:::-;92:86;56:124;;1353:197:1;1425:22;1441:5;1425:11;;:15;;;;;;:22;;;;:::i;:::-;1411:11;:36;;;-1:-1:-1;;;;;1473:13:1;;;;:9;:13;;;;;;;;;:24;;1491:5;;1473:17;;;;;:24;;:::i;:::-;-1:-1:-1;;;;;1457:13:1;;;;;;:9;:13;;;;;;;;:40;;;;1512:31;;;;;;;1457:13;;;;1512:31;;;;;;;;;;1353:197;;:::o;155:126:13:-;238:5;;;233:16;;;;225:49;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;155:126;;;;:::o;56:124:16:-;;;;;;;" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633644e5151161008c57806395d89b411161006657806395d89b411461025b578063a9059cbb14610263578063d505accf1461028f578063dd62ed3e146102e2576100cf565b80633644e5151461020757806370a082311461020f5780637ecebe0014610235576100cf565b806306fdde03146100d4578063095ea7b31461015157806318160ddd1461019157806323b872dd146101ab57806330adf81f146101e1578063313ce567146101e9575b600080fd5b6100dc610310565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101165781810151838201526020016100fe565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561016757600080fd5b506001600160a01b038135169060200135610332565b604080519115158252519081900360200190f35b610199610349565b60408051918252519081900360200190f35b61017d600480360360608110156101c157600080fd5b506001600160a01b0381358116916020810135909116906040013561034f565b6101996103e9565b6101f161040d565b6040805160ff9092168252519081900360200190f35b610199610412565b6101996004803603602081101561022557600080fd5b50356001600160a01b0316610418565b6101996004803603602081101561024b57600080fd5b50356001600160a01b031661042a565b6100dc61043c565b61017d6004803603604081101561027957600080fd5b506001600160a01b03813516906020013561045b565b6102e0600480360360e08110156102a557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610468565b005b610199600480360360408110156102f857600080fd5b506001600160a01b038135811691602001351661066c565b6040518060400160405280600681526020016504458737761760d41b81525081565b600061033f338484610689565b5060015b92915050565b60005481565b6001600160a01b0383166000908152600260209081526040808320338452909152812054600019146103d4576001600160a01b03841660009081526002602090815260408083203384529091529020546103af908363ffffffff6106eb16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6103df84848461073b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60016020526000908152604090205481565b60046020526000908152604090205481565b6040518060400160405280600381526020016244585360e81b81525081565b600061033f33848461073b565b428410156104b4576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156105cf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106055750886001600160a01b0316816001600160a01b0316145b610656576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b610661898989610689565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115610343576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054610764908263ffffffff6106eb16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610799908263ffffffff6107f516565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b80820182811015610343576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfea265627a7a72315820acc66d605ef803800bc0ad824de198572eb947847195b71e3f6678566aff2be064736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3644E515 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0x95D89B41 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x263 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x28F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2E2 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x3644E515 EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x20F JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x235 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x191 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1AB JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x1E1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1E9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDC PUSH2 0x310 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x116 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xFE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x143 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x332 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x199 PUSH2 0x349 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x34F JUMP JUMPDEST PUSH2 0x199 PUSH2 0x3E9 JUMP JUMPDEST PUSH2 0x1F1 PUSH2 0x40D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x199 PUSH2 0x412 JUMP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x225 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x418 JUMP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x24B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x42A JUMP JUMPDEST PUSH2 0xDC PUSH2 0x43C JUMP JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x45B JUMP JUMPDEST PUSH2 0x2E0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x2A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x468 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x66C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x44587377617 PUSH1 0xD4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F CALLER DUP5 DUP5 PUSH2 0x689 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x3D4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x3AF SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x6EB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE JUMPDEST PUSH2 0x3DF DUP5 DUP5 DUP5 PUSH2 0x73B JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x445853 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F CALLER DUP5 DUP5 PUSH2 0x73B JUMP JUMPDEST TIMESTAMP DUP5 LT ISZERO PUSH2 0x4B4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x11161CDDD85C115490CC8C0E8811561412549151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP12 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP6 ADD DUP3 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x102 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH2 0x122 DUP1 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP7 ADD DUP7 MSTORE PUSH2 0x142 DUP5 ADD DUP1 DUP3 MSTORE DUP7 MLOAD SWAP7 DUP4 ADD SWAP7 SWAP1 SWAP7 KECCAK256 SWAP6 DUP4 SWAP1 MSTORE PUSH2 0x162 DUP5 ADD DUP1 DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0xFF DUP10 AND PUSH2 0x182 DUP6 ADD MSTORE PUSH2 0x1A2 DUP5 ADD DUP9 SWAP1 MSTORE PUSH2 0x1C2 DUP5 ADD DUP8 SWAP1 MSTORE MLOAD SWAP2 SWAP4 SWAP3 PUSH2 0x1E2 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x605 JUMPI POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x656 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617045524332303A20494E56414C49445F5349474E41545552450000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x661 DUP10 DUP10 DUP10 PUSH2 0x689 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x343 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x764 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x6EB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x799 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x7F5 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x343 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xAC 0xC6 PUSH14 0x605EF803800BC0AD824DE198572E 0xB9 SELFBALANCE DUP5 PUSH18 0x95B71E3F6678566AFF2BE064736F6C634300 SDIV LT STOP ORIGIN ", - "sourceMap": "56:124:16:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;56:124:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;175:38:1;;;:::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;175:38:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2161:144;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2161:144:1;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;303:24;;;:::i;:::-;;;;;;;;;;;;;;;;2453:295;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2453:295:1;;;;;;;;;;;;;;;;;:::i;589:108::-;;;:::i;262:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;448:31;;;:::i;333:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;333:41:1;-1:-1:-1;;;;;333:41:1;;:::i;703:38::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;703:38:1;-1:-1:-1;;;;;703:38:1;;:::i;219:37::-;;;:::i;2311:136::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2311:136:1;;;;;;;;:::i;2754:666::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;2754:666:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;380:61;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;380:61:1;;;;;;;;;;:::i;175:38::-;;;;;;;;;;;;;;-1:-1:-1;;;175:38:1;;;;:::o;2161:144::-;2225:4;2241:36;2250:10;2262:7;2271:5;2241:8;:36::i;:::-;-1:-1:-1;2294:4:1;2161:144;;;;;:::o;303:24::-;;;;:::o;2453:295::-;-1:-1:-1;;;;;2551:15:1;;2531:4;2551:15;;;:9;:15;;;;;;;;2567:10;2551:27;;;;;;;;-1:-1:-1;;2551:39:1;2547:138;;-1:-1:-1;;;;;2636:15:1;;;;;;:9;:15;;;;;;;;2652:10;2636:27;;;;;;;;:38;;2668:5;2636:38;:31;:38;:::i;:::-;-1:-1:-1;;;;;2606:15:1;;;;;;:9;:15;;;;;;;;2622:10;2606:27;;;;;;;:68;2547:138;2694:26;2704:4;2710:2;2714:5;2694:9;:26::i;:::-;-1:-1:-1;2737:4:1;2453:295;;;;;:::o;589:108::-;631:66;589:108;:::o;262:35::-;295:2;262:35;:::o;448:31::-;;;;:::o;333:41::-;;;;;;;;;;;;;:::o;703:38::-;;;;;;;;;;;;;:::o;219:37::-;;;;;;;;;;;;;;-1:-1:-1;;;219:37:1;;;;:::o;2311:136::-;2371:4;2387:32;2397:10;2409:2;2413:5;2387:9;:32::i;2754:666::-;2899:15;2887:8;:27;;2879:60;;;;;-1:-1:-1;;;2879:60:1;;;;;;;;;;;;-1:-1:-1;;;2879:60:1;;;;;;;;;;;;;;;3051:16;;-1:-1:-1;;;;;3146:13:1;;;2949:14;3146:13;;;:6;:13;;;;;;;;:15;;;;;;;;;3095:77;;631:66;3095:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3095:77:1;;;;;3085:88;;;;;;-1:-1:-1;;;2989:198:1;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2989:198:1;;;;;;2966:231;;;;;;;;;3234:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2949:14;;3146:15;3234:26;;;;;-1:-1:-1;;3234:26:1;;;;;;;;;;3146:15;3234:26;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;3234:26:1;;-1:-1:-1;;3234:26:1;;;-1:-1:-1;;;;;;;3278:30:1;;;;;;:59;;;3332:5;-1:-1:-1;;;;;3312:25:1;:16;-1:-1:-1;;;;;3312:25:1;;3278:59;3270:102;;;;;-1:-1:-1;;;3270:102:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;3382:31;3391:5;3398:7;3407:5;3382:8;:31::i;:::-;2754:666;;;;;;;;;:::o;380:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;1767:166::-;-1:-1:-1;;;;;1847:16:1;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;1895:31;;;;;;;;;;;;;;;;;1767:166;;;:::o;287:127:13:-;370:5;;;365:16;;;;357:50;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;;;1939:216:1;-1:-1:-1;;;;;2032:15:1;;;;;;:9;:15;;;;;;:26;;2052:5;2032:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;2014:15:1;;;;;;;:9;:15;;;;;;:44;;;;2084:13;;;;;;;:24;;2102:5;2084:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;2068:13:1;;;;;;;:9;:13;;;;;;;;;:40;;;;2123:25;;;;;;;2068:13;;2123:25;;;;;;;;;;;;;1939:216;;;:::o;155:126:13:-;238:5;;;233:16;;;;225:49;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;;" - } - }, - "interface": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "_totalSupply", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "608060405234801561001057600080fd5b50604051610af2380380610af28339818101604052602081101561003357600080fd5b50516040514690806052610aa08239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c0909401905282519201919091206003555061011233826001600160e01b0361011816565b50610218565b610131816000546101ba60201b6107f51790919060201c565b60009081556001600160a01b0383168152600160209081526040909120546101629183906107f56101ba821b17901c565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b80820182811015610212576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b92915050565b610879806102276000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633644e5151161008c57806395d89b411161006657806395d89b411461025b578063a9059cbb14610263578063d505accf1461028f578063dd62ed3e146102e2576100cf565b80633644e5151461020757806370a082311461020f5780637ecebe0014610235576100cf565b806306fdde03146100d4578063095ea7b31461015157806318160ddd1461019157806323b872dd146101ab57806330adf81f146101e1578063313ce567146101e9575b600080fd5b6100dc610310565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101165781810151838201526020016100fe565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561016757600080fd5b506001600160a01b038135169060200135610332565b604080519115158252519081900360200190f35b610199610349565b60408051918252519081900360200190f35b61017d600480360360608110156101c157600080fd5b506001600160a01b0381358116916020810135909116906040013561034f565b6101996103e9565b6101f161040d565b6040805160ff9092168252519081900360200190f35b610199610412565b6101996004803603602081101561022557600080fd5b50356001600160a01b0316610418565b6101996004803603602081101561024b57600080fd5b50356001600160a01b031661042a565b6100dc61043c565b61017d6004803603604081101561027957600080fd5b506001600160a01b03813516906020013561045b565b6102e0600480360360e08110156102a557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610468565b005b610199600480360360408110156102f857600080fd5b506001600160a01b038135811691602001351661066c565b6040518060400160405280600681526020016504458737761760d41b81525081565b600061033f338484610689565b5060015b92915050565b60005481565b6001600160a01b0383166000908152600260209081526040808320338452909152812054600019146103d4576001600160a01b03841660009081526002602090815260408083203384529091529020546103af908363ffffffff6106eb16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6103df84848461073b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60016020526000908152604090205481565b60046020526000908152604090205481565b6040518060400160405280600381526020016244585360e81b81525081565b600061033f33848461073b565b428410156104b4576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156105cf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106055750886001600160a01b0316816001600160a01b0316145b610656576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b610661898989610689565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115610343576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054610764908263ffffffff6106eb16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610799908263ffffffff6107f516565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b80820182811015610343576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfea265627a7a72315820acc66d605ef803800bc0ad824de198572eb947847195b71e3f6678566aff2be064736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", - "bin": "608060405234801561001057600080fd5b50604051610af2380380610af28339818101604052602081101561003357600080fd5b50516040514690806052610aa08239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c0909401905282519201919091206003555061011233826001600160e01b0361011816565b50610218565b610131816000546101ba60201b6107f51790919060201c565b60009081556001600160a01b0383168152600160209081526040909120546101629183906107f56101ba821b17901c565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b80820182811015610212576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b92915050565b610879806102276000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633644e5151161008c57806395d89b411161006657806395d89b411461025b578063a9059cbb14610263578063d505accf1461028f578063dd62ed3e146102e2576100cf565b80633644e5151461020757806370a082311461020f5780637ecebe0014610235576100cf565b806306fdde03146100d4578063095ea7b31461015157806318160ddd1461019157806323b872dd146101ab57806330adf81f146101e1578063313ce567146101e9575b600080fd5b6100dc610310565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101165781810151838201526020016100fe565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561016757600080fd5b506001600160a01b038135169060200135610332565b604080519115158252519081900360200190f35b610199610349565b60408051918252519081900360200190f35b61017d600480360360608110156101c157600080fd5b506001600160a01b0381358116916020810135909116906040013561034f565b6101996103e9565b6101f161040d565b6040805160ff9092168252519081900360200190f35b610199610412565b6101996004803603602081101561022557600080fd5b50356001600160a01b0316610418565b6101996004803603602081101561024b57600080fd5b50356001600160a01b031661042a565b6100dc61043c565b61017d6004803603604081101561027957600080fd5b506001600160a01b03813516906020013561045b565b6102e0600480360360e08110156102a557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610468565b005b610199600480360360408110156102f857600080fd5b506001600160a01b038135811691602001351661066c565b6040518060400160405280600681526020016504458737761760d41b81525081565b600061033f338484610689565b5060015b92915050565b60005481565b6001600160a01b0383166000908152600260209081526040808320338452909152812054600019146103d4576001600160a01b03841660009081526002602090815260408083203384529091529020546103af908363ffffffff6106eb16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6103df84848461073b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60016020526000908152604090205481565b60046020526000908152604090205481565b6040518060400160405280600381526020016244585360e81b81525081565b600061033f33848461073b565b428410156104b4576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156105cf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106055750886001600160a01b0316816001600160a01b0316145b610656576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b610661898989610689565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115610343576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054610764908263ffffffff6106eb16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610799908263ffffffff6107f516565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b80820182811015610343576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfea265627a7a72315820acc66d605ef803800bc0ad824de198572eb947847195b71e3f6678566aff2be064736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", - "bin-runtime": "608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633644e5151161008c57806395d89b411161006657806395d89b411461025b578063a9059cbb14610263578063d505accf1461028f578063dd62ed3e146102e2576100cf565b80633644e5151461020757806370a082311461020f5780637ecebe0014610235576100cf565b806306fdde03146100d4578063095ea7b31461015157806318160ddd1461019157806323b872dd146101ab57806330adf81f146101e1578063313ce567146101e9575b600080fd5b6100dc610310565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101165781810151838201526020016100fe565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561016757600080fd5b506001600160a01b038135169060200135610332565b604080519115158252519081900360200190f35b610199610349565b60408051918252519081900360200190f35b61017d600480360360608110156101c157600080fd5b506001600160a01b0381358116916020810135909116906040013561034f565b6101996103e9565b6101f161040d565b6040805160ff9092168252519081900360200190f35b610199610412565b6101996004803603602081101561022557600080fd5b50356001600160a01b0316610418565b6101996004803603602081101561024b57600080fd5b50356001600160a01b031661042a565b6100dc61043c565b61017d6004803603604081101561027957600080fd5b506001600160a01b03813516906020013561045b565b6102e0600480360360e08110156102a557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610468565b005b610199600480360360408110156102f857600080fd5b506001600160a01b038135811691602001351661066c565b6040518060400160405280600681526020016504458737761760d41b81525081565b600061033f338484610689565b5060015b92915050565b60005481565b6001600160a01b0383166000908152600260209081526040808320338452909152812054600019146103d4576001600160a01b03841660009081526002602090815260408083203384529091529020546103af908363ffffffff6106eb16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6103df84848461073b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60016020526000908152604090205481565b60046020526000908152604090205481565b6040518060400160405280600381526020016244585360e81b81525081565b600061033f33848461073b565b428410156104b4576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156105cf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106055750886001600160a01b0316816001600160a01b0316145b610656576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b610661898989610689565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115610343576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054610764908263ffffffff6106eb16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610799908263ffffffff6107f516565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b80820182811015610343576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfea265627a7a72315820acc66d605ef803800bc0ad824de198572eb947847195b71e3f6678566aff2be064736f6c63430005100032", - "srcmap": "56:124:16:-;;;92:86;8:9:-1;5:2;;;30:1;27;20:12;5:2;92:86:16;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;92:86:16;1086:95:1;;990:7;;1086:95;;;;;;;;;;;;;;;;1215:4;;;;;;;;-1:-1:-1;;;1215:4:1;;;;;1249:10;;;;;;;;;;-1:-1:-1;;;1249:10:1;;;;1058:272;;;;;;;;;1199:22;1058:272;;;;1239:21;1058:272;;;;;;;;;;;1311:4;1058:272;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1058:272:1;;;;;;1035:305;;;;;;;;1016:16;:324;-1:-1:-1;140:31:16;146:10;158:12;-1:-1:-1;;;;;140:5:16;:31;:::i;:::-;92:86;56:124;;1353:197:1;1425:22;1441:5;1425:11;;:15;;;;;;:22;;;;:::i;:::-;1411:11;:36;;;-1:-1:-1;;;;;1473:13:1;;;;:9;:13;;;;;;;;;:24;;1491:5;;1473:17;;;;;:24;;:::i;:::-;-1:-1:-1;;;;;1457:13:1;;;;;;:9;:13;;;;;;;;:40;;;;1512:31;;;;;;;1457:13;;;;1512:31;;;;;;;;;;1353:197;;:::o;155:126:13:-;238:5;;;233:16;;;;225:49;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;155:126;;;;:::o;56:124:16:-;;;;;;;", - "srcmap-runtime": "56:124:16:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;56:124:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;175:38:1;;;:::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;175:38:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2161:144;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2161:144:1;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;303:24;;;:::i;:::-;;;;;;;;;;;;;;;;2453:295;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2453:295:1;;;;;;;;;;;;;;;;;:::i;589:108::-;;;:::i;262:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;448:31;;;:::i;333:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;333:41:1;-1:-1:-1;;;;;333:41:1;;:::i;703:38::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;703:38:1;-1:-1:-1;;;;;703:38:1;;:::i;219:37::-;;;:::i;2311:136::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2311:136:1;;;;;;;;:::i;2754:666::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;2754:666:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;380:61;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;380:61:1;;;;;;;;;;:::i;175:38::-;;;;;;;;;;;;;;-1:-1:-1;;;175:38:1;;;;:::o;2161:144::-;2225:4;2241:36;2250:10;2262:7;2271:5;2241:8;:36::i;:::-;-1:-1:-1;2294:4:1;2161:144;;;;;:::o;303:24::-;;;;:::o;2453:295::-;-1:-1:-1;;;;;2551:15:1;;2531:4;2551:15;;;:9;:15;;;;;;;;2567:10;2551:27;;;;;;;;-1:-1:-1;;2551:39:1;2547:138;;-1:-1:-1;;;;;2636:15:1;;;;;;:9;:15;;;;;;;;2652:10;2636:27;;;;;;;;:38;;2668:5;2636:38;:31;:38;:::i;:::-;-1:-1:-1;;;;;2606:15:1;;;;;;:9;:15;;;;;;;;2622:10;2606:27;;;;;;;:68;2547:138;2694:26;2704:4;2710:2;2714:5;2694:9;:26::i;:::-;-1:-1:-1;2737:4:1;2453:295;;;;;:::o;589:108::-;631:66;589:108;:::o;262:35::-;295:2;262:35;:::o;448:31::-;;;;:::o;333:41::-;;;;;;;;;;;;;:::o;703:38::-;;;;;;;;;;;;;:::o;219:37::-;;;;;;;;;;;;;;-1:-1:-1;;;219:37:1;;;;:::o;2311:136::-;2371:4;2387:32;2397:10;2409:2;2413:5;2387:9;:32::i;2754:666::-;2899:15;2887:8;:27;;2879:60;;;;;-1:-1:-1;;;2879:60:1;;;;;;;;;;;;-1:-1:-1;;;2879:60:1;;;;;;;;;;;;;;;3051:16;;-1:-1:-1;;;;;3146:13:1;;;2949:14;3146:13;;;:6;:13;;;;;;;;:15;;;;;;;;;3095:77;;631:66;3095:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3095:77:1;;;;;3085:88;;;;;;-1:-1:-1;;;2989:198:1;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2989:198:1;;;;;;2966:231;;;;;;;;;3234:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2949:14;;3146:15;3234:26;;;;;-1:-1:-1;;3234:26:1;;;;;;;;;;3146:15;3234:26;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;3234:26:1;;-1:-1:-1;;3234:26:1;;;-1:-1:-1;;;;;;;3278:30:1;;;;;;:59;;;3332:5;-1:-1:-1;;;;;3312:25:1;:16;-1:-1:-1;;;;;3312:25:1;;3278:59;3270:102;;;;;-1:-1:-1;;;3270:102:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;3382:31;3391:5;3398:7;3407:5;3382:8;:31::i;:::-;2754:666;;;;;;;;;:::o;380:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;1767:166::-;-1:-1:-1;;;;;1847:16:1;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;1895:31;;;;;;;;;;;;;;;;;1767:166;;;:::o;287:127:13:-;370:5;;;365:16;;;;357:50;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;;;1939:216:1;-1:-1:-1;;;;;2032:15:1;;;;;;:9;:15;;;;;;:26;;2052:5;2032:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;2014:15:1;;;;;;;:9;:15;;;;;;:44;;;;2084:13;;;;;;;:24;;2102:5;2084:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;2068:13:1;;;;;;;:9;:13;;;;;;;;;:40;;;;2123:25;;;;;;;2068:13;;2123:25;;;;;;;;;;;;;1939:216;;;:::o;155:126:13:-;238:5;;;233:16;;;;225:49;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;;" - }, - "contracts/test/WETH9.sol:WETH9": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "guy", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "guy", - "type": "address" - }, - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "deposit", - "outputs": [], - "payable": true, - "stateMutability": "payable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "60c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b50610115565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100bb57805160ff19168380011785556100e8565b828001600101855582156100e8579182015b828111156100e85782518255916020019190600101906100cd565b506100f49291506100f8565b5090565b61011291905b808211156100f457600081556001016100fe565b90565b61074e806101246000396000f3fe60806040526004361061009c5760003560e01c8063313ce56711610064578063313ce5671461020e57806370a082311461023957806395d89b411461026c578063a9059cbb14610281578063d0e30db0146102ba578063dd62ed3e146102c25761009c565b806306fdde03146100a1578063095ea7b31461012b57806318160ddd1461017857806323b872dd1461019f5780632e1a7d4d146101e2575b600080fd5b3480156100ad57600080fd5b506100b66102fd565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f05781810151838201526020016100d8565b50505050905090810190601f16801561011d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561013757600080fd5b506101646004803603604081101561014e57600080fd5b506001600160a01b03813516906020013561038b565b604080519115158252519081900360200190f35b34801561018457600080fd5b5061018d6103f1565b60408051918252519081900360200190f35b3480156101ab57600080fd5b50610164600480360360608110156101c257600080fd5b506001600160a01b038135811691602081013590911690604001356103f5565b3480156101ee57600080fd5b5061020c6004803603602081101561020557600080fd5b503561056d565b005b34801561021a57600080fd5b50610223610624565b6040805160ff9092168252519081900360200190f35b34801561024557600080fd5b5061018d6004803603602081101561025c57600080fd5b50356001600160a01b031661062d565b34801561027857600080fd5b506100b661063f565b34801561028d57600080fd5b50610164600480360360408110156102a457600080fd5b506001600160a01b038135169060200135610699565b61020c6106ad565b3480156102ce57600080fd5b5061018d600480360360408110156102e557600080fd5b506001600160a01b03813581169160200135166106fc565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103835780601f1061035857610100808354040283529160200191610383565b820191906000526020600020905b81548152906001019060200180831161036657829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b6001600160a01b03831660009081526003602052604081205482111561043c576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b038416331480159061047a57506001600160a01b038416600090815260046020908152604080832033845290915290205460001914155b156104fc576001600160a01b03841660009081526004602090815260408083203384529091529020548211156104d1576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b03841660009081526004602090815260408083203384529091529020805483900390555b6001600160a01b03808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b336000908152600360205260409020548111156105ab576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156105ea573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103835780601f1061035857610100808354040283529160200191610383565b60006106a63384846103f5565b9392505050565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b60046020908152600092835260408084209091529082529020548156fea265627a7a72315820eb96b882b9698b00b0c5d9f672d459508ed31b7f67892b8a82ffa8e5e9baeafd64736f6c63430005100032", - "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE PUSH1 0xD PUSH1 0x80 DUP2 SWAP1 MSTORE PUSH13 0x2BB930B83832B21022BA3432B9 PUSH1 0x99 SHL PUSH1 0xA0 SWAP1 DUP2 MSTORE PUSH2 0x2E SWAP2 PUSH1 0x0 SWAP2 SWAP1 PUSH2 0x7A JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP1 DUP3 MSTORE PUSH4 0xAE8AA89 PUSH1 0xE3 SHL PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 DUP3 MSTORE PUSH2 0x5A SWAP2 PUSH1 0x1 SWAP2 PUSH2 0x7A JUMP JUMPDEST POP PUSH1 0x2 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x115 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0xBB JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0xE8 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0xE8 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0xE8 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xCD JUMP JUMPDEST POP PUSH2 0xF4 SWAP3 SWAP2 POP PUSH2 0xF8 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x112 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xFE JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x74E DUP1 PUSH2 0x124 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x9C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x20E JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x239 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x281 JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0x2BA JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2C2 JUMPI PUSH2 0x9C JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xA1 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x178 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x19F JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x1E2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB6 PUSH2 0x2FD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x164 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x14E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x38B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x184 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18D PUSH2 0x3F1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x164 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x3F5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x20C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x205 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x56D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x624 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x25C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x62D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB6 PUSH2 0x63F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x28D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x164 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x699 JUMP JUMPDEST PUSH2 0x20C PUSH2 0x6AD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x6FC JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x383 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x358 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x383 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x366 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST SELFBALANCE SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x43C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x47A JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x0 NOT EQ ISZERO JUMPDEST ISZERO PUSH2 0x4FC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x4D1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD DUP4 SWAP1 SUB SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP9 SWAP1 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE DUP4 MLOAD DUP7 DUP2 MSTORE SWAP4 MLOAD SWAP2 SWAP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x5AB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP6 SWAP1 SUB SWAP1 SSTORE MLOAD DUP4 ISZERO PUSH2 0x8FC MUL SWAP2 DUP5 SWAP2 SWAP1 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x5EA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 DUP5 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x383 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x358 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x383 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6A6 CALLER DUP5 DUP5 PUSH2 0x3F5 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD CALLVALUE SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xEB SWAP7 0xB8 DUP3 0xB9 PUSH10 0x8B00B0C5D9F672D45950 DUP15 0xD3 SHL PUSH32 0x67892B8A82FFA8E5E9BAEAFD64736F6C63430005100032000000000000000000 ", - "sourceMap": "733:40:17:-;712:1828;733:40;;712:1828;733:40;;;-1:-1:-1;;;733:40:17;;;;;;-1:-1:-1;;733:40:17;;:::i;:::-;-1:-1:-1;779:31:17;;;;;;;;;;;;;-1:-1:-1;;;779:31:17;;;;;;;;;;;;:::i;:::-;-1:-1:-1;816:27:17;;;-1:-1:-1;;816:27:17;841:2;816:27;;;712:1828;5:2:-1;;;;30:1;27;20:12;5:2;712:1828:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;712:1828:17;;;-1:-1:-1;712:1828:17;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "60806040526004361061009c5760003560e01c8063313ce56711610064578063313ce5671461020e57806370a082311461023957806395d89b411461026c578063a9059cbb14610281578063d0e30db0146102ba578063dd62ed3e146102c25761009c565b806306fdde03146100a1578063095ea7b31461012b57806318160ddd1461017857806323b872dd1461019f5780632e1a7d4d146101e2575b600080fd5b3480156100ad57600080fd5b506100b66102fd565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f05781810151838201526020016100d8565b50505050905090810190601f16801561011d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561013757600080fd5b506101646004803603604081101561014e57600080fd5b506001600160a01b03813516906020013561038b565b604080519115158252519081900360200190f35b34801561018457600080fd5b5061018d6103f1565b60408051918252519081900360200190f35b3480156101ab57600080fd5b50610164600480360360608110156101c257600080fd5b506001600160a01b038135811691602081013590911690604001356103f5565b3480156101ee57600080fd5b5061020c6004803603602081101561020557600080fd5b503561056d565b005b34801561021a57600080fd5b50610223610624565b6040805160ff9092168252519081900360200190f35b34801561024557600080fd5b5061018d6004803603602081101561025c57600080fd5b50356001600160a01b031661062d565b34801561027857600080fd5b506100b661063f565b34801561028d57600080fd5b50610164600480360360408110156102a457600080fd5b506001600160a01b038135169060200135610699565b61020c6106ad565b3480156102ce57600080fd5b5061018d600480360360408110156102e557600080fd5b506001600160a01b03813581169160200135166106fc565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103835780601f1061035857610100808354040283529160200191610383565b820191906000526020600020905b81548152906001019060200180831161036657829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b6001600160a01b03831660009081526003602052604081205482111561043c576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b038416331480159061047a57506001600160a01b038416600090815260046020908152604080832033845290915290205460001914155b156104fc576001600160a01b03841660009081526004602090815260408083203384529091529020548211156104d1576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b03841660009081526004602090815260408083203384529091529020805483900390555b6001600160a01b03808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b336000908152600360205260409020548111156105ab576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156105ea573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103835780601f1061035857610100808354040283529160200191610383565b60006106a63384846103f5565b9392505050565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b60046020908152600092835260408084209091529082529020548156fea265627a7a72315820eb96b882b9698b00b0c5d9f672d459508ed31b7f67892b8a82ffa8e5e9baeafd64736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x9C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x20E JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x239 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x281 JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0x2BA JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2C2 JUMPI PUSH2 0x9C JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xA1 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x178 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x19F JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x1E2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB6 PUSH2 0x2FD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x164 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x14E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x38B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x184 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18D PUSH2 0x3F1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x164 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x3F5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x20C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x205 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x56D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x624 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x25C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x62D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB6 PUSH2 0x63F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x28D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x164 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x699 JUMP JUMPDEST PUSH2 0x20C PUSH2 0x6AD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x6FC JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x383 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x358 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x383 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x366 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST SELFBALANCE SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x43C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x47A JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x0 NOT EQ ISZERO JUMPDEST ISZERO PUSH2 0x4FC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x4D1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD DUP4 SWAP1 SUB SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP9 SWAP1 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE DUP4 MLOAD DUP7 DUP2 MSTORE SWAP4 MLOAD SWAP2 SWAP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x5AB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP6 SWAP1 SUB SWAP1 SSTORE MLOAD DUP4 ISZERO PUSH2 0x8FC MUL SWAP2 DUP5 SWAP2 SWAP1 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x5EA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 DUP5 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x383 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x358 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x383 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6A6 CALLER DUP5 DUP5 PUSH2 0x3F5 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD CALLVALUE SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xEB SWAP7 0xB8 DUP3 0xB9 PUSH10 0x8B00B0C5D9F672D45950 DUP15 0xD3 SHL PUSH32 0x67892B8A82FFA8E5E9BAEAFD64736F6C63430005100032000000000000000000 ", - "sourceMap": "712:1828:17:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;733:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;733:40:17;;;:::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;733:40:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1760:177;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1760:177:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1760:177:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1659:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1659:95:17;;;:::i;:::-;;;;;;;;;;;;;;;;2070:468;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2070:468:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2070:468:17;;;;;;;;;;;;;;;;;:::i;1446:207::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1446:207:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1446:207:17;;:::i;:::-;;816:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;816:27:17;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1102:65;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1102:65:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1102:65:17;-1:-1:-1;;;;;1102:65:17;;:::i;779:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;779:31:17;;;:::i;1943:121::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1943:121:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1943:121:17;;;;;;;;:::i;1311:130::-;;;:::i;1173:65::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1173:65:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1173:65:17;;;;;;;;;;:::i;733:40::-;;;;;;;;;;;;;;;-1:-1:-1;;733:40:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1760:177::-;1842:10;1816:4;1832:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;1832:26:17;;;;;;;;;;;:32;;;1879:30;;;;;;;1816:4;;1832:26;;1842:10;;1879:30;;;;;;;;-1:-1:-1;1926:4:17;1760:177;;;;:::o;1659:95::-;1726:21;1659:95;:::o;2070:468::-;-1:-1:-1;;;;;2188:14:17;;2160:4;2188:14;;;:9;:14;;;;;;:21;-1:-1:-1;2188:21:17;2180:34;;;;;-1:-1:-1;;;2180:34:17;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2229:17:17;;2236:10;2229:17;;;;:59;;-1:-1:-1;;;;;;2250:14:17;;;;;;:9;:14;;;;;;;;2265:10;2250:26;;;;;;;;-1:-1:-1;;2250:38:17;;2229:59;2225:183;;;-1:-1:-1;;;;;2312:14:17;;;;;;:9;:14;;;;;;;;2327:10;2312:26;;;;;;;;:33;-1:-1:-1;2312:33:17;2304:46;;;;;-1:-1:-1;;;2304:46:17;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2364:14:17;;;;;;:9;:14;;;;;;;;2379:10;2364:26;;;;;;;:33;;;;;;;2225:183;-1:-1:-1;;;;;2418:14:17;;;;;;;:9;:14;;;;;;;;:21;;;;;;;2449:14;;;;;;;;;;:21;;;;;;2486:23;;;;;;;2449:14;;2486:23;;;;;;;;;;;-1:-1:-1;2527:4:17;2070:468;;;;;:::o;1446:207::-;1509:10;1499:21;;;;:9;:21;;;;;;:28;-1:-1:-1;1499:28:17;1491:41;;;;;-1:-1:-1;;;1491:41:17;;;;;;;;;;;;;;;;;;;;;;;1552:10;1542:21;;;;:9;:21;;;;;;:28;;;;;;;1580:24;;;;;;1567:3;;1580:24;;1542:21;1580:24;1567:3;1552:10;1580:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;1619:27:17;;;;;;;;1630:10;;1619:27;;;;;;;;;;1446:207;:::o;816:27::-;;;;;;:::o;1102:65::-;;;;;;;;;;;;;:::o;779:31::-;;;;;;;;;;;;;;;-1:-1:-1;;779:31:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1943:121;2000:4;2023:34;2036:10;2048:3;2053;2023:12;:34::i;:::-;2016:41;1943:121;-1:-1:-1;;;1943:121:17:o;1311:130::-;1365:10;1355:21;;;;:9;:21;;;;;;;;;:34;;1380:9;1355:34;;;;;;1404:30;;;;;;;;;;;;;;;;;1311:130::o;1173:65::-;;;;;;;;;;;;;;;;;;;;;;;;:::o" - } - }, - "interface": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "guy", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "guy", - "type": "address" - }, - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "deposit", - "outputs": [], - "payable": true, - "stateMutability": "payable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "60c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b50610115565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100bb57805160ff19168380011785556100e8565b828001600101855582156100e8579182015b828111156100e85782518255916020019190600101906100cd565b506100f49291506100f8565b5090565b61011291905b808211156100f457600081556001016100fe565b90565b61074e806101246000396000f3fe60806040526004361061009c5760003560e01c8063313ce56711610064578063313ce5671461020e57806370a082311461023957806395d89b411461026c578063a9059cbb14610281578063d0e30db0146102ba578063dd62ed3e146102c25761009c565b806306fdde03146100a1578063095ea7b31461012b57806318160ddd1461017857806323b872dd1461019f5780632e1a7d4d146101e2575b600080fd5b3480156100ad57600080fd5b506100b66102fd565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f05781810151838201526020016100d8565b50505050905090810190601f16801561011d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561013757600080fd5b506101646004803603604081101561014e57600080fd5b506001600160a01b03813516906020013561038b565b604080519115158252519081900360200190f35b34801561018457600080fd5b5061018d6103f1565b60408051918252519081900360200190f35b3480156101ab57600080fd5b50610164600480360360608110156101c257600080fd5b506001600160a01b038135811691602081013590911690604001356103f5565b3480156101ee57600080fd5b5061020c6004803603602081101561020557600080fd5b503561056d565b005b34801561021a57600080fd5b50610223610624565b6040805160ff9092168252519081900360200190f35b34801561024557600080fd5b5061018d6004803603602081101561025c57600080fd5b50356001600160a01b031661062d565b34801561027857600080fd5b506100b661063f565b34801561028d57600080fd5b50610164600480360360408110156102a457600080fd5b506001600160a01b038135169060200135610699565b61020c6106ad565b3480156102ce57600080fd5b5061018d600480360360408110156102e557600080fd5b506001600160a01b03813581169160200135166106fc565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103835780601f1061035857610100808354040283529160200191610383565b820191906000526020600020905b81548152906001019060200180831161036657829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b6001600160a01b03831660009081526003602052604081205482111561043c576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b038416331480159061047a57506001600160a01b038416600090815260046020908152604080832033845290915290205460001914155b156104fc576001600160a01b03841660009081526004602090815260408083203384529091529020548211156104d1576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b03841660009081526004602090815260408083203384529091529020805483900390555b6001600160a01b03808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b336000908152600360205260409020548111156105ab576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156105ea573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103835780601f1061035857610100808354040283529160200191610383565b60006106a63384846103f5565b9392505050565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b60046020908152600092835260408084209091529082529020548156fea265627a7a72315820eb96b882b9698b00b0c5d9f672d459508ed31b7f67892b8a82ffa8e5e9baeafd64736f6c63430005100032", - "bin": "60c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b50610115565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100bb57805160ff19168380011785556100e8565b828001600101855582156100e8579182015b828111156100e85782518255916020019190600101906100cd565b506100f49291506100f8565b5090565b61011291905b808211156100f457600081556001016100fe565b90565b61074e806101246000396000f3fe60806040526004361061009c5760003560e01c8063313ce56711610064578063313ce5671461020e57806370a082311461023957806395d89b411461026c578063a9059cbb14610281578063d0e30db0146102ba578063dd62ed3e146102c25761009c565b806306fdde03146100a1578063095ea7b31461012b57806318160ddd1461017857806323b872dd1461019f5780632e1a7d4d146101e2575b600080fd5b3480156100ad57600080fd5b506100b66102fd565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f05781810151838201526020016100d8565b50505050905090810190601f16801561011d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561013757600080fd5b506101646004803603604081101561014e57600080fd5b506001600160a01b03813516906020013561038b565b604080519115158252519081900360200190f35b34801561018457600080fd5b5061018d6103f1565b60408051918252519081900360200190f35b3480156101ab57600080fd5b50610164600480360360608110156101c257600080fd5b506001600160a01b038135811691602081013590911690604001356103f5565b3480156101ee57600080fd5b5061020c6004803603602081101561020557600080fd5b503561056d565b005b34801561021a57600080fd5b50610223610624565b6040805160ff9092168252519081900360200190f35b34801561024557600080fd5b5061018d6004803603602081101561025c57600080fd5b50356001600160a01b031661062d565b34801561027857600080fd5b506100b661063f565b34801561028d57600080fd5b50610164600480360360408110156102a457600080fd5b506001600160a01b038135169060200135610699565b61020c6106ad565b3480156102ce57600080fd5b5061018d600480360360408110156102e557600080fd5b506001600160a01b03813581169160200135166106fc565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103835780601f1061035857610100808354040283529160200191610383565b820191906000526020600020905b81548152906001019060200180831161036657829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b6001600160a01b03831660009081526003602052604081205482111561043c576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b038416331480159061047a57506001600160a01b038416600090815260046020908152604080832033845290915290205460001914155b156104fc576001600160a01b03841660009081526004602090815260408083203384529091529020548211156104d1576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b03841660009081526004602090815260408083203384529091529020805483900390555b6001600160a01b03808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b336000908152600360205260409020548111156105ab576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156105ea573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103835780601f1061035857610100808354040283529160200191610383565b60006106a63384846103f5565b9392505050565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b60046020908152600092835260408084209091529082529020548156fea265627a7a72315820eb96b882b9698b00b0c5d9f672d459508ed31b7f67892b8a82ffa8e5e9baeafd64736f6c63430005100032", - "bin-runtime": "60806040526004361061009c5760003560e01c8063313ce56711610064578063313ce5671461020e57806370a082311461023957806395d89b411461026c578063a9059cbb14610281578063d0e30db0146102ba578063dd62ed3e146102c25761009c565b806306fdde03146100a1578063095ea7b31461012b57806318160ddd1461017857806323b872dd1461019f5780632e1a7d4d146101e2575b600080fd5b3480156100ad57600080fd5b506100b66102fd565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f05781810151838201526020016100d8565b50505050905090810190601f16801561011d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561013757600080fd5b506101646004803603604081101561014e57600080fd5b506001600160a01b03813516906020013561038b565b604080519115158252519081900360200190f35b34801561018457600080fd5b5061018d6103f1565b60408051918252519081900360200190f35b3480156101ab57600080fd5b50610164600480360360608110156101c257600080fd5b506001600160a01b038135811691602081013590911690604001356103f5565b3480156101ee57600080fd5b5061020c6004803603602081101561020557600080fd5b503561056d565b005b34801561021a57600080fd5b50610223610624565b6040805160ff9092168252519081900360200190f35b34801561024557600080fd5b5061018d6004803603602081101561025c57600080fd5b50356001600160a01b031661062d565b34801561027857600080fd5b506100b661063f565b34801561028d57600080fd5b50610164600480360360408110156102a457600080fd5b506001600160a01b038135169060200135610699565b61020c6106ad565b3480156102ce57600080fd5b5061018d600480360360408110156102e557600080fd5b506001600160a01b03813581169160200135166106fc565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103835780601f1061035857610100808354040283529160200191610383565b820191906000526020600020905b81548152906001019060200180831161036657829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b6001600160a01b03831660009081526003602052604081205482111561043c576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b038416331480159061047a57506001600160a01b038416600090815260046020908152604080832033845290915290205460001914155b156104fc576001600160a01b03841660009081526004602090815260408083203384529091529020548211156104d1576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b03841660009081526004602090815260408083203384529091529020805483900390555b6001600160a01b03808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b336000908152600360205260409020548111156105ab576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156105ea573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103835780601f1061035857610100808354040283529160200191610383565b60006106a63384846103f5565b9392505050565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b60046020908152600092835260408084209091529082529020548156fea265627a7a72315820eb96b882b9698b00b0c5d9f672d459508ed31b7f67892b8a82ffa8e5e9baeafd64736f6c63430005100032", - "srcmap": "733:40:17:-;712:1828;733:40;;712:1828;733:40;;;-1:-1:-1;;;733:40:17;;;;;;-1:-1:-1;;733:40:17;;:::i;:::-;-1:-1:-1;779:31:17;;;;;;;;;;;;;-1:-1:-1;;;779:31:17;;;;;;;;;;;;:::i;:::-;-1:-1:-1;816:27:17;;;-1:-1:-1;;816:27:17;841:2;816:27;;;712:1828;5:2:-1;;;;30:1;27;20:12;5:2;712:1828:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;712:1828:17;;;-1:-1:-1;712:1828:17;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;", - "srcmap-runtime": "712:1828:17:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;733:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;733:40:17;;;:::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;733:40:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1760:177;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1760:177:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1760:177:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1659:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1659:95:17;;;:::i;:::-;;;;;;;;;;;;;;;;2070:468;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2070:468:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2070:468:17;;;;;;;;;;;;;;;;;:::i;1446:207::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1446:207:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1446:207:17;;:::i;:::-;;816:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;816:27:17;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1102:65;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1102:65:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1102:65:17;-1:-1:-1;;;;;1102:65:17;;:::i;779:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;779:31:17;;;:::i;1943:121::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1943:121:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1943:121:17;;;;;;;;:::i;1311:130::-;;;:::i;1173:65::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1173:65:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1173:65:17;;;;;;;;;;:::i;733:40::-;;;;;;;;;;;;;;;-1:-1:-1;;733:40:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1760:177::-;1842:10;1816:4;1832:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;1832:26:17;;;;;;;;;;;:32;;;1879:30;;;;;;;1816:4;;1832:26;;1842:10;;1879:30;;;;;;;;-1:-1:-1;1926:4:17;1760:177;;;;:::o;1659:95::-;1726:21;1659:95;:::o;2070:468::-;-1:-1:-1;;;;;2188:14:17;;2160:4;2188:14;;;:9;:14;;;;;;:21;-1:-1:-1;2188:21:17;2180:34;;;;;-1:-1:-1;;;2180:34:17;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2229:17:17;;2236:10;2229:17;;;;:59;;-1:-1:-1;;;;;;2250:14:17;;;;;;:9;:14;;;;;;;;2265:10;2250:26;;;;;;;;-1:-1:-1;;2250:38:17;;2229:59;2225:183;;;-1:-1:-1;;;;;2312:14:17;;;;;;:9;:14;;;;;;;;2327:10;2312:26;;;;;;;;:33;-1:-1:-1;2312:33:17;2304:46;;;;;-1:-1:-1;;;2304:46:17;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2364:14:17;;;;;;:9;:14;;;;;;;;2379:10;2364:26;;;;;;;:33;;;;;;;2225:183;-1:-1:-1;;;;;2418:14:17;;;;;;;:9;:14;;;;;;;;:21;;;;;;;2449:14;;;;;;;;;;:21;;;;;;2486:23;;;;;;;2449:14;;2486:23;;;;;;;;;;;-1:-1:-1;2527:4:17;2070:468;;;;;:::o;1446:207::-;1509:10;1499:21;;;;:9;:21;;;;;;:28;-1:-1:-1;1499:28:17;1491:41;;;;;-1:-1:-1;;;1491:41:17;;;;;;;;;;;;;;;;;;;;;;;1552:10;1542:21;;;;:9;:21;;;;;;:28;;;;;;;1580:24;;;;;;1567:3;;1580:24;;1542:21;1580:24;1567:3;1552:10;1580:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;1619:27:17;;;;;;;;1630:10;;1619:27;;;;;;;;;;1446:207;:::o;816:27::-;;;;;;:::o;1102:65::-;;;;;;;;;;;;;:::o;779:31::-;;;;;;;;;;;;;;;-1:-1:-1;;779:31:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1943:121;2000:4;2023:34;2036:10;2048:3;2053;2023:12;:34::i;:::-;2016:41;1943:121;-1:-1:-1;;;1943:121:17:o;1311:130::-;1365:10;1355:21;;;;:9;:21;;;;;;;;;:34;;1380:9;1355:34;;;;;;1404:30;;;;;;;;;;;;;;;;;1311:130::o;1173:65::-;;;;;;;;;;;;;;;;;;;;;;;;:::o" - } - }, - "errors": [ - { - "component": "general", - "formattedMessage": "contracts/DXswapFeeReceiver.sol:51:5: Warning: Function state mutability can be restricted to view\n function isContract(address addr) internal returns (bool) {\n ^ (Relevant source part starts here and spans across multiple lines).\n", - "message": "Function state mutability can be restricted to view", - "severity": "warning", - "sourceLocation": { - "end": 1976, - "file": "contracts/DXswapFeeReceiver.sol", - "start": 1820 - }, - "type": "Warning" - } - ], - "sources": { - "contracts/DXswapDeployer.sol": { - "id": 0, - "AST": { - "absolutePath": "contracts/DXswapDeployer.sol", - "exportedSymbols": { - "DXswapDeployer": [ - 259 - ] - }, - "id": 260, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1, - "literals": [ - "solidity", - "=", - "0.5", - ".16" - ], - "nodeType": "PragmaDirective", - "src": "0:24:0" - }, - { - "absolutePath": "contracts/DXswapFactory.sol", - "file": "./DXswapFactory.sol", - "id": 2, - "nodeType": "ImportDirective", - "scope": 260, - "sourceUnit": 902, - "src": "26:29:0", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "contracts/interfaces/IDXswapPair.sol", - "file": "./interfaces/IDXswapPair.sol", - "id": 3, - "nodeType": "ImportDirective", - "scope": 260, - "sourceUnit": 3094, - "src": "56:38:0", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "contracts/DXswapFeeSetter.sol", - "file": "./DXswapFeeSetter.sol", - "id": 4, - "nodeType": "ImportDirective", - "scope": 260, - "sourceUnit": 1548, - "src": "95:31:0", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "contracts/DXswapFeeReceiver.sol", - "file": "./DXswapFeeReceiver.sol", - "id": 5, - "nodeType": "ImportDirective", - "scope": 260, - "sourceUnit": 1385, - "src": "127:33:0", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [ - 901, - 1384, - 1547 - ], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 259, - "linearizedBaseContracts": [ - 259 - ], - "name": "DXswapDeployer", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 7, - "name": "protocolFeeReceiver", - "nodeType": "VariableDeclaration", - "scope": 259, - "src": "198:42:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - "typeName": { - "id": 6, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "198:15:0", - "stateMutability": "payable", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 9, - "name": "dxdaoAvatar", - "nodeType": "VariableDeclaration", - "scope": 259, - "src": "246:34:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - "typeName": { - "id": 8, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "246:15:0", - "stateMutability": "payable", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 11, - "name": "WETH", - "nodeType": "VariableDeclaration", - "scope": 259, - "src": "286:19:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "286:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 14, - "name": "state", - "nodeType": "VariableDeclaration", - "scope": 259, - "src": "311:22:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 12, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "311:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "30", - "id": 13, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "332:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "visibility": "public" - }, - { - "canonicalName": "DXswapDeployer.TokenPair", - "id": 21, - "members": [ - { - "constant": false, - "id": 16, - "name": "tokenA", - "nodeType": "VariableDeclaration", - "scope": 21, - "src": "367:14:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "367:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 18, - "name": "tokenB", - "nodeType": "VariableDeclaration", - "scope": 21, - "src": "391:14:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "391:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 20, - "name": "swapFee", - "nodeType": "VariableDeclaration", - "scope": 21, - "src": "415:14:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 19, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "415:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "name": "TokenPair", - "nodeType": "StructDefinition", - "scope": 259, - "src": "340:96:0", - "visibility": "public" - }, - { - "constant": false, - "id": 24, - "name": "initialTokenPairs", - "nodeType": "VariableDeclaration", - "scope": 259, - "src": "446:36:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_TokenPair_$21_storage_$dyn_storage", - "typeString": "struct DXswapDeployer.TokenPair[]" - }, - "typeName": { - "baseType": { - "contractScope": null, - "id": 22, - "name": "TokenPair", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 21, - "src": "446:9:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenPair_$21_storage_ptr", - "typeString": "struct DXswapDeployer.TokenPair" - } - }, - "id": 23, - "length": null, - "nodeType": "ArrayTypeName", - "src": "446:11:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_TokenPair_$21_storage_$dyn_storage_ptr", - "typeString": "struct DXswapDeployer.TokenPair[]" - } - }, - "value": null, - "visibility": "public" - }, - { - "anonymous": false, - "documentation": null, - "id": 28, - "name": "FeeReceiverDeployed", - "nodeType": "EventDefinition", - "parameters": { - "id": 27, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 26, - "indexed": false, - "name": "feeReceiver", - "nodeType": "VariableDeclaration", - "scope": 28, - "src": "515:19:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 25, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "515:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "514:21:0" - }, - "src": "489:47:0" - }, - { - "anonymous": false, - "documentation": null, - "id": 32, - "name": "FeeSetterDeployed", - "nodeType": "EventDefinition", - "parameters": { - "id": 31, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 30, - "indexed": false, - "name": "feeSetter", - "nodeType": "VariableDeclaration", - "scope": 32, - "src": "569:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 29, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "569:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "568:19:0" - }, - "src": "545:43:0" - }, - { - "anonymous": false, - "documentation": null, - "id": 36, - "name": "PairFactoryDeployed", - "nodeType": "EventDefinition", - "parameters": { - "id": 35, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 34, - "indexed": false, - "name": "factory", - "nodeType": "VariableDeclaration", - "scope": 36, - "src": "619:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 33, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "619:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "618:17:0" - }, - "src": "593:43:0" - }, - { - "anonymous": false, - "documentation": null, - "id": 40, - "name": "PairDeployed", - "nodeType": "EventDefinition", - "parameters": { - "id": 39, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 38, - "indexed": false, - "name": "pair", - "nodeType": "VariableDeclaration", - "scope": 40, - "src": "660:12:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 37, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "660:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "659:14:0" - }, - "src": "641:33:0" - }, - { - "body": { - "id": 99, - "nodeType": "Block", - "src": "1014:372:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 60, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 58, - "name": "dxdaoAvatar", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9, - "src": "1024:11:0", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 59, - "name": "_dxdaoAvatar", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 44, - "src": "1038:12:0", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "1024:26:0", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "id": 61, - "nodeType": "ExpressionStatement", - "src": "1024:26:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 64, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 62, - "name": "WETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11, - "src": "1060:4:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 63, - "name": "_WETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 46, - "src": "1067:5:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1060:12:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 65, - "nodeType": "ExpressionStatement", - "src": "1060:12:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 68, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 66, - "name": "protocolFeeReceiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7, - "src": "1082:19:0", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 67, - "name": "_protocolFeeReceiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 42, - "src": "1104:20:0", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "1082:42:0", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "id": 69, - "nodeType": "ExpressionStatement", - "src": "1082:42:0" - }, - { - "body": { - "id": 97, - "nodeType": "Block", - "src": "1177:203:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 85, - "name": "tokensA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 49, - "src": "1262:7:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 87, - "indexExpression": { - "argumentTypes": null, - "id": 86, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 71, - "src": "1270:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1262:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 88, - "name": "tokensB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 52, - "src": "1294:7:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 90, - "indexExpression": { - "argumentTypes": null, - "id": 89, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 71, - "src": "1302:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1294:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 91, - "name": "swapFees", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55, - "src": "1326:8:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr", - "typeString": "uint32[] memory" - } - }, - "id": 93, - "indexExpression": { - "argumentTypes": null, - "id": 92, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 71, - "src": "1335:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1326:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 84, - "name": "TokenPair", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 21, - "src": "1231:9:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_TokenPair_$21_storage_ptr_$", - "typeString": "type(struct DXswapDeployer.TokenPair storage pointer)" - } - }, - "id": 94, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1231:124:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenPair_$21_memory", - "typeString": "struct DXswapDeployer.TokenPair memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_TokenPair_$21_memory", - "typeString": "struct DXswapDeployer.TokenPair memory" - } - ], - "expression": { - "argumentTypes": null, - "id": 81, - "name": "initialTokenPairs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 24, - "src": "1191:17:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_TokenPair_$21_storage_$dyn_storage", - "typeString": "struct DXswapDeployer.TokenPair storage ref[] storage ref" - } - }, - "id": 83, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "push", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1191:22:0", - "typeDescriptions": { - "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_TokenPair_$21_storage_$returns$_t_uint256_$", - "typeString": "function (struct DXswapDeployer.TokenPair storage ref) returns (uint256)" - } - }, - "id": 95, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1191:178:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 96, - "nodeType": "ExpressionStatement", - "src": "1191:178:0" - } - ] - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 77, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 74, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 71, - "src": "1151:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 75, - "name": "tokensA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 49, - "src": "1155:7:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 76, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1155:14:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1151:18:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 98, - "initializationExpression": { - "assignments": [ - 71 - ], - "declarations": [ - { - "constant": false, - "id": 71, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 98, - "src": "1138:7:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 70, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "1138:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 73, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 72, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1148:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "1138:11:0" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 79, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "1171:4:0", - "subExpression": { - "argumentTypes": null, - "id": 78, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 71, - "src": "1171:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 80, - "nodeType": "ExpressionStatement", - "src": "1171:4:0" - }, - "nodeType": "ForStatement", - "src": "1134:246:0" - } - ] - }, - "documentation": null, - "id": 100, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 56, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 42, - "name": "_protocolFeeReceiver", - "nodeType": "VariableDeclaration", - "scope": 100, - "src": "801:36:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - "typeName": { - "id": 41, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "801:15:0", - "stateMutability": "payable", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 44, - "name": "_dxdaoAvatar", - "nodeType": "VariableDeclaration", - "scope": 100, - "src": "847:28:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - "typeName": { - "id": 43, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "847:15:0", - "stateMutability": "payable", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 46, - "name": "_WETH", - "nodeType": "VariableDeclaration", - "scope": 100, - "src": "885:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 45, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "885:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 49, - "name": "tokensA", - "nodeType": "VariableDeclaration", - "scope": 100, - "src": "908:24:0", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 47, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "908:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 48, - "length": null, - "nodeType": "ArrayTypeName", - "src": "908:9:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 52, - "name": "tokensB", - "nodeType": "VariableDeclaration", - "scope": 100, - "src": "942:24:0", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 50, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "942:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 51, - "length": null, - "nodeType": "ArrayTypeName", - "src": "942:9:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 55, - "name": "swapFees", - "nodeType": "VariableDeclaration", - "scope": 100, - "src": "976:24:0", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr", - "typeString": "uint32[]" - }, - "typeName": { - "baseType": { - "id": 53, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "976:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "id": 54, - "length": null, - "nodeType": "ArrayTypeName", - "src": "976:8:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr", - "typeString": "uint32[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "791:215:0" - }, - "returnParameters": { - "id": 57, - "nodeType": "ParameterList", - "parameters": [], - "src": "1014:0:0" - }, - "scope": 259, - "src": "780:606:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 122, - "nodeType": "Block", - "src": "1517:183:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 106, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 104, - "name": "state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14, - "src": "1535:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 105, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1544:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1535:10:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "4458737761704465706c6f7965723a2057524f4e475f4445504c4f5945525f5354415445", - "id": 107, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1547:38:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_aba1c369dbc2427a7eafe274f308dc0b6a7bf6d47b0a952a076c4e20c7a699aa", - "typeString": "literal_string \"DXswapDeployer: WRONG_DEPLOYER_STATE\"" - }, - "value": "DXswapDeployer: WRONG_DEPLOYER_STATE" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_aba1c369dbc2427a7eafe274f308dc0b6a7bf6d47b0a952a076c4e20c7a699aa", - "typeString": "literal_string \"DXswapDeployer: WRONG_DEPLOYER_STATE\"" - } - ], - "id": 103, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "1527:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 108, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1527:59:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 109, - "nodeType": "ExpressionStatement", - "src": "1527:59:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - "id": 114, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 111, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "1604:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 112, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1604:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 113, - "name": "dxdaoAvatar", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9, - "src": "1618:11:0", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "1604:25:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "4458737761704465706c6f7965723a2043414c4c45525f4e4f545f4645455f544f5f534554544552", - "id": 115, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1631:42:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_ae2d03221f79c400f13b2da972781e306aef3bd071b97f7b5d7c7ebe3e1a42f2", - "typeString": "literal_string \"DXswapDeployer: CALLER_NOT_FEE_TO_SETTER\"" - }, - "value": "DXswapDeployer: CALLER_NOT_FEE_TO_SETTER" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_ae2d03221f79c400f13b2da972781e306aef3bd071b97f7b5d7c7ebe3e1a42f2", - "typeString": "literal_string \"DXswapDeployer: CALLER_NOT_FEE_TO_SETTER\"" - } - ], - "id": 110, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "1596:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 116, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1596:78:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 117, - "nodeType": "ExpressionStatement", - "src": "1596:78:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 120, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 118, - "name": "state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14, - "src": "1684:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "31", - "id": 119, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1692:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "1684:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 121, - "nodeType": "ExpressionStatement", - "src": "1684:9:0" - } - ] - }, - "documentation": null, - "id": 123, - "implemented": true, - "kind": "fallback", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 101, - "nodeType": "ParameterList", - "parameters": [], - "src": "1497:2:0" - }, - "returnParameters": { - "id": 102, - "nodeType": "ParameterList", - "parameters": [], - "src": "1517:0:0" - }, - "scope": 259, - "src": "1489:211:0", - "stateMutability": "payable", - "superFunction": null, - "visibility": "external" - }, - { - "body": { - "id": 257, - "nodeType": "Block", - "src": "1793:1141:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 129, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 127, - "name": "state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14, - "src": "1811:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 128, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1820:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "1811:10:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "4458737761704465706c6f7965723a2057524f4e475f4445504c4f5945525f5354415445", - "id": 130, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1823:38:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_aba1c369dbc2427a7eafe274f308dc0b6a7bf6d47b0a952a076c4e20c7a699aa", - "typeString": "literal_string \"DXswapDeployer: WRONG_DEPLOYER_STATE\"" - }, - "value": "DXswapDeployer: WRONG_DEPLOYER_STATE" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_aba1c369dbc2427a7eafe274f308dc0b6a7bf6d47b0a952a076c4e20c7a699aa", - "typeString": "literal_string \"DXswapDeployer: WRONG_DEPLOYER_STATE\"" - } - ], - "id": 126, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "1803:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 131, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1803:59:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 132, - "nodeType": "ExpressionStatement", - "src": "1803:59:0" - }, - { - "assignments": [ - 134 - ], - "declarations": [ - { - "constant": false, - "id": 134, - "name": "dxSwapFactory", - "nodeType": "VariableDeclaration", - "scope": 257, - "src": "1872:27:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFactory_$901", - "typeString": "contract DXswapFactory" - }, - "typeName": { - "contractScope": null, - "id": 133, - "name": "DXswapFactory", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 901, - "src": "1872:13:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFactory_$901", - "typeString": "contract DXswapFactory" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 141, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 138, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3874, - "src": "1928:4:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapDeployer_$259", - "typeString": "contract DXswapDeployer" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapDeployer_$259", - "typeString": "contract DXswapDeployer" - } - ], - "id": 137, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1920:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 139, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1920:13:0", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 136, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "1902:17:0", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$_t_address_$returns$_t_contract$_DXswapFactory_$901_$", - "typeString": "function (address) returns (contract DXswapFactory)" - }, - "typeName": { - "contractScope": null, - "id": 135, - "name": "DXswapFactory", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 901, - "src": "1906:13:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFactory_$901", - "typeString": "contract DXswapFactory" - } - } - }, - "id": 140, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1902:32:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFactory_$901", - "typeString": "contract DXswapFactory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1872:62:0" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 144, - "name": "dxSwapFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 134, - "src": "1977:13:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFactory_$901", - "typeString": "contract DXswapFactory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapFactory_$901", - "typeString": "contract DXswapFactory" - } - ], - "id": 143, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1969:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 145, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1969:22:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 142, - "name": "PairFactoryDeployed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 36, - "src": "1949:19:0", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 146, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1949:43:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 147, - "nodeType": "EmitStatement", - "src": "1944:48:0" - }, - { - "body": { - "id": 189, - "nodeType": "Block", - "src": "2055:281:0", - "statements": [ - { - "assignments": [ - 160 - ], - "declarations": [ - { - "constant": false, - "id": 160, - "name": "newPair", - "nodeType": "VariableDeclaration", - "scope": 189, - "src": "2069:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 159, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2069:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 172, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 163, - "name": "initialTokenPairs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 24, - "src": "2112:17:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_TokenPair_$21_storage_$dyn_storage", - "typeString": "struct DXswapDeployer.TokenPair storage ref[] storage ref" - } - }, - "id": 165, - "indexExpression": { - "argumentTypes": null, - "id": 164, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 149, - "src": "2130:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2112:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenPair_$21_storage", - "typeString": "struct DXswapDeployer.TokenPair storage ref" - } - }, - "id": 166, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "tokenA", - "nodeType": "MemberAccess", - "referencedDeclaration": 16, - "src": "2112:27:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 167, - "name": "initialTokenPairs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 24, - "src": "2141:17:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_TokenPair_$21_storage_$dyn_storage", - "typeString": "struct DXswapDeployer.TokenPair storage ref[] storage ref" - } - }, - "id": 169, - "indexExpression": { - "argumentTypes": null, - "id": 168, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 149, - "src": "2159:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2141:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenPair_$21_storage", - "typeString": "struct DXswapDeployer.TokenPair storage ref" - } - }, - "id": 170, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "tokenB", - "nodeType": "MemberAccess", - "referencedDeclaration": 18, - "src": "2141:27:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 161, - "name": "dxSwapFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 134, - "src": "2087:13:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFactory_$901", - "typeString": "contract DXswapFactory" - } - }, - "id": 162, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "createPair", - "nodeType": "MemberAccess", - "referencedDeclaration": 816, - "src": "2087:24:0", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$returns$_t_address_$", - "typeString": "function (address,address) external returns (address)" - } - }, - "id": 171, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2087:82:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2069:100:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 176, - "name": "newPair", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 160, - "src": "2208:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 177, - "name": "initialTokenPairs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 24, - "src": "2217:17:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_TokenPair_$21_storage_$dyn_storage", - "typeString": "struct DXswapDeployer.TokenPair storage ref[] storage ref" - } - }, - "id": 179, - "indexExpression": { - "argumentTypes": null, - "id": 178, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 149, - "src": "2235:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2217:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenPair_$21_storage", - "typeString": "struct DXswapDeployer.TokenPair storage ref" - } - }, - "id": 180, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "swapFee", - "nodeType": "MemberAccess", - "referencedDeclaration": 20, - "src": "2217:28:0", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "expression": { - "argumentTypes": null, - "id": 173, - "name": "dxSwapFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 134, - "src": "2183:13:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFactory_$901", - "typeString": "contract DXswapFactory" - } - }, - "id": 175, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "setSwapFee", - "nodeType": "MemberAccess", - "referencedDeclaration": 900, - "src": "2183:24:0", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint32_$returns$__$", - "typeString": "function (address,uint32) external" - } - }, - "id": 181, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2183:63:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 182, - "nodeType": "ExpressionStatement", - "src": "2183:63:0" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 185, - "name": "newPair", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 160, - "src": "2303:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 184, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2295:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 186, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2295:16:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 183, - "name": "PairDeployed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40, - "src": "2265:12:0", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 187, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2265:60:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 188, - "nodeType": "EmitStatement", - "src": "2260:65:0" - } - ] - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 155, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 152, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 149, - "src": "2019:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 153, - "name": "initialTokenPairs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 24, - "src": "2023:17:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_TokenPair_$21_storage_$dyn_storage", - "typeString": "struct DXswapDeployer.TokenPair storage ref[] storage ref" - } - }, - "id": 154, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2023:24:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2019:28:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 190, - "initializationExpression": { - "assignments": [ - 149 - ], - "declarations": [ - { - "constant": false, - "id": 149, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 190, - "src": "2006:7:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 148, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "2006:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 151, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 150, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2016:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "2006:11:0" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 157, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "2049:4:0", - "subExpression": { - "argumentTypes": null, - "id": 156, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 149, - "src": "2049:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 158, - "nodeType": "ExpressionStatement", - "src": "2049:4:0" - }, - "nodeType": "ForStatement", - "src": "2002:334:0" - }, - { - "assignments": [ - 192 - ], - "declarations": [ - { - "constant": false, - "id": 192, - "name": "dxSwapFeeReceiver", - "nodeType": "VariableDeclaration", - "scope": 257, - "src": "2345:35:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFeeReceiver_$1384", - "typeString": "contract DXswapFeeReceiver" - }, - "typeName": { - "contractScope": null, - "id": 191, - "name": "DXswapFeeReceiver", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1384, - "src": "2345:17:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFeeReceiver_$1384", - "typeString": "contract DXswapFeeReceiver" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 203, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 195, - "name": "dxdaoAvatar", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9, - "src": "2418:11:0", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 197, - "name": "dxSwapFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 134, - "src": "2439:13:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFactory_$901", - "typeString": "contract DXswapFactory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapFactory_$901", - "typeString": "contract DXswapFactory" - } - ], - "id": 196, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2431:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 198, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2431:22:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 199, - "name": "WETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11, - "src": "2455:4:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 200, - "name": "protocolFeeReceiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7, - "src": "2461:19:0", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 201, - "name": "dxdaoAvatar", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9, - "src": "2482:11:0", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 194, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "2383:21:0", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$returns$_t_contract$_DXswapFeeReceiver_$1384_$", - "typeString": "function (address,address,address,address,address) returns (contract DXswapFeeReceiver)" - }, - "typeName": { - "contractScope": null, - "id": 193, - "name": "DXswapFeeReceiver", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1384, - "src": "2387:17:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFeeReceiver_$1384", - "typeString": "contract DXswapFeeReceiver" - } - } - }, - "id": 202, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2383:120:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFeeReceiver_$1384", - "typeString": "contract DXswapFeeReceiver" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2345:158:0" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 206, - "name": "dxSwapFeeReceiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 192, - "src": "2546:17:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFeeReceiver_$1384", - "typeString": "contract DXswapFeeReceiver" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapFeeReceiver_$1384", - "typeString": "contract DXswapFeeReceiver" - } - ], - "id": 205, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2538:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 207, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2538:26:0", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 204, - "name": "FeeReceiverDeployed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 28, - "src": "2518:19:0", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 208, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2518:47:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 209, - "nodeType": "EmitStatement", - "src": "2513:52:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 214, - "name": "dxSwapFeeReceiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 192, - "src": "2606:17:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFeeReceiver_$1384", - "typeString": "contract DXswapFeeReceiver" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapFeeReceiver_$1384", - "typeString": "contract DXswapFeeReceiver" - } - ], - "id": 213, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2598:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 215, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2598:26:0", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "expression": { - "argumentTypes": null, - "id": 210, - "name": "dxSwapFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 134, - "src": "2575:13:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFactory_$901", - "typeString": "contract DXswapFactory" - } - }, - "id": 212, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "setFeeTo", - "nodeType": "MemberAccess", - "referencedDeclaration": 834, - "src": "2575:22:0", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 216, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2575:50:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 217, - "nodeType": "ExpressionStatement", - "src": "2575:50:0" - }, - { - "assignments": [ - 219 - ], - "declarations": [ - { - "constant": false, - "id": 219, - "name": "dxSwapFeeSetter", - "nodeType": "VariableDeclaration", - "scope": 257, - "src": "2644:31:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFeeSetter_$1547", - "typeString": "contract DXswapFeeSetter" - }, - "typeName": { - "contractScope": null, - "id": 218, - "name": "DXswapFeeSetter", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1547, - "src": "2644:15:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFeeSetter_$1547", - "typeString": "contract DXswapFeeSetter" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 227, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 222, - "name": "dxdaoAvatar", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9, - "src": "2698:11:0", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 224, - "name": "dxSwapFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 134, - "src": "2719:13:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFactory_$901", - "typeString": "contract DXswapFactory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapFactory_$901", - "typeString": "contract DXswapFactory" - } - ], - "id": 223, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2711:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 225, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2711:22:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 221, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "2678:19:0", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$returns$_t_contract$_DXswapFeeSetter_$1547_$", - "typeString": "function (address,address) returns (contract DXswapFeeSetter)" - }, - "typeName": { - "contractScope": null, - "id": 220, - "name": "DXswapFeeSetter", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1547, - "src": "2682:15:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFeeSetter_$1547", - "typeString": "contract DXswapFeeSetter" - } - } - }, - "id": 226, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2678:56:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFeeSetter_$1547", - "typeString": "contract DXswapFeeSetter" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2644:90:0" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 230, - "name": "dxSwapFeeSetter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 219, - "src": "2775:15:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFeeSetter_$1547", - "typeString": "contract DXswapFeeSetter" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapFeeSetter_$1547", - "typeString": "contract DXswapFeeSetter" - } - ], - "id": 229, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2767:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 231, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2767:24:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 228, - "name": "FeeSetterDeployed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 32, - "src": "2749:17:0", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 232, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2749:43:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 233, - "nodeType": "EmitStatement", - "src": "2744:48:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 238, - "name": "dxSwapFeeSetter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 219, - "src": "2839:15:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFeeSetter_$1547", - "typeString": "contract DXswapFeeSetter" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapFeeSetter_$1547", - "typeString": "contract DXswapFeeSetter" - } - ], - "id": 237, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2831:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 239, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2831:24:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 234, - "name": "dxSwapFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 134, - "src": "2802:13:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFactory_$901", - "typeString": "contract DXswapFactory" - } - }, - "id": 236, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "setFeeToSetter", - "nodeType": "MemberAccess", - "referencedDeclaration": 852, - "src": "2802:28:0", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 240, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2802:54:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 241, - "nodeType": "ExpressionStatement", - "src": "2802:54:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 244, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 242, - "name": "state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14, - "src": "2866:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "32", - "id": 243, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2874:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "2866:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 245, - "nodeType": "ExpressionStatement", - "src": "2866:9:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 252, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3874, - "src": "2913:4:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapDeployer_$259", - "typeString": "contract DXswapDeployer" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapDeployer_$259", - "typeString": "contract DXswapDeployer" - } - ], - "id": 251, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2905:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 253, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2905:13:0", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "id": 254, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balance", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2905:21:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 246, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "2885:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 249, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2885:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "id": 250, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2885:19:0", - "typeDescriptions": { - "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 255, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2885:42:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 256, - "nodeType": "ExpressionStatement", - "src": "2885:42:0" - } - ] - }, - "documentation": null, - "id": 258, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "deploy", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 124, - "nodeType": "ParameterList", - "parameters": [], - "src": "1783:2:0" - }, - "returnParameters": { - "id": 125, - "nodeType": "ParameterList", - "parameters": [], - "src": "1793:0:0" - }, - "scope": 259, - "src": "1768:1166:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 260, - "src": "163:2781:0" - } - ], - "src": "0:2945:0" - } - }, - "contracts/DXswapERC20.sol": { - "id": 1, - "AST": { - "absolutePath": "contracts/DXswapERC20.sol", - "exportedSymbols": { - "DXswapERC20": [ - 644 - ] - }, - "id": 645, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 261, - "literals": [ - "solidity", - "=", - "0.5", - ".16" - ], - "nodeType": "PragmaDirective", - "src": "0:24:1" - }, - { - "absolutePath": "contracts/interfaces/IDXswapERC20.sol", - "file": "./interfaces/IDXswapERC20.sol", - "id": 262, - "nodeType": "ImportDirective", - "scope": 645, - "sourceUnit": 2757, - "src": "26:39:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "contracts/libraries/SafeMath.sol", - "file": "./libraries/SafeMath.sol", - "id": 263, - "nodeType": "ImportDirective", - "scope": 645, - "sourceUnit": 3356, - "src": "66:34:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 264, - "name": "IDXswapERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2756, - "src": "126:12:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapERC20_$2756", - "typeString": "contract IDXswapERC20" - } - }, - "id": 265, - "nodeType": "InheritanceSpecifier", - "src": "126:12:1" - } - ], - "contractDependencies": [ - 2756 - ], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 644, - "linearizedBaseContracts": [ - 644, - 2756 - ], - "name": "DXswapERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 268, - "libraryName": { - "contractScope": null, - "id": 266, - "name": "SafeMath", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 3355, - "src": "151:8:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeMath_$3355", - "typeString": "library SafeMath" - } - }, - "nodeType": "UsingForDirective", - "src": "145:24:1", - "typeName": { - "id": 267, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "164:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - { - "constant": true, - "id": 271, - "name": "name", - "nodeType": "VariableDeclaration", - "scope": 644, - "src": "175:38:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory", - "typeString": "string" - }, - "typeName": { - "id": 269, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "175:6:1", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "445873776170", - "id": 270, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "205:8:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591", - "typeString": "literal_string \"DXswap\"" - }, - "value": "DXswap" - }, - "visibility": "public" - }, - { - "constant": true, - "id": 274, - "name": "symbol", - "nodeType": "VariableDeclaration", - "scope": 644, - "src": "219:37:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory", - "typeString": "string" - }, - "typeName": { - "id": 272, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "219:6:1", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "445853", - "id": 273, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "251:5:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_a83c5f753ca8dfb38e3642b6150bd5bcbf2faf386e9f693f71a3f3aff250d790", - "typeString": "literal_string \"DXS\"" - }, - "value": "DXS" - }, - "visibility": "public" - }, - { - "constant": true, - "id": 277, - "name": "decimals", - "nodeType": "VariableDeclaration", - "scope": 644, - "src": "262:35:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 275, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "262:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "3138", - "id": 276, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "295:2:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_18_by_1", - "typeString": "int_const 18" - }, - "value": "18" - }, - "visibility": "public" - }, - { - "constant": false, - "id": 279, - "name": "totalSupply", - "nodeType": "VariableDeclaration", - "scope": 644, - "src": "303:24:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 278, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "303:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 283, - "name": "balanceOf", - "nodeType": "VariableDeclaration", - "scope": 644, - "src": "333:41:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 282, - "keyType": { - "id": 280, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "341:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "333:24:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 281, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "352:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 289, - "name": "allowance", - "nodeType": "VariableDeclaration", - "scope": 644, - "src": "380:61:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - }, - "typeName": { - "id": 288, - "keyType": { - "id": 284, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "388:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "380:44:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - }, - "valueType": { - "id": 287, - "keyType": { - "id": 285, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "407:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "399:24:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 286, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "418:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 291, - "name": "DOMAIN_SEPARATOR", - "nodeType": "VariableDeclaration", - "scope": 644, - "src": "448:31:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 290, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "448:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": true, - "id": 294, - "name": "PERMIT_TYPEHASH", - "nodeType": "VariableDeclaration", - "scope": 644, - "src": "589:108:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 292, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "589:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "307836653731656461653132623162393766346431663630333730666566313031303566613266616165303132363131346131363963363438343564363132366339", - "id": 293, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "631:66:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_49955707469362902507454157297736832118868343942642399513960811609542965143241_by_1", - "typeString": "int_const 4995...(69 digits omitted)...3241" - }, - "value": "0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9" - }, - "visibility": "public" - }, - { - "constant": false, - "id": 298, - "name": "nonces", - "nodeType": "VariableDeclaration", - "scope": 644, - "src": "703:38:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 297, - "keyType": { - "id": 295, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "711:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "703:24:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 296, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "722:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "value": null, - "visibility": "public" - }, - { - "anonymous": false, - "documentation": null, - "id": 306, - "name": "Approval", - "nodeType": "EventDefinition", - "parameters": { - "id": 305, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 300, - "indexed": true, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 306, - "src": "763:21:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 299, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "763:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 302, - "indexed": true, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 306, - "src": "786:23:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 301, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "786:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 304, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 306, - "src": "811:10:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 303, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "811:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "762:60:1" - }, - "src": "748:75:1" - }, - { - "anonymous": false, - "documentation": null, - "id": 314, - "name": "Transfer", - "nodeType": "EventDefinition", - "parameters": { - "id": 313, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 308, - "indexed": true, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 314, - "src": "843:20:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 307, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "843:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 310, - "indexed": true, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 314, - "src": "865:18:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 309, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "865:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 312, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 314, - "src": "885:10:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 311, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "885:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "842:54:1" - }, - "src": "828:69:1" - }, - { - "body": { - "id": 346, - "nodeType": "Block", - "src": "924:423:1", - "statements": [ - { - "assignments": [ - 318 - ], - "declarations": [ - { - "constant": false, - "id": 318, - "name": "chainId", - "nodeType": "VariableDeclaration", - "scope": 346, - "src": "934:12:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 317, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "934:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 319, - "initialValue": null, - "nodeType": "VariableDeclarationStatement", - "src": "934:12:1" - }, - { - "externalReferences": [ - { - "chainId": { - "declaration": 318, - "isOffset": false, - "isSlot": false, - "src": "979:7:1", - "valueSize": 1 - } - } - ], - "id": 320, - "nodeType": "InlineAssembly", - "operations": "{ chainId := chainid() }", - "src": "956:51:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 344, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 321, - "name": "DOMAIN_SEPARATOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 291, - "src": "1016:16:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", - "id": 326, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1096:84:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f", - "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"" - }, - "value": "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f", - "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"" - } - ], - "id": 325, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3824, - "src": "1086:9:1", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 327, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1086:95:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 330, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 271, - "src": "1215:4:1", - "typeDescriptions": { - "typeIdentifier": "t_string_memory", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory", - "typeString": "string memory" - } - ], - "id": 329, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1209:5:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": "bytes" - }, - "id": 331, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1209:11:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 328, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3824, - "src": "1199:9:1", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 332, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1199:22:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "31", - "id": 335, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1255:3:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", - "typeString": "literal_string \"1\"" - }, - "value": "1" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", - "typeString": "literal_string \"1\"" - } - ], - "id": 334, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1249:5:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": "bytes" - }, - "id": 336, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1249:10:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 333, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3824, - "src": "1239:9:1", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 337, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1239:21:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "argumentTypes": null, - "id": 338, - "name": "chainId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 318, - "src": "1278:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 340, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "1311:4:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapERC20_$644", - "typeString": "contract DXswapERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapERC20_$644", - "typeString": "contract DXswapERC20" - } - ], - "id": 339, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1303:7:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 341, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1303:13:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 323, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3817, - "src": "1058:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 324, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "encode", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1058:10:1", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 342, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1058:272:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 322, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3824, - "src": "1035:9:1", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 343, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1035:305:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "1016:324:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 345, - "nodeType": "ExpressionStatement", - "src": "1016:324:1" - } - ] - }, - "documentation": null, - "id": 347, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 315, - "nodeType": "ParameterList", - "parameters": [], - "src": "914:2:1" - }, - "returnParameters": { - "id": 316, - "nodeType": "ParameterList", - "parameters": [], - "src": "924:0:1" - }, - "scope": 644, - "src": "903:444:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 380, - "nodeType": "Block", - "src": "1401:149:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 359, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 354, - "name": "totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 279, - "src": "1411:11:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 357, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 351, - "src": "1441:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 355, - "name": "totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 279, - "src": "1425:11:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 356, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 3304, - "src": "1425:15:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 358, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1425:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1411:36:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 360, - "nodeType": "ExpressionStatement", - "src": "1411:36:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 370, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 361, - "name": "balanceOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 283, - "src": "1457:9:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 363, - "indexExpression": { - "argumentTypes": null, - "id": 362, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 349, - "src": "1467:2:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1457:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 368, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 351, - "src": "1491:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 364, - "name": "balanceOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 283, - "src": "1473:9:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 366, - "indexExpression": { - "argumentTypes": null, - "id": 365, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 349, - "src": "1483:2:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1473:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 367, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 3304, - "src": "1473:17:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 369, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1473:24:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1457:40:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 371, - "nodeType": "ExpressionStatement", - "src": "1457:40:1" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 374, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1529:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 373, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1521:7:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 375, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1521:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 376, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 349, - "src": "1533:2:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 377, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 351, - "src": "1537:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 372, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 314 - ], - "referencedDeclaration": 314, - "src": "1512:8:1", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 378, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1512:31:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 379, - "nodeType": "EmitStatement", - "src": "1507:36:1" - } - ] - }, - "documentation": null, - "id": 381, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_mint", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 352, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 349, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 381, - "src": "1368:10:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 348, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1368:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 351, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 381, - "src": "1380:10:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 350, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1380:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1367:24:1" - }, - "returnParameters": { - "id": 353, - "nodeType": "ParameterList", - "parameters": [], - "src": "1401:0:1" - }, - "scope": 644, - "src": "1353:197:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 414, - "nodeType": "Block", - "src": "1606:155:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 397, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 388, - "name": "balanceOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 283, - "src": "1616:9:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 390, - "indexExpression": { - "argumentTypes": null, - "id": 389, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 383, - "src": "1626:4:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1616:15:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 395, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 385, - "src": "1654:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 391, - "name": "balanceOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 283, - "src": "1634:9:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 393, - "indexExpression": { - "argumentTypes": null, - "id": 392, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 383, - "src": "1644:4:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1634:15:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 394, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 3326, - "src": "1634:19:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 396, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1634:26:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1616:44:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 398, - "nodeType": "ExpressionStatement", - "src": "1616:44:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 404, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 399, - "name": "totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 279, - "src": "1670:11:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 402, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 385, - "src": "1700:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 400, - "name": "totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 279, - "src": "1684:11:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 401, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 3326, - "src": "1684:15:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 403, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1684:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1670:36:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 405, - "nodeType": "ExpressionStatement", - "src": "1670:36:1" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 407, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 383, - "src": "1730:4:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 409, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1744:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 408, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1736:7:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 410, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1736:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 411, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 385, - "src": "1748:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 406, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 314 - ], - "referencedDeclaration": 314, - "src": "1721:8:1", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 412, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1721:33:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 413, - "nodeType": "EmitStatement", - "src": "1716:38:1" - } - ] - }, - "documentation": null, - "id": 415, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_burn", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 386, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 383, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 415, - "src": "1571:12:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 382, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1571:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 385, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 415, - "src": "1585:10:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 384, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1585:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1570:26:1" - }, - "returnParameters": { - "id": 387, - "nodeType": "ParameterList", - "parameters": [], - "src": "1606:0:1" - }, - "scope": 644, - "src": "1556:205:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 438, - "nodeType": "Block", - "src": "1837:96:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 430, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 424, - "name": "allowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 289, - "src": "1847:9:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 427, - "indexExpression": { - "argumentTypes": null, - "id": 425, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 417, - "src": "1857:5:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1847:16:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 428, - "indexExpression": { - "argumentTypes": null, - "id": 426, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 419, - "src": "1864:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1847:25:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 429, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 421, - "src": "1875:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1847:33:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 431, - "nodeType": "ExpressionStatement", - "src": "1847:33:1" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 433, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 417, - "src": "1904:5:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 434, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 419, - "src": "1911:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 435, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 421, - "src": "1920:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 432, - "name": "Approval", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 306 - ], - "referencedDeclaration": 306, - "src": "1895:8:1", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 436, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1895:31:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 437, - "nodeType": "EmitStatement", - "src": "1890:36:1" - } - ] - }, - "documentation": null, - "id": 439, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_approve", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 422, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 417, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 439, - "src": "1785:13:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 416, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1785:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 419, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 439, - "src": "1800:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 418, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1800:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 421, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 439, - "src": "1817:10:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 420, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1817:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1784:44:1" - }, - "returnParameters": { - "id": 423, - "nodeType": "ParameterList", - "parameters": [], - "src": "1837:0:1" - }, - "scope": 644, - "src": "1767:166:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "private" - }, - { - "body": { - "id": 476, - "nodeType": "Block", - "src": "2004:151:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 457, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 448, - "name": "balanceOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 283, - "src": "2014:9:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 450, - "indexExpression": { - "argumentTypes": null, - "id": 449, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 441, - "src": "2024:4:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2014:15:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 455, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 445, - "src": "2052:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 451, - "name": "balanceOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 283, - "src": "2032:9:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 453, - "indexExpression": { - "argumentTypes": null, - "id": 452, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 441, - "src": "2042:4:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2032:15:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 454, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 3326, - "src": "2032:19:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 456, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2032:26:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2014:44:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 458, - "nodeType": "ExpressionStatement", - "src": "2014:44:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 468, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 459, - "name": "balanceOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 283, - "src": "2068:9:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 461, - "indexExpression": { - "argumentTypes": null, - "id": 460, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 443, - "src": "2078:2:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2068:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 466, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 445, - "src": "2102:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 462, - "name": "balanceOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 283, - "src": "2084:9:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 464, - "indexExpression": { - "argumentTypes": null, - "id": 463, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 443, - "src": "2094:2:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2084:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 465, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 3304, - "src": "2084:17:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 467, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2084:24:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2068:40:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 469, - "nodeType": "ExpressionStatement", - "src": "2068:40:1" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 471, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 441, - "src": "2132:4:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 472, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 443, - "src": "2138:2:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 473, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 445, - "src": "2142:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 470, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 314 - ], - "referencedDeclaration": 314, - "src": "2123:8:1", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 474, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2123:25:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 475, - "nodeType": "EmitStatement", - "src": "2118:30:1" - } - ] - }, - "documentation": null, - "id": 477, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 446, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 441, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 477, - "src": "1958:12:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 440, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1958:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 443, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 477, - "src": "1972:10:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 442, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1972:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 445, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 477, - "src": "1984:10:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 444, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1984:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1957:38:1" - }, - "returnParameters": { - "id": 447, - "nodeType": "ParameterList", - "parameters": [], - "src": "2004:0:1" - }, - "scope": 644, - "src": "1939:216:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "private" - }, - { - "body": { - "id": 495, - "nodeType": "Block", - "src": "2231:74:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 487, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "2250:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 488, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2250:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 489, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 479, - "src": "2262:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 490, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 481, - "src": "2271:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 486, - "name": "_approve", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 439, - "src": "2241:8:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 491, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2241:36:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 492, - "nodeType": "ExpressionStatement", - "src": "2241:36:1" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 493, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2294:4:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 485, - "id": 494, - "nodeType": "Return", - "src": "2287:11:1" - } - ] - }, - "documentation": null, - "id": 496, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "approve", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 482, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 479, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 496, - "src": "2178:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 478, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2178:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 481, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 496, - "src": "2195:10:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 480, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2195:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2177:29:1" - }, - "returnParameters": { - "id": 485, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 484, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 496, - "src": "2225:4:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 483, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2225:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2224:6:1" - }, - "scope": 644, - "src": "2161:144:1", - "stateMutability": "nonpayable", - "superFunction": 2701, - "visibility": "external" - }, - { - "body": { - "id": 514, - "nodeType": "Block", - "src": "2377:70:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 506, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "2397:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 507, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2397:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 508, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 498, - "src": "2409:2:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 509, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 500, - "src": "2413:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 505, - "name": "_transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 477, - "src": "2387:9:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 510, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2387:32:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 511, - "nodeType": "ExpressionStatement", - "src": "2387:32:1" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 512, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2436:4:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 504, - "id": 513, - "nodeType": "Return", - "src": "2429:11:1" - } - ] - }, - "documentation": null, - "id": 515, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 501, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 498, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 515, - "src": "2329:10:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 497, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2329:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 500, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 515, - "src": "2341:10:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 499, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2341:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2328:24:1" - }, - "returnParameters": { - "id": 504, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 503, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 515, - "src": "2371:4:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 502, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2371:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2370:6:1" - }, - "scope": 644, - "src": "2311:136:1", - "stateMutability": "nonpayable", - "superFunction": 2710, - "visibility": "external" - }, - { - "body": { - "id": 564, - "nodeType": "Block", - "src": "2537:211:1", - "statements": [ - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 536, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 526, - "name": "allowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 289, - "src": "2551:9:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 528, - "indexExpression": { - "argumentTypes": null, - "id": 527, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "2561:4:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2551:15:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 531, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 529, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "2567:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 530, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2567:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2551:27:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 534, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "-", - "prefix": true, - "src": "2587:2:1", - "subExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 533, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2588:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "typeDescriptions": { - "typeIdentifier": "t_rational_minus_1_by_1", - "typeString": "int_const -1" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_minus_1_by_1", - "typeString": "int_const -1" - } - ], - "id": 532, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2582:4:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint" - }, - "id": 535, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2582:8:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2551:39:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 555, - "nodeType": "IfStatement", - "src": "2547:138:1", - "trueBody": { - "id": 554, - "nodeType": "Block", - "src": "2592:93:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 552, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 537, - "name": "allowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 289, - "src": "2606:9:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 541, - "indexExpression": { - "argumentTypes": null, - "id": 538, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "2616:4:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2606:15:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 542, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 539, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "2622:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 540, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2622:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2606:27:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 550, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 521, - "src": "2668:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 543, - "name": "allowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 289, - "src": "2636:9:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 545, - "indexExpression": { - "argumentTypes": null, - "id": 544, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "2646:4:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2636:15:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 548, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 546, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "2652:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 547, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2652:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2636:27:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 549, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 3326, - "src": "2636:31:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 551, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2636:38:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2606:68:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 553, - "nodeType": "ExpressionStatement", - "src": "2606:68:1" - } - ] - } - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 557, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "2704:4:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 558, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 519, - "src": "2710:2:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 559, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 521, - "src": "2714:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 556, - "name": "_transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 477, - "src": "2694:9:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 560, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2694:26:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 561, - "nodeType": "ExpressionStatement", - "src": "2694:26:1" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 562, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2737:4:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 525, - "id": 563, - "nodeType": "Return", - "src": "2730:11:1" - } - ] - }, - "documentation": null, - "id": 565, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "transferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 522, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 517, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 565, - "src": "2475:12:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 516, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2475:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 519, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 565, - "src": "2489:10:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 518, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2489:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 521, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 565, - "src": "2501:10:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 520, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2501:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2474:38:1" - }, - "returnParameters": { - "id": 525, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 524, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 565, - "src": "2531:4:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 523, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2531:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2530:6:1" - }, - "scope": 644, - "src": "2453:295:1", - "stateMutability": "nonpayable", - "superFunction": 2721, - "visibility": "external" - }, - { - "body": { - "id": 642, - "nodeType": "Block", - "src": "2869:551:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 586, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 583, - "name": "deadline", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 573, - "src": "2887:8:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 584, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3820, - "src": "2899:5:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 585, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "timestamp", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2899:15:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2887:27:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "44587377617045524332303a2045585049524544", - "id": 587, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2916:22:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_37f22467a7e68ad6916da89bf66c8798beb11d1a70068ca9560198a6f52ec889", - "typeString": "literal_string \"DXswapERC20: EXPIRED\"" - }, - "value": "DXswapERC20: EXPIRED" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_37f22467a7e68ad6916da89bf66c8798beb11d1a70068ca9560198a6f52ec889", - "typeString": "literal_string \"DXswapERC20: EXPIRED\"" - } - ], - "id": 582, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "2879:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 588, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2879:60:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 589, - "nodeType": "ExpressionStatement", - "src": "2879:60:1" - }, - { - "assignments": [ - 591 - ], - "declarations": [ - { - "constant": false, - "id": 591, - "name": "digest", - "nodeType": "VariableDeclaration", - "scope": 642, - "src": "2949:14:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 590, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2949:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 613, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "1901", - "id": 595, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3023:10:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", - "typeString": "literal_string \"\u0019\u0001\"" - }, - "value": "\u0019\u0001" - }, - { - "argumentTypes": null, - "id": 596, - "name": "DOMAIN_SEPARATOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 291, - "src": "3051:16:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 600, - "name": "PERMIT_TYPEHASH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 294, - "src": "3106:15:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "argumentTypes": null, - "id": 601, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 567, - "src": "3123:5:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 602, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 569, - "src": "3130:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 603, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 571, - "src": "3139:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 607, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "3146:15:1", - "subExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 604, - "name": "nonces", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 298, - "src": "3146:6:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 606, - "indexExpression": { - "argumentTypes": null, - "id": 605, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 567, - "src": "3153:5:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3146:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 608, - "name": "deadline", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 573, - "src": "3163:8:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 598, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3817, - "src": "3095:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 599, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "encode", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3095:10:1", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 609, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3095:77:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 597, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3824, - "src": "3085:9:1", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 610, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3085:88:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", - "typeString": "literal_string \"\u0019\u0001\"" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "argumentTypes": null, - "id": 593, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3817, - "src": "2989:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 594, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2989:16:1", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 611, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2989:198:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 592, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3824, - "src": "2966:9:1", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 612, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2966:231:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2949:248:1" - }, - { - "assignments": [ - 615 - ], - "declarations": [ - { - "constant": false, - "id": 615, - "name": "recoveredAddress", - "nodeType": "VariableDeclaration", - "scope": 642, - "src": "3207:24:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 614, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3207:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 622, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 617, - "name": "digest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 591, - "src": "3244:6:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "argumentTypes": null, - "id": 618, - "name": "v", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 575, - "src": "3252:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - { - "argumentTypes": null, - "id": 619, - "name": "r", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 577, - "src": "3255:1:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "argumentTypes": null, - "id": 620, - "name": "s", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 579, - "src": "3258:1:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 616, - "name": "ecrecover", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3822, - "src": "3234:9:1", - "typeDescriptions": { - "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$", - "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)" - } - }, - "id": 621, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3234:26:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3207:53:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 632, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 628, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 624, - "name": "recoveredAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 615, - "src": "3278:16:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 626, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3306:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 625, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3298:7:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 627, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3298:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "3278:30:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 631, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 629, - "name": "recoveredAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 615, - "src": "3312:16:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 630, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 567, - "src": "3332:5:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3312:25:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "3278:59:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "44587377617045524332303a20494e56414c49445f5349474e4154555245", - "id": 633, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3339:32:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_21246f74879a0a5f0bf55d59372907b3ff93fce1a8c033bbaea5f4d00e8a35c5", - "typeString": "literal_string \"DXswapERC20: INVALID_SIGNATURE\"" - }, - "value": "DXswapERC20: INVALID_SIGNATURE" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_21246f74879a0a5f0bf55d59372907b3ff93fce1a8c033bbaea5f4d00e8a35c5", - "typeString": "literal_string \"DXswapERC20: INVALID_SIGNATURE\"" - } - ], - "id": 623, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "3270:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 634, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3270:102:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 635, - "nodeType": "ExpressionStatement", - "src": "3270:102:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 637, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 567, - "src": "3391:5:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 638, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 569, - "src": "3398:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 639, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 571, - "src": "3407:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 636, - "name": "_approve", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 439, - "src": "3382:8:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 640, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3382:31:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 641, - "nodeType": "ExpressionStatement", - "src": "3382:31:1" - } - ] - }, - "documentation": null, - "id": 643, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "permit", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 580, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 567, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 643, - "src": "2770:13:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 566, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2770:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 569, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 643, - "src": "2785:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 568, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2785:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 571, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 643, - "src": "2802:10:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 570, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2802:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 573, - "name": "deadline", - "nodeType": "VariableDeclaration", - "scope": 643, - "src": "2814:13:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 572, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2814:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 575, - "name": "v", - "nodeType": "VariableDeclaration", - "scope": 643, - "src": "2829:7:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 574, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "2829:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 577, - "name": "r", - "nodeType": "VariableDeclaration", - "scope": 643, - "src": "2838:9:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 576, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2838:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 579, - "name": "s", - "nodeType": "VariableDeclaration", - "scope": 643, - "src": "2849:9:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 578, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2849:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2769:90:1" - }, - "returnParameters": { - "id": 581, - "nodeType": "ParameterList", - "parameters": [], - "src": "2869:0:1" - }, - "scope": 644, - "src": "2754:666:1", - "stateMutability": "nonpayable", - "superFunction": 2755, - "visibility": "external" - } - ], - "scope": 645, - "src": "102:3320:1" - } - ], - "src": "0:3423:1" - } - }, - "contracts/DXswapFactory.sol": { - "id": 2, - "AST": { - "absolutePath": "contracts/DXswapFactory.sol", - "exportedSymbols": { - "DXswapFactory": [ - 901 - ] - }, - "id": 902, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 646, - "literals": [ - "solidity", - "=", - "0.5", - ".16" - ], - "nodeType": "PragmaDirective", - "src": "0:24:2" - }, - { - "absolutePath": "contracts/interfaces/IDXswapFactory.sol", - "file": "./interfaces/IDXswapFactory.sol", - "id": 647, - "nodeType": "ImportDirective", - "scope": 902, - "sourceUnit": 2842, - "src": "26:41:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "contracts/DXswapPair.sol", - "file": "./DXswapPair.sol", - "id": 648, - "nodeType": "ImportDirective", - "scope": 902, - "sourceUnit": 2625, - "src": "68:26:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 649, - "name": "IDXswapFactory", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2841, - "src": "122:14:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapFactory_$2841", - "typeString": "contract IDXswapFactory" - } - }, - "id": 650, - "nodeType": "InheritanceSpecifier", - "src": "122:14:2" - } - ], - "contractDependencies": [ - 2624, - 2841 - ], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 901, - "linearizedBaseContracts": [ - 901, - 2841 - ], - "name": "DXswapFactory", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 652, - "name": "feeTo", - "nodeType": "VariableDeclaration", - "scope": 901, - "src": "143:20:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 651, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "143:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 654, - "name": "feeToSetter", - "nodeType": "VariableDeclaration", - "scope": 901, - "src": "169:26:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 653, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "169:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 657, - "name": "protocolFeeDenominator", - "nodeType": "VariableDeclaration", - "scope": 901, - "src": "201:39:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 655, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "201:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "39", - "id": 656, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "239:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_9_by_1", - "typeString": "int_const 9" - }, - "value": "9" - }, - "visibility": "public" - }, - { - "constant": true, - "id": 668, - "name": "INIT_CODE_PAIR_HASH", - "nodeType": "VariableDeclaration", - "scope": 901, - "src": "276:104:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 658, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "276:7:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 663, - "name": "DXswapPair", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2624, - "src": "354:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_DXswapPair_$2624_$", - "typeString": "type(contract DXswapPair)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_contract$_DXswapPair_$2624_$", - "typeString": "type(contract DXswapPair)" - } - ], - "id": 662, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3843, - "src": "349:4:2", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 664, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "349:16:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_contract$_DXswapPair_$2624", - "typeString": "type(contract DXswapPair)" - } - }, - "id": 665, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "creationCode", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "349:29:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "argumentTypes": null, - "id": 660, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3817, - "src": "332:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 661, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "332:16:2", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 666, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "332:47:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 659, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3824, - "src": "322:9:2", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 667, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "322:58:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "public" - }, - { - "constant": false, - "id": 674, - "name": "getPair", - "nodeType": "VariableDeclaration", - "scope": 901, - "src": "387:62:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$", - "typeString": "mapping(address => mapping(address => address))" - }, - "typeName": { - "id": 673, - "keyType": { - "id": 669, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "395:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "387:47:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$", - "typeString": "mapping(address => mapping(address => address))" - }, - "valueType": { - "id": 672, - "keyType": { - "id": 670, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "414:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "406:27:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - }, - "valueType": { - "id": 671, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "425:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 677, - "name": "allPairs", - "nodeType": "VariableDeclaration", - "scope": 901, - "src": "455:25:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 675, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "455:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 676, - "length": null, - "nodeType": "ArrayTypeName", - "src": "455:9:2", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "value": null, - "visibility": "public" - }, - { - "anonymous": false, - "documentation": null, - "id": 687, - "name": "PairCreated", - "nodeType": "EventDefinition", - "parameters": { - "id": 686, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 679, - "indexed": true, - "name": "token0", - "nodeType": "VariableDeclaration", - "scope": 687, - "src": "505:22:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 678, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "505:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 681, - "indexed": true, - "name": "token1", - "nodeType": "VariableDeclaration", - "scope": 687, - "src": "529:22:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 680, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "529:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 683, - "indexed": false, - "name": "pair", - "nodeType": "VariableDeclaration", - "scope": 687, - "src": "553:12:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 682, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "553:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 685, - "indexed": false, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 687, - "src": "567:4:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 684, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "567:4:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "504:68:2" - }, - "src": "487:86:2" - }, - { - "body": { - "id": 696, - "nodeType": "Block", - "src": "620:43:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 694, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 692, - "name": "feeToSetter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 654, - "src": "630:11:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 693, - "name": "_feeToSetter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 689, - "src": "644:12:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "630:26:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 695, - "nodeType": "ExpressionStatement", - "src": "630:26:2" - } - ] - }, - "documentation": null, - "id": 697, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 690, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 689, - "name": "_feeToSetter", - "nodeType": "VariableDeclaration", - "scope": 697, - "src": "591:20:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 688, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "591:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "590:22:2" - }, - "returnParameters": { - "id": 691, - "nodeType": "ParameterList", - "parameters": [], - "src": "620:0:2" - }, - "scope": 901, - "src": "579:84:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 705, - "nodeType": "Block", - "src": "724:39:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 702, - "name": "allPairs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 677, - "src": "741:8:2", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 703, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "741:15:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 701, - "id": 704, - "nodeType": "Return", - "src": "734:22:2" - } - ] - }, - "documentation": null, - "id": 706, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "allPairsLength", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 698, - "nodeType": "ParameterList", - "parameters": [], - "src": "692:2:2" - }, - "returnParameters": { - "id": 701, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 700, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 706, - "src": "718:4:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 699, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "718:4:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "717:6:2" - }, - "scope": 901, - "src": "669:94:2", - "stateMutability": "view", - "superFunction": 2809, - "visibility": "external" - }, - { - "body": { - "id": 815, - "nodeType": "Block", - "src": "853:870:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 718, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 716, - "name": "tokenA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 708, - "src": "871:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "id": 717, - "name": "tokenB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 710, - "src": "881:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "871:16:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "445873776170466163746f72793a204944454e544943414c5f414444524553534553", - "id": 719, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "889:36:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_cb681869b0bda04ddd0228715f4267a36b6867e9cac163e158c4f68b1183038f", - "typeString": "literal_string \"DXswapFactory: IDENTICAL_ADDRESSES\"" - }, - "value": "DXswapFactory: IDENTICAL_ADDRESSES" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_cb681869b0bda04ddd0228715f4267a36b6867e9cac163e158c4f68b1183038f", - "typeString": "literal_string \"DXswapFactory: IDENTICAL_ADDRESSES\"" - } - ], - "id": 715, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "863:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 720, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "863:63:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 721, - "nodeType": "ExpressionStatement", - "src": "863:63:2" - }, - { - "assignments": [ - 723, - 725 - ], - "declarations": [ - { - "constant": false, - "id": 723, - "name": "token0", - "nodeType": "VariableDeclaration", - "scope": 815, - "src": "937:14:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 722, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "937:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 725, - "name": "token1", - "nodeType": "VariableDeclaration", - "scope": 815, - "src": "953:14:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 724, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "953:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 736, - "initialValue": { - "argumentTypes": null, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 728, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 726, - "name": "tokenA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 708, - "src": "971:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 727, - "name": "tokenB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 710, - "src": "980:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "971:15:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "id": 732, - "name": "tokenB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 710, - "src": "1009:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 733, - "name": "tokenA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 708, - "src": "1017:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 734, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1008:16:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_address_$", - "typeString": "tuple(address,address)" - } - }, - "id": 735, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "971:53:2", - "trueExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "id": 729, - "name": "tokenA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 708, - "src": "990:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 730, - "name": "tokenB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 710, - "src": "998:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 731, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "989:16:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_address_$", - "typeString": "tuple(address,address)" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_address_$", - "typeString": "tuple(address,address)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "936:88:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 742, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 738, - "name": "token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 723, - "src": "1042:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 740, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1060:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 739, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1052:7:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 741, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1052:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "1042:20:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "445873776170466163746f72793a205a45524f5f41444452455353", - "id": 743, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1064:29:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_493420e2bff339e25055d7fb868796946f98638593a7338a1bca2623cfd24eea", - "typeString": "literal_string \"DXswapFactory: ZERO_ADDRESS\"" - }, - "value": "DXswapFactory: ZERO_ADDRESS" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_493420e2bff339e25055d7fb868796946f98638593a7338a1bca2623cfd24eea", - "typeString": "literal_string \"DXswapFactory: ZERO_ADDRESS\"" - } - ], - "id": 737, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "1034:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 744, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1034:60:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 745, - "nodeType": "ExpressionStatement", - "src": "1034:60:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 755, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 747, - "name": "getPair", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 674, - "src": "1112:7:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$", - "typeString": "mapping(address => mapping(address => address))" - } - }, - "id": 749, - "indexExpression": { - "argumentTypes": null, - "id": 748, - "name": "token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 723, - "src": "1120:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1112:15:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 751, - "indexExpression": { - "argumentTypes": null, - "id": 750, - "name": "token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 725, - "src": "1128:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1112:23:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 753, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1147:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 752, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1139:7:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 754, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1139:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "1112:37:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "445873776170466163746f72793a20504149525f455849535453", - "id": 756, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1151:28:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_022c06255a8f788e655247b585d4def08b8f1e84aafea832f94feacd7b3abd92", - "typeString": "literal_string \"DXswapFactory: PAIR_EXISTS\"" - }, - "value": "DXswapFactory: PAIR_EXISTS" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_022c06255a8f788e655247b585d4def08b8f1e84aafea832f94feacd7b3abd92", - "typeString": "literal_string \"DXswapFactory: PAIR_EXISTS\"" - } - ], - "id": 746, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "1104:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 757, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1104:76:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 758, - "nodeType": "ExpressionStatement", - "src": "1104:76:2" - }, - { - "assignments": [ - 760 - ], - "declarations": [ - { - "constant": false, - "id": 760, - "name": "bytecode", - "nodeType": "VariableDeclaration", - "scope": 815, - "src": "1220:21:2", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 759, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1220:5:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 765, - "initialValue": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 762, - "name": "DXswapPair", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2624, - "src": "1249:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_DXswapPair_$2624_$", - "typeString": "type(contract DXswapPair)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_contract$_DXswapPair_$2624_$", - "typeString": "type(contract DXswapPair)" - } - ], - "id": 761, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3843, - "src": "1244:4:2", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 763, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1244:16:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_contract$_DXswapPair_$2624", - "typeString": "type(contract DXswapPair)" - } - }, - "id": 764, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "creationCode", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1244:29:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1220:53:2" - }, - { - "assignments": [ - 767 - ], - "declarations": [ - { - "constant": false, - "id": 767, - "name": "salt", - "nodeType": "VariableDeclaration", - "scope": 815, - "src": "1283:12:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 766, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1283:7:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 775, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 771, - "name": "token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 723, - "src": "1325:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 772, - "name": "token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 725, - "src": "1333:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 769, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3817, - "src": "1308:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 770, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1308:16:2", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 773, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1308:32:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 768, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3824, - "src": "1298:9:2", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 774, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1298:43:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1283:58:2" - }, - { - "externalReferences": [ - { - "pair": { - "declaration": 713, - "isOffset": false, - "isSlot": false, - "src": "1374:4:2", - "valueSize": 1 - } - }, - { - "bytecode": { - "declaration": 760, - "isOffset": false, - "isSlot": false, - "src": "1418:8:2", - "valueSize": 1 - } - }, - { - "bytecode": { - "declaration": 760, - "isOffset": false, - "isSlot": false, - "src": "1397:8:2", - "valueSize": 1 - } - }, - { - "salt": { - "declaration": 767, - "isOffset": false, - "isSlot": false, - "src": "1429:4:2", - "valueSize": 1 - } - } - ], - "id": 776, - "nodeType": "InlineAssembly", - "operations": "{\n pair := create2(0, add(bytecode, 32), mload(bytecode), salt)\n}", - "src": "1351:93:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 781, - "name": "token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 723, - "src": "1482:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 782, - "name": "token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 725, - "src": "1490:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 778, - "name": "pair", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 713, - "src": "1465:4:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 777, - "name": "IDXswapPair", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3093, - "src": "1453:11:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IDXswapPair_$3093_$", - "typeString": "type(contract IDXswapPair)" - } - }, - "id": 779, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1453:17:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapPair_$3093", - "typeString": "contract IDXswapPair" - } - }, - "id": 780, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "initialize", - "nodeType": "MemberAccess", - "referencedDeclaration": 3087, - "src": "1453:28:2", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address) external" - } - }, - "id": 783, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1453:44:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 784, - "nodeType": "ExpressionStatement", - "src": "1453:44:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 791, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 785, - "name": "getPair", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 674, - "src": "1507:7:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$", - "typeString": "mapping(address => mapping(address => address))" - } - }, - "id": 788, - "indexExpression": { - "argumentTypes": null, - "id": 786, - "name": "token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 723, - "src": "1515:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1507:15:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 789, - "indexExpression": { - "argumentTypes": null, - "id": 787, - "name": "token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 725, - "src": "1523:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1507:23:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 790, - "name": "pair", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 713, - "src": "1533:4:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1507:30:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 792, - "nodeType": "ExpressionStatement", - "src": "1507:30:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 799, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 793, - "name": "getPair", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 674, - "src": "1547:7:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$", - "typeString": "mapping(address => mapping(address => address))" - } - }, - "id": 796, - "indexExpression": { - "argumentTypes": null, - "id": 794, - "name": "token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 725, - "src": "1555:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1547:15:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 797, - "indexExpression": { - "argumentTypes": null, - "id": 795, - "name": "token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 723, - "src": "1563:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1547:23:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 798, - "name": "pair", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 713, - "src": "1573:4:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1547:30:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 800, - "nodeType": "ExpressionStatement", - "src": "1547:30:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 804, - "name": "pair", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 713, - "src": "1646:4:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 801, - "name": "allPairs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 677, - "src": "1632:8:2", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 803, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "push", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1632:13:2", - "typeDescriptions": { - "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) returns (uint256)" - } - }, - "id": 805, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1632:19:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 806, - "nodeType": "ExpressionStatement", - "src": "1632:19:2" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 808, - "name": "token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 723, - "src": "1678:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 809, - "name": "token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 725, - "src": "1686:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 810, - "name": "pair", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 713, - "src": "1694:4:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 811, - "name": "allPairs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 677, - "src": "1700:8:2", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 812, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1700:15:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 807, - "name": "PairCreated", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 687 - ], - "referencedDeclaration": 687, - "src": "1666:11:2", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,address,uint256)" - } - }, - "id": 813, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1666:50:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 814, - "nodeType": "EmitStatement", - "src": "1661:55:2" - } - ] - }, - "documentation": null, - "id": 816, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "createPair", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 711, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 708, - "name": "tokenA", - "nodeType": "VariableDeclaration", - "scope": 816, - "src": "789:14:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 707, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "789:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 710, - "name": "tokenB", - "nodeType": "VariableDeclaration", - "scope": 816, - "src": "805:14:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 709, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "805:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "788:32:2" - }, - "returnParameters": { - "id": 714, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 713, - "name": "pair", - "nodeType": "VariableDeclaration", - "scope": 816, - "src": "839:12:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 712, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "839:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "838:14:2" - }, - "scope": 901, - "src": "769:954:2", - "stateMutability": "nonpayable", - "superFunction": 2818, - "visibility": "external" - }, - { - "body": { - "id": 833, - "nodeType": "Block", - "src": "1772:103:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 825, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 822, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "1790:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 823, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1790:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 824, - "name": "feeToSetter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 654, - "src": "1804:11:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1790:25:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "445873776170466163746f72793a20464f5242494444454e", - "id": 826, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1817:26:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_717ccaa0cf96ff351721707fe290d0eeb6a5c76b10c19d2e4db54b6ae766cbdc", - "typeString": "literal_string \"DXswapFactory: FORBIDDEN\"" - }, - "value": "DXswapFactory: FORBIDDEN" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_717ccaa0cf96ff351721707fe290d0eeb6a5c76b10c19d2e4db54b6ae766cbdc", - "typeString": "literal_string \"DXswapFactory: FORBIDDEN\"" - } - ], - "id": 821, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "1782:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 827, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1782:62:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 828, - "nodeType": "ExpressionStatement", - "src": "1782:62:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 831, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 829, - "name": "feeTo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 652, - "src": "1854:5:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 830, - "name": "_feeTo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 818, - "src": "1862:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1854:14:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 832, - "nodeType": "ExpressionStatement", - "src": "1854:14:2" - } - ] - }, - "documentation": null, - "id": 834, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "setFeeTo", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 819, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 818, - "name": "_feeTo", - "nodeType": "VariableDeclaration", - "scope": 834, - "src": "1747:14:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 817, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1747:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1746:16:2" - }, - "returnParameters": { - "id": 820, - "nodeType": "ParameterList", - "parameters": [], - "src": "1772:0:2" - }, - "scope": 901, - "src": "1729:146:2", - "stateMutability": "nonpayable", - "superFunction": 2823, - "visibility": "external" - }, - { - "body": { - "id": 851, - "nodeType": "Block", - "src": "1936:115:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 843, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 840, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "1954:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 841, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1954:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 842, - "name": "feeToSetter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 654, - "src": "1968:11:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1954:25:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "445873776170466163746f72793a20464f5242494444454e", - "id": 844, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1981:26:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_717ccaa0cf96ff351721707fe290d0eeb6a5c76b10c19d2e4db54b6ae766cbdc", - "typeString": "literal_string \"DXswapFactory: FORBIDDEN\"" - }, - "value": "DXswapFactory: FORBIDDEN" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_717ccaa0cf96ff351721707fe290d0eeb6a5c76b10c19d2e4db54b6ae766cbdc", - "typeString": "literal_string \"DXswapFactory: FORBIDDEN\"" - } - ], - "id": 839, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "1946:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 845, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1946:62:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 846, - "nodeType": "ExpressionStatement", - "src": "1946:62:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 849, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 847, - "name": "feeToSetter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 654, - "src": "2018:11:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 848, - "name": "_feeToSetter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 836, - "src": "2032:12:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2018:26:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 850, - "nodeType": "ExpressionStatement", - "src": "2018:26:2" - } - ] - }, - "documentation": null, - "id": 852, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "setFeeToSetter", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 837, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 836, - "name": "_feeToSetter", - "nodeType": "VariableDeclaration", - "scope": 852, - "src": "1905:20:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 835, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1905:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1904:22:2" - }, - "returnParameters": { - "id": 838, - "nodeType": "ParameterList", - "parameters": [], - "src": "1936:0:2" - }, - "scope": 901, - "src": "1881:170:2", - "stateMutability": "nonpayable", - "superFunction": 2828, - "visibility": "external" - }, - { - "body": { - "id": 876, - "nodeType": "Block", - "src": "2125:215:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 861, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 858, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "2143:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 859, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2143:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 860, - "name": "feeToSetter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 654, - "src": "2157:11:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2143:25:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "445873776170466163746f72793a20464f5242494444454e", - "id": 862, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2170:26:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_717ccaa0cf96ff351721707fe290d0eeb6a5c76b10c19d2e4db54b6ae766cbdc", - "typeString": "literal_string \"DXswapFactory: FORBIDDEN\"" - }, - "value": "DXswapFactory: FORBIDDEN" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_717ccaa0cf96ff351721707fe290d0eeb6a5c76b10c19d2e4db54b6ae766cbdc", - "typeString": "literal_string \"DXswapFactory: FORBIDDEN\"" - } - ], - "id": 857, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "2135:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 863, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2135:62:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 864, - "nodeType": "ExpressionStatement", - "src": "2135:62:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 868, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 866, - "name": "_protocolFeeDenominator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 854, - "src": "2215:23:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 867, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2241:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "2215:27:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "445873776170466163746f72793a20464f5242494444454e5f464545", - "id": 869, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2244:30:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_d237eed8c0391d29a2092c13cefce55bd5524dd63c6f05e53b8453f4ee6013b4", - "typeString": "literal_string \"DXswapFactory: FORBIDDEN_FEE\"" - }, - "value": "DXswapFactory: FORBIDDEN_FEE" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_d237eed8c0391d29a2092c13cefce55bd5524dd63c6f05e53b8453f4ee6013b4", - "typeString": "literal_string \"DXswapFactory: FORBIDDEN_FEE\"" - } - ], - "id": 865, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "2207:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 870, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2207:68:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 871, - "nodeType": "ExpressionStatement", - "src": "2207:68:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 874, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 872, - "name": "protocolFeeDenominator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 657, - "src": "2285:22:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 873, - "name": "_protocolFeeDenominator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 854, - "src": "2310:23:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "2285:48:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 875, - "nodeType": "ExpressionStatement", - "src": "2285:48:2" - } - ] - }, - "documentation": null, - "id": 877, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "setProtocolFee", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 855, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 854, - "name": "_protocolFeeDenominator", - "nodeType": "VariableDeclaration", - "scope": 877, - "src": "2085:29:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 853, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "2085:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2084:31:2" - }, - "returnParameters": { - "id": 856, - "nodeType": "ParameterList", - "parameters": [], - "src": "2125:0:2" - }, - "scope": 901, - "src": "2061:279:2", - "stateMutability": "nonpayable", - "superFunction": 2833, - "visibility": "external" - }, - { - "body": { - "id": 899, - "nodeType": "Block", - "src": "2411:128:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 888, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 885, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "2429:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 886, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2429:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 887, - "name": "feeToSetter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 654, - "src": "2443:11:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2429:25:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "445873776170466163746f72793a20464f5242494444454e", - "id": 889, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2456:26:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_717ccaa0cf96ff351721707fe290d0eeb6a5c76b10c19d2e4db54b6ae766cbdc", - "typeString": "literal_string \"DXswapFactory: FORBIDDEN\"" - }, - "value": "DXswapFactory: FORBIDDEN" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_717ccaa0cf96ff351721707fe290d0eeb6a5c76b10c19d2e4db54b6ae766cbdc", - "typeString": "literal_string \"DXswapFactory: FORBIDDEN\"" - } - ], - "id": 884, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "2421:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 890, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2421:62:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 891, - "nodeType": "ExpressionStatement", - "src": "2421:62:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 896, - "name": "_swapFee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 881, - "src": "2523:8:2", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 893, - "name": "_pair", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 879, - "src": "2505:5:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 892, - "name": "IDXswapPair", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3093, - "src": "2493:11:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IDXswapPair_$3093_$", - "typeString": "type(contract IDXswapPair)" - } - }, - "id": 894, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2493:18:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapPair_$3093", - "typeString": "contract IDXswapPair" - } - }, - "id": 895, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "setSwapFee", - "nodeType": "MemberAccess", - "referencedDeclaration": 3092, - "src": "2493:29:2", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint32_$returns$__$", - "typeString": "function (uint32) external" - } - }, - "id": 897, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2493:39:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 898, - "nodeType": "ExpressionStatement", - "src": "2493:39:2" - } - ] - }, - "documentation": null, - "id": 900, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "setSwapFee", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 882, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 879, - "name": "_pair", - "nodeType": "VariableDeclaration", - "scope": 900, - "src": "2370:13:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 878, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2370:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 881, - "name": "_swapFee", - "nodeType": "VariableDeclaration", - "scope": 900, - "src": "2385:15:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 880, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2385:6:2", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2369:32:2" - }, - "returnParameters": { - "id": 883, - "nodeType": "ParameterList", - "parameters": [], - "src": "2411:0:2" - }, - "scope": 901, - "src": "2350:189:2", - "stateMutability": "nonpayable", - "superFunction": 2840, - "visibility": "external" - } - ], - "scope": 902, - "src": "96:2445:2" - } - ], - "src": "0:2542:2" - } - }, - "contracts/DXswapFeeReceiver.sol": { - "id": 3, - "AST": { - "absolutePath": "contracts/DXswapFeeReceiver.sol", - "exportedSymbols": { - "DXswapFeeReceiver": [ - 1384 - ] - }, - "id": 1385, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 903, - "literals": [ - "solidity", - "=", - "0.5", - ".16" - ], - "nodeType": "PragmaDirective", - "src": "0:24:3" - }, - { - "absolutePath": "contracts/interfaces/IDXswapFactory.sol", - "file": "./interfaces/IDXswapFactory.sol", - "id": 904, - "nodeType": "ImportDirective", - "scope": 1385, - "sourceUnit": 2842, - "src": "26:41:3", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "contracts/interfaces/IDXswapPair.sol", - "file": "./interfaces/IDXswapPair.sol", - "id": 905, - "nodeType": "ImportDirective", - "scope": 1385, - "sourceUnit": 3094, - "src": "68:38:3", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "contracts/interfaces/IWETH.sol", - "file": "./interfaces/IWETH.sol", - "id": 906, - "nodeType": "ImportDirective", - "scope": 1385, - "sourceUnit": 3205, - "src": "107:32:3", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "contracts/libraries/TransferHelper.sol", - "file": "./libraries/TransferHelper.sol", - "id": 907, - "nodeType": "ImportDirective", - "scope": 1385, - "sourceUnit": 3514, - "src": "140:40:3", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "contracts/libraries/SafeMath.sol", - "file": "./libraries/SafeMath.sol", - "id": 908, - "nodeType": "ImportDirective", - "scope": 1385, - "sourceUnit": 3356, - "src": "181:34:3", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 1384, - "linearizedBaseContracts": [ - 1384 - ], - "name": "DXswapFeeReceiver", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 911, - "libraryName": { - "contractScope": null, - "id": 909, - "name": "SafeMath", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 3355, - "src": "257:8:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeMath_$3355", - "typeString": "library SafeMath" - } - }, - "nodeType": "UsingForDirective", - "src": "251:24:3", - "typeName": { - "id": 910, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "270:4:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - { - "constant": false, - "id": 913, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 1384, - "src": "281:20:3", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 912, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "281:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 915, - "name": "factory", - "nodeType": "VariableDeclaration", - "scope": 1384, - "src": "307:29:3", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapFactory_$2841", - "typeString": "contract IDXswapFactory" - }, - "typeName": { - "contractScope": null, - "id": 914, - "name": "IDXswapFactory", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2841, - "src": "307:14:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapFactory_$2841", - "typeString": "contract IDXswapFactory" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 917, - "name": "WETH", - "nodeType": "VariableDeclaration", - "scope": 1384, - "src": "342:19:3", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 916, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "342:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 919, - "name": "ethReceiver", - "nodeType": "VariableDeclaration", - "scope": 1384, - "src": "367:26:3", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 918, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "367:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 921, - "name": "fallbackReceiver", - "nodeType": "VariableDeclaration", - "scope": 1384, - "src": "399:31:3", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 920, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "399:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "public" - }, - { - "body": { - "id": 956, - "nodeType": "Block", - "src": "568:179:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 936, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 934, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 913, - "src": "578:5:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 935, - "name": "_owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 923, - "src": "586:6:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "578:14:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 937, - "nodeType": "ExpressionStatement", - "src": "578:14:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 942, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 938, - "name": "factory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 915, - "src": "602:7:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapFactory_$2841", - "typeString": "contract IDXswapFactory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 940, - "name": "_factory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 925, - "src": "627:8:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 939, - "name": "IDXswapFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2841, - "src": "612:14:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IDXswapFactory_$2841_$", - "typeString": "type(contract IDXswapFactory)" - } - }, - "id": 941, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "612:24:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapFactory_$2841", - "typeString": "contract IDXswapFactory" - } - }, - "src": "602:34:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapFactory_$2841", - "typeString": "contract IDXswapFactory" - } - }, - "id": 943, - "nodeType": "ExpressionStatement", - "src": "602:34:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 946, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 944, - "name": "WETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 917, - "src": "646:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 945, - "name": "_WETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 927, - "src": "653:5:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "646:12:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 947, - "nodeType": "ExpressionStatement", - "src": "646:12:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 950, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 948, - "name": "ethReceiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 919, - "src": "668:11:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 949, - "name": "_ethReceiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 929, - "src": "682:12:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "668:26:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 951, - "nodeType": "ExpressionStatement", - "src": "668:26:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 954, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 952, - "name": "fallbackReceiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 921, - "src": "704:16:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 953, - "name": "_fallbackReceiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 931, - "src": "723:17:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "704:36:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 955, - "nodeType": "ExpressionStatement", - "src": "704:36:3" - } - ] - }, - "documentation": null, - "id": 957, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 932, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 923, - "name": "_owner", - "nodeType": "VariableDeclaration", - "scope": 957, - "src": "458:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 922, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "458:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 925, - "name": "_factory", - "nodeType": "VariableDeclaration", - "scope": 957, - "src": "474:16:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 924, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "474:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 927, - "name": "_WETH", - "nodeType": "VariableDeclaration", - "scope": 957, - "src": "492:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 926, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "492:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 929, - "name": "_ethReceiver", - "nodeType": "VariableDeclaration", - "scope": 957, - "src": "507:20:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 928, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "507:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 931, - "name": "_fallbackReceiver", - "nodeType": "VariableDeclaration", - "scope": 957, - "src": "529:25:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 930, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "529:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "448:112:3" - }, - "returnParameters": { - "id": 933, - "nodeType": "ParameterList", - "parameters": [], - "src": "568:0:3" - }, - "scope": 1384, - "src": "437:310:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 960, - "nodeType": "Block", - "src": "785:2:3", - "statements": [] - }, - "documentation": null, - "id": 961, - "implemented": true, - "kind": "fallback", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 958, - "nodeType": "ParameterList", - "parameters": [], - "src": "765:2:3" - }, - "returnParameters": { - "id": 959, - "nodeType": "ParameterList", - "parameters": [], - "src": "785:0:3" - }, - "scope": 1384, - "src": "757:30:3", - "stateMutability": "payable", - "superFunction": null, - "visibility": "external" - }, - { - "body": { - "id": 978, - "nodeType": "Block", - "src": "847:103:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 970, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 967, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "865:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 968, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "865:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 969, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 913, - "src": "879:5:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "865:19:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "44587377617046656552656365697665723a20464f5242494444454e", - "id": 971, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "886:30:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_ba864a2e7a61dc940a3fa54fa98e512e5f33cab407d16ddee0babb01ed419175", - "typeString": "literal_string \"DXswapFeeReceiver: FORBIDDEN\"" - }, - "value": "DXswapFeeReceiver: FORBIDDEN" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_ba864a2e7a61dc940a3fa54fa98e512e5f33cab407d16ddee0babb01ed419175", - "typeString": "literal_string \"DXswapFeeReceiver: FORBIDDEN\"" - } - ], - "id": 966, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "857:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 972, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "857:60:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 973, - "nodeType": "ExpressionStatement", - "src": "857:60:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 976, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 974, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 913, - "src": "927:5:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 975, - "name": "newOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 963, - "src": "935:8:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "927:16:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 977, - "nodeType": "ExpressionStatement", - "src": "927:16:3" - } - ] - }, - "documentation": null, - "id": 979, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "transferOwnership", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 964, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 963, - "name": "newOwner", - "nodeType": "VariableDeclaration", - "scope": 979, - "src": "820:16:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 962, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "820:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "819:18:3" - }, - "returnParameters": { - "id": 965, - "nodeType": "ParameterList", - "parameters": [], - "src": "847:0:3" - }, - "scope": 1384, - "src": "793:157:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": { - "id": 1002, - "nodeType": "Block", - "src": "1043:159:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 990, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 987, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "1061:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 988, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1061:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 989, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 913, - "src": "1075:5:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1061:19:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "44587377617046656552656365697665723a20464f5242494444454e", - "id": 991, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1082:30:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_ba864a2e7a61dc940a3fa54fa98e512e5f33cab407d16ddee0babb01ed419175", - "typeString": "literal_string \"DXswapFeeReceiver: FORBIDDEN\"" - }, - "value": "DXswapFeeReceiver: FORBIDDEN" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_ba864a2e7a61dc940a3fa54fa98e512e5f33cab407d16ddee0babb01ed419175", - "typeString": "literal_string \"DXswapFeeReceiver: FORBIDDEN\"" - } - ], - "id": 986, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "1053:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 992, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1053:60:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 993, - "nodeType": "ExpressionStatement", - "src": "1053:60:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 996, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 994, - "name": "ethReceiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 919, - "src": "1123:11:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 995, - "name": "_ethReceiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 981, - "src": "1137:12:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1123:26:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 997, - "nodeType": "ExpressionStatement", - "src": "1123:26:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1000, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 998, - "name": "fallbackReceiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 921, - "src": "1159:16:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 999, - "name": "_fallbackReceiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 983, - "src": "1178:17:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1159:36:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1001, - "nodeType": "ExpressionStatement", - "src": "1159:36:3" - } - ] - }, - "documentation": null, - "id": 1003, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "changeReceivers", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 984, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 981, - "name": "_ethReceiver", - "nodeType": "VariableDeclaration", - "scope": 1003, - "src": "985:20:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 980, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "985:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 983, - "name": "_fallbackReceiver", - "nodeType": "VariableDeclaration", - "scope": 1003, - "src": "1007:25:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 982, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1007:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "984:49:3" - }, - "returnParameters": { - "id": 985, - "nodeType": "ParameterList", - "parameters": [], - "src": "1043:0:3" - }, - "scope": 1384, - "src": "960:242:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": { - "id": 1045, - "nodeType": "Block", - "src": "1419:240:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1017, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1015, - "name": "tokenA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1005, - "src": "1437:6:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "id": 1016, - "name": "tokenB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1007, - "src": "1447:6:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1437:16:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "44587377617046656552656365697665723a204944454e544943414c5f414444524553534553", - "id": 1018, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1455:40:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_9f0f299bbfd1c0818d4d606c6d4975854bcf28a6e2de0977a3244a26a9de3328", - "typeString": "literal_string \"DXswapFeeReceiver: IDENTICAL_ADDRESSES\"" - }, - "value": "DXswapFeeReceiver: IDENTICAL_ADDRESSES" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_9f0f299bbfd1c0818d4d606c6d4975854bcf28a6e2de0977a3244a26a9de3328", - "typeString": "literal_string \"DXswapFeeReceiver: IDENTICAL_ADDRESSES\"" - } - ], - "id": 1014, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "1429:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 1019, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1429:67:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1020, - "nodeType": "ExpressionStatement", - "src": "1429:67:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1034, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "id": 1021, - "name": "token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1010, - "src": "1507:6:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1022, - "name": "token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1012, - "src": "1515:6:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 1023, - "isConstant": false, - "isInlineArray": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "TupleExpression", - "src": "1506:16:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_address_$", - "typeString": "tuple(address,address)" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1026, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1024, - "name": "tokenA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1005, - "src": "1525:6:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 1025, - "name": "tokenB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1007, - "src": "1534:6:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1525:15:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "id": 1030, - "name": "tokenB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1007, - "src": "1563:6:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1031, - "name": "tokenA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1005, - "src": "1571:6:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 1032, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1562:16:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_address_$", - "typeString": "tuple(address,address)" - } - }, - "id": 1033, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "1525:53:3", - "trueExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "id": 1027, - "name": "tokenA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1005, - "src": "1544:6:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1028, - "name": "tokenB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1007, - "src": "1552:6:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 1029, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1543:16:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_address_$", - "typeString": "tuple(address,address)" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_address_$", - "typeString": "tuple(address,address)" - } - }, - "src": "1506:72:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1035, - "nodeType": "ExpressionStatement", - "src": "1506:72:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1041, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1037, - "name": "token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1010, - "src": "1596:6:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1039, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1614:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1038, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1606:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1040, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1606:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "1596:20:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "44587377617046656552656365697665723a205a45524f5f41444452455353", - "id": 1042, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1618:33:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_135829e357e78b017bd14210661a5e2d0f1fc170c3d16f1be99123e01a02ada0", - "typeString": "literal_string \"DXswapFeeReceiver: ZERO_ADDRESS\"" - }, - "value": "DXswapFeeReceiver: ZERO_ADDRESS" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_135829e357e78b017bd14210661a5e2d0f1fc170c3d16f1be99123e01a02ada0", - "typeString": "literal_string \"DXswapFeeReceiver: ZERO_ADDRESS\"" - } - ], - "id": 1036, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "1588:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 1043, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1588:64:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1044, - "nodeType": "ExpressionStatement", - "src": "1588:64:3" - } - ] - }, - "documentation": null, - "id": 1046, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "sortTokens", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1008, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1005, - "name": "tokenA", - "nodeType": "VariableDeclaration", - "scope": 1046, - "src": "1332:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1004, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1332:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1007, - "name": "tokenB", - "nodeType": "VariableDeclaration", - "scope": 1046, - "src": "1348:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1006, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1348:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1331:32:3" - }, - "returnParameters": { - "id": 1013, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1010, - "name": "token0", - "nodeType": "VariableDeclaration", - "scope": 1046, - "src": "1387:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1009, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1387:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1012, - "name": "token1", - "nodeType": "VariableDeclaration", - "scope": 1046, - "src": "1403:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1011, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1403:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1386:32:3" - }, - "scope": 1384, - "src": "1312:347:3", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1061, - "nodeType": "Block", - "src": "1878:98:3", - "statements": [ - { - "assignments": [ - 1054 - ], - "declarations": [ - { - "constant": false, - "id": 1054, - "name": "size", - "nodeType": "VariableDeclaration", - "scope": 1061, - "src": "1888:9:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1053, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1888:4:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1055, - "initialValue": null, - "nodeType": "VariableDeclarationStatement", - "src": "1888:9:3" - }, - { - "externalReferences": [ - { - "size": { - "declaration": 1054, - "isOffset": false, - "isSlot": false, - "src": "1918:4:3", - "valueSize": 1 - } - }, - { - "addr": { - "declaration": 1048, - "isOffset": false, - "isSlot": false, - "src": "1938:4:3", - "valueSize": 1 - } - } - ], - "id": 1056, - "nodeType": "InlineAssembly", - "operations": "{ size := extcodesize(addr) }", - "src": "1907:38:3" - }, - { - "expression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1059, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1057, - "name": "size", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1054, - "src": "1961:4:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1058, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1968:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1961:8:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 1052, - "id": 1060, - "nodeType": "Return", - "src": "1954:15:3" - } - ] - }, - "documentation": null, - "id": 1062, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isContract", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1049, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1048, - "name": "addr", - "nodeType": "VariableDeclaration", - "scope": 1062, - "src": "1840:12:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1047, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1840:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1839:14:3" - }, - "returnParameters": { - "id": 1052, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1051, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1062, - "src": "1872:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1050, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1872:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1871:6:3" - }, - "scope": 1384, - "src": "1820:156:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1102, - "nodeType": "Block", - "src": "2214:347:3", - "statements": [ - { - "assignments": [ - 1072, - 1074 - ], - "declarations": [ - { - "constant": false, - "id": 1072, - "name": "token0", - "nodeType": "VariableDeclaration", - "scope": 1102, - "src": "2225:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1071, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2225:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1074, - "name": "token1", - "nodeType": "VariableDeclaration", - "scope": 1102, - "src": "2241:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1073, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2241:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1079, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1076, - "name": "tokenA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1064, - "src": "2270:6:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1077, - "name": "tokenB", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1066, - "src": "2278:6:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1075, - "name": "sortTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1046, - "src": "2259:10:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_address_$_t_address_$", - "typeString": "function (address,address) pure returns (address,address)" - } - }, - "id": 1078, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2259:26:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_address_$", - "typeString": "tuple(address,address)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2224:61:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1100, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1080, - "name": "pair", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1069, - "src": "2295:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "ff", - "id": 1086, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2355:7:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9", - "typeString": "literal_string (contains invalid UTF-8 sequence at position 0)" - }, - "value": null - }, - { - "argumentTypes": null, - "id": 1087, - "name": "factory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 915, - "src": "2376:7:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapFactory_$2841", - "typeString": "contract IDXswapFactory" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1091, - "name": "token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1072, - "src": "2424:6:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1092, - "name": "token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1074, - "src": "2432:6:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 1089, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3817, - "src": "2407:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 1090, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2407:16:3", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 1093, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2407:32:3", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 1088, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3824, - "src": "2397:9:3", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 1094, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2397:43:3", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "argumentTypes": null, - "hexValue": "d306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776", - "id": 1095, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2454:69:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_a4999fc8faf24b4f89ea6230a8d374f8a84ec258cd79036b033288c7791cdbc0", - "typeString": "literal_string (contains invalid UTF-8 sequence at position 2)" - }, - "value": null - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9", - "typeString": "literal_string (contains invalid UTF-8 sequence at position 0)" - }, - { - "typeIdentifier": "t_contract$_IDXswapFactory_$2841", - "typeString": "contract IDXswapFactory" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_stringliteral_a4999fc8faf24b4f89ea6230a8d374f8a84ec258cd79036b033288c7791cdbc0", - "typeString": "literal_string (contains invalid UTF-8 sequence at position 2)" - } - ], - "expression": { - "argumentTypes": null, - "id": 1084, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3817, - "src": "2325:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 1085, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2325:16:3", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 1096, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2325:226:3", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 1083, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3824, - "src": "2315:9:3", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 1097, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2315:237:3", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 1082, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2310:4:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint" - }, - "id": 1098, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2310:243:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1081, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2302:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1099, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2302:252:3", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "2295:259:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1101, - "nodeType": "ExpressionStatement", - "src": "2295:259:3" - } - ] - }, - "documentation": null, - "id": 1103, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "pairFor", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1067, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1064, - "name": "tokenA", - "nodeType": "VariableDeclaration", - "scope": 1103, - "src": "2145:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1063, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2145:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1066, - "name": "tokenB", - "nodeType": "VariableDeclaration", - "scope": 1103, - "src": "2161:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1065, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2161:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2144:32:3" - }, - "returnParameters": { - "id": 1070, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1069, - "name": "pair", - "nodeType": "VariableDeclaration", - "scope": 1103, - "src": "2200:12:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1068, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2200:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2199:14:3" - }, - "scope": 1384, - "src": "2128:433:3", - "stateMutability": "view", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1247, - "nodeType": "Block", - "src": "2742:1068:3", - "statements": [ - { - "assignments": [ - 1111 - ], - "declarations": [ - { - "constant": false, - "id": 1111, - "name": "pairToUse", - "nodeType": "VariableDeclaration", - "scope": 1247, - "src": "2752:21:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapPair_$3093", - "typeString": "contract IDXswapPair" - }, - "typeName": { - "contractScope": null, - "id": 1110, - "name": "IDXswapPair", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 3093, - "src": "2752:11:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapPair_$3093", - "typeString": "contract IDXswapPair" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1118, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1114, - "name": "fromToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1107, - "src": "2796:9:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1115, - "name": "WETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 917, - "src": "2807:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1113, - "name": "pairFor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1103, - "src": "2788:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_address_$", - "typeString": "function (address,address) view returns (address)" - } - }, - "id": 1116, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2788:24:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1112, - "name": "IDXswapPair", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3093, - "src": "2776:11:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IDXswapPair_$3093_$", - "typeString": "type(contract IDXswapPair)" - } - }, - "id": 1117, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2776:37:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapPair_$3093", - "typeString": "contract IDXswapPair" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2752:61:3" - }, - { - "assignments": [ - 1120, - 1122, - null - ], - "declarations": [ - { - "constant": false, - "id": 1120, - "name": "reserve0", - "nodeType": "VariableDeclaration", - "scope": 1247, - "src": "2833:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1119, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2833:4:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1122, - "name": "reserve1", - "nodeType": "VariableDeclaration", - "scope": 1247, - "src": "2848:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1121, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2848:4:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - null - ], - "id": 1126, - "initialValue": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "id": 1123, - "name": "pairToUse", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1111, - "src": "2866:9:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapPair_$3093", - "typeString": "contract IDXswapPair" - } - }, - "id": 1124, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "getReserves", - "nodeType": "MemberAccess", - "referencedDeclaration": 3025, - "src": "2866:21:3", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint112_$_t_uint112_$_t_uint32_$", - "typeString": "function () view external returns (uint112,uint112,uint32)" - } - }, - "id": 1125, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2866:23:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$_t_uint32_$", - "typeString": "tuple(uint112,uint112,uint32)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2832:57:3" - }, - { - "assignments": [ - 1128, - 1130 - ], - "declarations": [ - { - "constant": false, - "id": 1128, - "name": "reserveIn", - "nodeType": "VariableDeclaration", - "scope": 1247, - "src": "2900:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1127, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2900:4:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1130, - "name": "reserveOut", - "nodeType": "VariableDeclaration", - "scope": 1247, - "src": "2916:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1129, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2916:4:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1141, - "initialValue": { - "argumentTypes": null, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1133, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1131, - "name": "fromToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1107, - "src": "2935:9:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 1132, - "name": "WETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 917, - "src": "2947:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2935:16:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "id": 1137, - "name": "reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1122, - "src": "2978:8:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1138, - "name": "reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1120, - "src": "2988:8:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 1139, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "2977:20:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "id": 1140, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "2935:62:3", - "trueExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "id": 1134, - "name": "reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1120, - "src": "2955:8:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1135, - "name": "reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1122, - "src": "2965:8:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 1136, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "2954:20:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2899:98:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 1149, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1145, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1143, - "name": "reserveIn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1128, - "src": "3016:9:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1144, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3028:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "3016:13:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1148, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1146, - "name": "reserveOut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1130, - "src": "3033:10:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1147, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3046:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "3033:14:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "3016:31:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "44587377617046656552656365697665723a20494e53554646494349454e545f4c4951554944495459", - "id": 1150, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3049:43:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_59e590910af1fbda722dbcc3ac75d97889b20c586657573afdda2a45c2d5fded", - "typeString": "literal_string \"DXswapFeeReceiver: INSUFFICIENT_LIQUIDITY\"" - }, - "value": "DXswapFeeReceiver: INSUFFICIENT_LIQUIDITY" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_59e590910af1fbda722dbcc3ac75d97889b20c586657573afdda2a45c2d5fded", - "typeString": "literal_string \"DXswapFeeReceiver: INSUFFICIENT_LIQUIDITY\"" - } - ], - "id": 1142, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "3008:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 1151, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3008:85:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1152, - "nodeType": "ExpressionStatement", - "src": "3008:85:3" - }, - { - "assignments": [ - 1154 - ], - "declarations": [ - { - "constant": false, - "id": 1154, - "name": "amountInWithFee", - "nodeType": "VariableDeclaration", - "scope": 1247, - "src": "3103:20:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1153, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3103:4:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1166, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "id": 1161, - "name": "pairToUse", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1111, - "src": "3155:9:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapPair_$3093", - "typeString": "contract IDXswapPair" - } - }, - "id": 1162, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "swapFee", - "nodeType": "MemberAccess", - "referencedDeclaration": 3045, - "src": "3155:17:3", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint32_$", - "typeString": "function () view external returns (uint32)" - } - }, - "id": 1163, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3155:19:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "3130303030", - "id": 1158, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3144:5:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_10000_by_1", - "typeString": "int_const 10000" - }, - "value": "10000" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_10000_by_1", - "typeString": "int_const 10000" - } - ], - "id": 1157, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3139:4:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint" - }, - "id": 1159, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3139:11:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1160, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 3326, - "src": "3139:15:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1164, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3139:36:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1155, - "name": "amountIn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1105, - "src": "3126:8:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1156, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "mul", - "nodeType": "MemberAccess", - "referencedDeclaration": 3354, - "src": "3126:12:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1165, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3126:50:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3103:73:3" - }, - { - "assignments": [ - 1168 - ], - "declarations": [ - { - "constant": false, - "id": 1168, - "name": "numerator", - "nodeType": "VariableDeclaration", - "scope": 1247, - "src": "3186:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1167, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3186:4:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1173, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1171, - "name": "reserveOut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1130, - "src": "3223:10:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1169, - "name": "amountInWithFee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1154, - "src": "3203:15:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1170, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "mul", - "nodeType": "MemberAccess", - "referencedDeclaration": 3354, - "src": "3203:19:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1172, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3203:31:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3186:48:3" - }, - { - "assignments": [ - 1175 - ], - "declarations": [ - { - "constant": false, - "id": 1175, - "name": "denominator", - "nodeType": "VariableDeclaration", - "scope": 1247, - "src": "3244:16:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1174, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3244:4:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1183, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1181, - "name": "amountInWithFee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1154, - "src": "3288:15:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "3130303030", - "id": 1178, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3277:5:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_10000_by_1", - "typeString": "int_const 10000" - }, - "value": "10000" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_10000_by_1", - "typeString": "int_const 10000" - } - ], - "expression": { - "argumentTypes": null, - "id": 1176, - "name": "reserveIn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1128, - "src": "3263:9:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1177, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "mul", - "nodeType": "MemberAccess", - "referencedDeclaration": 3354, - "src": "3263:13:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1179, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3263:20:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1180, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 3304, - "src": "3263:24:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1182, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3263:41:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3244:60:3" - }, - { - "assignments": [ - 1185 - ], - "declarations": [ - { - "constant": false, - "id": 1185, - "name": "amountOut", - "nodeType": "VariableDeclaration", - "scope": 1247, - "src": "3314:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1184, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3314:4:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1189, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1188, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1186, - "name": "numerator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1168, - "src": "3331:9:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 1187, - "name": "denominator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1175, - "src": "3343:11:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3331:23:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3314:40:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1193, - "name": "fromToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1107, - "src": "3414:9:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1195, - "name": "pairToUse", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1111, - "src": "3433:9:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapPair_$3093", - "typeString": "contract IDXswapPair" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IDXswapPair_$3093", - "typeString": "contract IDXswapPair" - } - ], - "id": 1194, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3425:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1196, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3425:18:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1197, - "name": "amountIn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1105, - "src": "3445:8:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1190, - "name": "TransferHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3513, - "src": "3373:14:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_TransferHelper_$3513_$", - "typeString": "type(library TransferHelper)" - } - }, - "id": 1192, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 3441, - "src": "3373:27:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 1198, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3373:90:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1199, - "nodeType": "ExpressionStatement", - "src": "3373:90:3" - }, - { - "assignments": [ - 1201, - 1203 - ], - "declarations": [ - { - "constant": false, - "id": 1201, - "name": "amount0Out", - "nodeType": "VariableDeclaration", - "scope": 1247, - "src": "3483:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1200, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3483:4:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1203, - "name": "amount1Out", - "nodeType": "VariableDeclaration", - "scope": 1247, - "src": "3500:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1202, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3500:4:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1218, - "initialValue": { - "argumentTypes": null, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1206, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1204, - "name": "fromToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1107, - "src": "3519:9:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 1205, - "name": "WETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 917, - "src": "3531:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3519:16:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "id": 1212, - "name": "amountOut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1185, - "src": "3562:9:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1214, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3578:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1213, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3573:4:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint" - }, - "id": 1215, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3573:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 1216, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "3561:20:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "id": 1217, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "3519:62:3", - "trueExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1208, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3544:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1207, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3539:4:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint" - }, - "id": 1209, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3539:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1210, - "name": "amountOut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1185, - "src": "3548:9:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 1211, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "3538:20:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3482:99:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1222, - "name": "amount0Out", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1201, - "src": "3628:10:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1223, - "name": "amount1Out", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1203, - "src": "3640:10:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1225, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3872, - "src": "3660:4:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFeeReceiver_$1384", - "typeString": "contract DXswapFeeReceiver" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapFeeReceiver_$1384", - "typeString": "contract DXswapFeeReceiver" - } - ], - "id": 1224, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3652:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1226, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3652:13:3", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1229, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3677:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1228, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "3667:9:3", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$", - "typeString": "function (uint256) pure returns (bytes memory)" - }, - "typeName": { - "id": 1227, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3671:5:3", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - } - }, - "id": 1230, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3667:12:3", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_bytes_memory", - "typeString": "bytes memory" - } - ], - "expression": { - "argumentTypes": null, - "id": 1219, - "name": "pairToUse", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1111, - "src": "3600:9:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapPair_$3093", - "typeString": "contract IDXswapPair" - } - }, - "id": 1221, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "swap", - "nodeType": "MemberAccess", - "referencedDeclaration": 3072, - "src": "3600:14:3", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (uint256,uint256,address,bytes memory) external" - } - }, - "id": 1231, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3600:89:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1232, - "nodeType": "ExpressionStatement", - "src": "3600:89:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1237, - "name": "amountOut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1185, - "src": "3729:9:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1234, - "name": "WETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 917, - "src": "3714:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1233, - "name": "IWETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3204, - "src": "3708:5:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IWETH_$3204_$", - "typeString": "type(contract IWETH)" - } - }, - "id": 1235, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3708:11:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IWETH_$3204", - "typeString": "contract IWETH" - } - }, - "id": 1236, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "withdraw", - "nodeType": "MemberAccess", - "referencedDeclaration": 3196, - "src": "3708:20:3", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256) external" - } - }, - "id": 1238, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3708:31:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1239, - "nodeType": "ExpressionStatement", - "src": "3708:31:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1243, - "name": "ethReceiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 919, - "src": "3780:11:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1244, - "name": "amountOut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1185, - "src": "3793:9:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1240, - "name": "TransferHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3513, - "src": "3749:14:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_TransferHelper_$3513_$", - "typeString": "type(library TransferHelper)" - } - }, - "id": 1242, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "safeTransferETH", - "nodeType": "MemberAccess", - "referencedDeclaration": 3512, - "src": "3749:30:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 1245, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3749:54:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1246, - "nodeType": "ExpressionStatement", - "src": "3749:54:3" - } - ] - }, - "documentation": null, - "id": 1248, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_swapTokensForETH", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1108, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1105, - "name": "amountIn", - "nodeType": "VariableDeclaration", - "scope": 1248, - "src": "2687:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1104, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2687:4:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1107, - "name": "fromToken", - "nodeType": "VariableDeclaration", - "scope": 1248, - "src": "2702:17:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1106, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2702:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2686:34:3" - }, - "returnParameters": { - "id": 1109, - "nodeType": "ParameterList", - "parameters": [], - "src": "2742:0:3" - }, - "scope": 1384, - "src": "2660:1150:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1296, - "nodeType": "Block", - "src": "3989:600:3", - "statements": [ - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1257, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1255, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1250, - "src": "4001:5:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 1256, - "name": "WETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 917, - "src": "4010:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "4001:13:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1275, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1250, - "src": "4213:5:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1276, - "name": "WETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 917, - "src": "4220:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1274, - "name": "pairFor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1103, - "src": "4205:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_address_$", - "typeString": "function (address,address) view returns (address)" - } - }, - "id": 1277, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4205:20:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1273, - "name": "isContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1062, - "src": "4194:10:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_bool_$", - "typeString": "function (address) returns (bool)" - } - }, - "id": 1278, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4194:32:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 1293, - "nodeType": "Block", - "src": "4389:194:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1288, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1250, - "src": "4542:5:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1289, - "name": "fallbackReceiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 921, - "src": "4549:16:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1290, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1252, - "src": "4567:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1285, - "name": "TransferHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3513, - "src": "4514:14:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_TransferHelper_$3513_$", - "typeString": "type(library TransferHelper)" - } - }, - "id": 1287, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 3441, - "src": "4514:27:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 1291, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4514:60:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1292, - "nodeType": "ExpressionStatement", - "src": "4514:60:3" - } - ] - }, - "id": 1294, - "nodeType": "IfStatement", - "src": "4190:393:3", - "trueBody": { - "id": 1284, - "nodeType": "Block", - "src": "4228:155:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1280, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1252, - "src": "4360:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1281, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1250, - "src": "4368:5:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1279, - "name": "_swapTokensForETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1248, - "src": "4342:17:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", - "typeString": "function (uint256,address)" - } - }, - "id": 1282, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4342:32:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1283, - "nodeType": "ExpressionStatement", - "src": "4342:32:3" - } - ] - } - }, - "id": 1295, - "nodeType": "IfStatement", - "src": "3997:586:3", - "trueBody": { - "id": 1272, - "nodeType": "Block", - "src": "4016:168:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1262, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1252, - "src": "4107:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1259, - "name": "WETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 917, - "src": "4092:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1258, - "name": "IWETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3204, - "src": "4086:5:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IWETH_$3204_$", - "typeString": "type(contract IWETH)" - } - }, - "id": 1260, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4086:11:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IWETH_$3204", - "typeString": "contract IWETH" - } - }, - "id": 1261, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "withdraw", - "nodeType": "MemberAccess", - "referencedDeclaration": 3196, - "src": "4086:20:3", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256) external" - } - }, - "id": 1263, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4086:28:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1264, - "nodeType": "ExpressionStatement", - "src": "4086:28:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1268, - "name": "ethReceiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 919, - "src": "4155:11:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1269, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1252, - "src": "4168:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1265, - "name": "TransferHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3513, - "src": "4124:14:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_TransferHelper_$3513_$", - "typeString": "type(library TransferHelper)" - } - }, - "id": 1267, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "safeTransferETH", - "nodeType": "MemberAccess", - "referencedDeclaration": 3512, - "src": "4124:30:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 1270, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4124:51:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1271, - "nodeType": "ExpressionStatement", - "src": "4124:51:3" - } - ] - } - } - ] - }, - "documentation": null, - "id": 1297, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_takeETHorToken", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1253, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1250, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 1297, - "src": "3952:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1249, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3952:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1252, - "name": "amount", - "nodeType": "VariableDeclaration", - "scope": 1297, - "src": "3967:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1251, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3967:4:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3951:28:3" - }, - "returnParameters": { - "id": 1254, - "nodeType": "ParameterList", - "parameters": [], - "src": "3989:0:3" - }, - "scope": 1384, - "src": "3927:662:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1382, - "nodeType": "Block", - "src": "4739:479:3", - "statements": [ - { - "body": { - "id": 1380, - "nodeType": "Block", - "src": "4789:423:3", - "statements": [ - { - "assignments": [ - 1315 - ], - "declarations": [ - { - "constant": false, - "id": 1315, - "name": "token0", - "nodeType": "VariableDeclaration", - "scope": 1380, - "src": "4803:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1314, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4803:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1321, - "initialValue": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1316, - "name": "pairs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "4820:5:3", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_contract$_IDXswapPair_$3093_$dyn_calldata_ptr", - "typeString": "contract IDXswapPair[] calldata" - } - }, - "id": 1318, - "indexExpression": { - "argumentTypes": null, - "id": 1317, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1304, - "src": "4826:1:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4820:8:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapPair_$3093", - "typeString": "contract IDXswapPair" - } - }, - "id": 1319, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "token0", - "nodeType": "MemberAccess", - "referencedDeclaration": 3011, - "src": "4820:15:3", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 1320, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4820:17:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4803:34:3" - }, - { - "assignments": [ - 1323 - ], - "declarations": [ - { - "constant": false, - "id": 1323, - "name": "token1", - "nodeType": "VariableDeclaration", - "scope": 1380, - "src": "4851:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1322, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4851:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1329, - "initialValue": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1324, - "name": "pairs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "4868:5:3", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_contract$_IDXswapPair_$3093_$dyn_calldata_ptr", - "typeString": "contract IDXswapPair[] calldata" - } - }, - "id": 1326, - "indexExpression": { - "argumentTypes": null, - "id": 1325, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1304, - "src": "4874:1:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4868:8:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapPair_$3093", - "typeString": "contract IDXswapPair" - } - }, - "id": 1327, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "token1", - "nodeType": "MemberAccess", - "referencedDeclaration": 3016, - "src": "4868:15:3", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 1328, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4868:17:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4851:34:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1335, - "name": "pairs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "4925:5:3", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_contract$_IDXswapPair_$3093_$dyn_calldata_ptr", - "typeString": "contract IDXswapPair[] calldata" - } - }, - "id": 1337, - "indexExpression": { - "argumentTypes": null, - "id": 1336, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1304, - "src": "4931:1:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4925:8:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapPair_$3093", - "typeString": "contract IDXswapPair" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IDXswapPair_$3093", - "typeString": "contract IDXswapPair" - } - ], - "id": 1334, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4917:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1338, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4917:17:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1344, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3872, - "src": "4963:4:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFeeReceiver_$1384", - "typeString": "contract DXswapFeeReceiver" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapFeeReceiver_$1384", - "typeString": "contract DXswapFeeReceiver" - } - ], - "id": 1343, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4955:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1345, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4955:13:3", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1339, - "name": "pairs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "4936:5:3", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_contract$_IDXswapPair_$3093_$dyn_calldata_ptr", - "typeString": "contract IDXswapPair[] calldata" - } - }, - "id": 1341, - "indexExpression": { - "argumentTypes": null, - "id": 1340, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1304, - "src": "4942:1:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4936:8:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapPair_$3093", - "typeString": "contract IDXswapPair" - } - }, - "id": 1342, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 2886, - "src": "4936:18:3", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 1346, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4936:33:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1330, - "name": "pairs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "4899:5:3", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_contract$_IDXswapPair_$3093_$dyn_calldata_ptr", - "typeString": "contract IDXswapPair[] calldata" - } - }, - "id": 1332, - "indexExpression": { - "argumentTypes": null, - "id": 1331, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1304, - "src": "4905:1:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4899:8:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapPair_$3093", - "typeString": "contract IDXswapPair" - } - }, - "id": 1333, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 2913, - "src": "4899:17:3", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 1347, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4899:71:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1348, - "nodeType": "ExpressionStatement", - "src": "4899:71:3" - }, - { - "assignments": [ - 1350, - 1352 - ], - "declarations": [ - { - "constant": false, - "id": 1350, - "name": "amount0", - "nodeType": "VariableDeclaration", - "scope": 1380, - "src": "4985:12:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1349, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4985:4:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1352, - "name": "amount1", - "nodeType": "VariableDeclaration", - "scope": 1380, - "src": "4999:12:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1351, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4999:4:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1361, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1358, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3872, - "src": "5037:4:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapFeeReceiver_$1384", - "typeString": "contract DXswapFeeReceiver" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapFeeReceiver_$1384", - "typeString": "contract DXswapFeeReceiver" - } - ], - "id": 1357, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5029:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1359, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5029:13:3", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1353, - "name": "pairs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "5015:5:3", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_contract$_IDXswapPair_$3093_$dyn_calldata_ptr", - "typeString": "contract IDXswapPair[] calldata" - } - }, - "id": 1355, - "indexExpression": { - "argumentTypes": null, - "id": 1354, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1304, - "src": "5021:1:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5015:8:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapPair_$3093", - "typeString": "contract IDXswapPair" - } - }, - "id": 1356, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "burn", - "nodeType": "MemberAccess", - "referencedDeclaration": 3061, - "src": "5015:13:3", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_uint256_$_t_uint256_$", - "typeString": "function (address) external returns (uint256,uint256)" - } - }, - "id": 1360, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5015:28:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4984:59:3" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1364, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1362, - "name": "amount0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1350, - "src": "5061:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1363, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5071:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "5061:11:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 1370, - "nodeType": "IfStatement", - "src": "5057:65:3", - "trueBody": { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1366, - "name": "token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1315, - "src": "5106:6:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1367, - "name": "amount0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1350, - "src": "5114:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1365, - "name": "_takeETHorToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1297, - "src": "5090:15:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 1368, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5090:32:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1369, - "nodeType": "ExpressionStatement", - "src": "5090:32:3" - } - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1373, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1371, - "name": "amount1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1352, - "src": "5140:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1372, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5150:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "5140:11:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 1379, - "nodeType": "IfStatement", - "src": "5136:65:3", - "trueBody": { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1375, - "name": "token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1323, - "src": "5185:6:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1376, - "name": "amount1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1352, - "src": "5193:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1374, - "name": "_takeETHorToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1297, - "src": "5169:15:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 1377, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5169:32:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1378, - "nodeType": "ExpressionStatement", - "src": "5169:32:3" - } - } - ] - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1310, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1307, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1304, - "src": "4766:1:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1308, - "name": "pairs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "4770:5:3", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_contract$_IDXswapPair_$3093_$dyn_calldata_ptr", - "typeString": "contract IDXswapPair[] calldata" - } - }, - "id": 1309, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4770:12:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4766:16:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1381, - "initializationExpression": { - "assignments": [ - 1304 - ], - "declarations": [ - { - "constant": false, - "id": 1304, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 1381, - "src": "4754:6:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1303, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4754:4:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1306, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 1305, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4763:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "4754:10:3" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 1312, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "4784:3:3", - "subExpression": { - "argumentTypes": null, - "id": 1311, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1304, - "src": "4784:1:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1313, - "nodeType": "ExpressionStatement", - "src": "4784:3:3" - }, - "nodeType": "ForStatement", - "src": "4749:463:3" - } - ] - }, - "documentation": null, - "id": 1383, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "takeProtocolFee", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1301, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1300, - "name": "pairs", - "nodeType": "VariableDeclaration", - "scope": 1383, - "src": "4700:28:3", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_contract$_IDXswapPair_$3093_$dyn_calldata_ptr", - "typeString": "contract IDXswapPair[]" - }, - "typeName": { - "baseType": { - "contractScope": null, - "id": 1298, - "name": "IDXswapPair", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 3093, - "src": "4700:11:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapPair_$3093", - "typeString": "contract IDXswapPair" - } - }, - "id": 1299, - "length": null, - "nodeType": "ArrayTypeName", - "src": "4700:13:3", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_contract$_IDXswapPair_$3093_$dyn_storage_ptr", - "typeString": "contract IDXswapPair[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4699:30:3" - }, - "returnParameters": { - "id": 1302, - "nodeType": "ParameterList", - "parameters": [], - "src": "4739:0:3" - }, - "scope": 1384, - "src": "4675:543:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - } - ], - "scope": 1385, - "src": "218:5003:3" - } - ], - "src": "0:5222:3" - } - }, - "contracts/DXswapFeeSetter.sol": { - "id": 4, - "AST": { - "absolutePath": "contracts/DXswapFeeSetter.sol", - "exportedSymbols": { - "DXswapFeeSetter": [ - 1547 - ] - }, - "id": 1548, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1386, - "literals": [ - "solidity", - "=", - "0.5", - ".16" - ], - "nodeType": "PragmaDirective", - "src": "0:24:4" - }, - { - "absolutePath": "contracts/interfaces/IDXswapFactory.sol", - "file": "./interfaces/IDXswapFactory.sol", - "id": 1387, - "nodeType": "ImportDirective", - "scope": 1548, - "sourceUnit": 2842, - "src": "26:41:4", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 1547, - "linearizedBaseContracts": [ - 1547 - ], - "name": "DXswapFeeSetter", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 1389, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 1547, - "src": "100:20:4", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1388, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "100:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 1393, - "name": "pairOwners", - "nodeType": "VariableDeclaration", - "scope": 1547, - "src": "126:45:4", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - }, - "typeName": { - "id": 1392, - "keyType": { - "id": 1390, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "134:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "126:27:4", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - }, - "valueType": { - "id": 1391, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "145:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 1395, - "name": "factory", - "nodeType": "VariableDeclaration", - "scope": 1547, - "src": "177:29:4", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapFactory_$2841", - "typeString": "contract IDXswapFactory" - }, - "typeName": { - "contractScope": null, - "id": 1394, - "name": "IDXswapFactory", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2841, - "src": "177:14:4", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapFactory_$2841", - "typeString": "contract IDXswapFactory" - } - }, - "value": null, - "visibility": "public" - }, - { - "body": { - "id": 1412, - "nodeType": "Block", - "src": "268:75:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1404, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1402, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1389, - "src": "278:5:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 1403, - "name": "_owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1397, - "src": "286:6:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "278:14:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1405, - "nodeType": "ExpressionStatement", - "src": "278:14:4" - }, - { - "expression": { - "argumentTypes": null, - "id": 1410, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1406, - "name": "factory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1395, - "src": "302:7:4", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapFactory_$2841", - "typeString": "contract IDXswapFactory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1408, - "name": "_factory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1399, - "src": "327:8:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1407, - "name": "IDXswapFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2841, - "src": "312:14:4", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IDXswapFactory_$2841_$", - "typeString": "type(contract IDXswapFactory)" - } - }, - "id": 1409, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "312:24:4", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapFactory_$2841", - "typeString": "contract IDXswapFactory" - } - }, - "src": "302:34:4", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapFactory_$2841", - "typeString": "contract IDXswapFactory" - } - }, - "id": 1411, - "nodeType": "ExpressionStatement", - "src": "302:34:4" - } - ] - }, - "documentation": null, - "id": 1413, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1400, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1397, - "name": "_owner", - "nodeType": "VariableDeclaration", - "scope": 1413, - "src": "227:14:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1396, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "227:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1399, - "name": "_factory", - "nodeType": "VariableDeclaration", - "scope": 1413, - "src": "243:16:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1398, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "243:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "226:34:4" - }, - "returnParameters": { - "id": 1401, - "nodeType": "ParameterList", - "parameters": [], - "src": "268:0:4" - }, - "scope": 1547, - "src": "215:128:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1430, - "nodeType": "Block", - "src": "403:101:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1422, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1419, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "421:3:4", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1420, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "421:10:4", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 1421, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1389, - "src": "435:5:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "421:19:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "4458737761704665655365747465723a20464f5242494444454e", - "id": 1423, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "442:28:4", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_d58d50c25ffba7fc541c2f4efc45fa23362e6d6fa72772d468c0628b00571f61", - "typeString": "literal_string \"DXswapFeeSetter: FORBIDDEN\"" - }, - "value": "DXswapFeeSetter: FORBIDDEN" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_d58d50c25ffba7fc541c2f4efc45fa23362e6d6fa72772d468c0628b00571f61", - "typeString": "literal_string \"DXswapFeeSetter: FORBIDDEN\"" - } - ], - "id": 1418, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "413:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 1424, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "413:58:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1425, - "nodeType": "ExpressionStatement", - "src": "413:58:4" - }, - { - "expression": { - "argumentTypes": null, - "id": 1428, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1426, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1389, - "src": "481:5:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 1427, - "name": "newOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1415, - "src": "489:8:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "481:16:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1429, - "nodeType": "ExpressionStatement", - "src": "481:16:4" - } - ] - }, - "documentation": null, - "id": 1431, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "transferOwnership", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1416, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1415, - "name": "newOwner", - "nodeType": "VariableDeclaration", - "scope": 1431, - "src": "376:16:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1414, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "376:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "375:18:4" - }, - "returnParameters": { - "id": 1417, - "nodeType": "ParameterList", - "parameters": [], - "src": "403:0:4" - }, - "scope": 1547, - "src": "349:155:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": { - "id": 1452, - "nodeType": "Block", - "src": "586:112:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1442, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1439, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "604:3:4", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1440, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "604:10:4", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 1441, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1389, - "src": "618:5:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "604:19:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "4458737761704665655365747465723a20464f5242494444454e", - "id": 1443, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "625:28:4", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_d58d50c25ffba7fc541c2f4efc45fa23362e6d6fa72772d468c0628b00571f61", - "typeString": "literal_string \"DXswapFeeSetter: FORBIDDEN\"" - }, - "value": "DXswapFeeSetter: FORBIDDEN" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_d58d50c25ffba7fc541c2f4efc45fa23362e6d6fa72772d468c0628b00571f61", - "typeString": "literal_string \"DXswapFeeSetter: FORBIDDEN\"" - } - ], - "id": 1438, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "596:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 1444, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "596:58:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1445, - "nodeType": "ExpressionStatement", - "src": "596:58:4" - }, - { - "expression": { - "argumentTypes": null, - "id": 1450, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1446, - "name": "pairOwners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1393, - "src": "664:10:4", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 1448, - "indexExpression": { - "argumentTypes": null, - "id": 1447, - "name": "pair", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1433, - "src": "675:4:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "664:16:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 1449, - "name": "newOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1435, - "src": "683:8:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "664:27:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1451, - "nodeType": "ExpressionStatement", - "src": "664:27:4" - } - ] - }, - "documentation": null, - "id": 1453, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "transferPairOwnership", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1436, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1433, - "name": "pair", - "nodeType": "VariableDeclaration", - "scope": 1453, - "src": "545:12:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1432, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "545:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1435, - "name": "newOwner", - "nodeType": "VariableDeclaration", - "scope": 1453, - "src": "559:16:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1434, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "559:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "544:32:4" - }, - "returnParameters": { - "id": 1437, - "nodeType": "ParameterList", - "parameters": [], - "src": "586:0:4" - }, - "scope": 1547, - "src": "514:184:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": { - "id": 1472, - "nodeType": "Block", - "src": "746:108:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1462, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1459, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "764:3:4", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1460, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "764:10:4", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 1461, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1389, - "src": "778:5:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "764:19:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "4458737761704665655365747465723a20464f5242494444454e", - "id": 1463, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "785:28:4", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_d58d50c25ffba7fc541c2f4efc45fa23362e6d6fa72772d468c0628b00571f61", - "typeString": "literal_string \"DXswapFeeSetter: FORBIDDEN\"" - }, - "value": "DXswapFeeSetter: FORBIDDEN" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_d58d50c25ffba7fc541c2f4efc45fa23362e6d6fa72772d468c0628b00571f61", - "typeString": "literal_string \"DXswapFeeSetter: FORBIDDEN\"" - } - ], - "id": 1458, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "756:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 1464, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "756:58:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1465, - "nodeType": "ExpressionStatement", - "src": "756:58:4" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1469, - "name": "feeTo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1455, - "src": "841:5:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 1466, - "name": "factory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1395, - "src": "824:7:4", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapFactory_$2841", - "typeString": "contract IDXswapFactory" - } - }, - "id": 1468, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "setFeeTo", - "nodeType": "MemberAccess", - "referencedDeclaration": 2823, - "src": "824:16:4", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1470, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "824:23:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1471, - "nodeType": "ExpressionStatement", - "src": "824:23:4" - } - ] - }, - "documentation": null, - "id": 1473, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "setFeeTo", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1456, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1455, - "name": "feeTo", - "nodeType": "VariableDeclaration", - "scope": 1473, - "src": "722:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1454, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "722:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "721:15:4" - }, - "returnParameters": { - "id": 1457, - "nodeType": "ParameterList", - "parameters": [], - "src": "746:0:4" - }, - "scope": 1547, - "src": "704:150:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": { - "id": 1492, - "nodeType": "Block", - "src": "914:120:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1482, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1479, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "932:3:4", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1480, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "932:10:4", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 1481, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1389, - "src": "946:5:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "932:19:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "4458737761704665655365747465723a20464f5242494444454e", - "id": 1483, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "953:28:4", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_d58d50c25ffba7fc541c2f4efc45fa23362e6d6fa72772d468c0628b00571f61", - "typeString": "literal_string \"DXswapFeeSetter: FORBIDDEN\"" - }, - "value": "DXswapFeeSetter: FORBIDDEN" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_d58d50c25ffba7fc541c2f4efc45fa23362e6d6fa72772d468c0628b00571f61", - "typeString": "literal_string \"DXswapFeeSetter: FORBIDDEN\"" - } - ], - "id": 1478, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "924:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 1484, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "924:58:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1485, - "nodeType": "ExpressionStatement", - "src": "924:58:4" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1489, - "name": "feeToSetter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1475, - "src": "1015:11:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 1486, - "name": "factory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1395, - "src": "992:7:4", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapFactory_$2841", - "typeString": "contract IDXswapFactory" - } - }, - "id": 1488, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "setFeeToSetter", - "nodeType": "MemberAccess", - "referencedDeclaration": 2828, - "src": "992:22:4", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1490, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "992:35:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1491, - "nodeType": "ExpressionStatement", - "src": "992:35:4" - } - ] - }, - "documentation": null, - "id": 1493, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "setFeeToSetter", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1476, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1475, - "name": "feeToSetter", - "nodeType": "VariableDeclaration", - "scope": 1493, - "src": "884:19:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1474, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "884:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "883:21:4" - }, - "returnParameters": { - "id": 1477, - "nodeType": "ParameterList", - "parameters": [], - "src": "914:0:4" - }, - "scope": 1547, - "src": "860:174:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": { - "id": 1512, - "nodeType": "Block", - "src": "1107:131:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1502, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1499, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "1125:3:4", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1500, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1125:10:4", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 1501, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1389, - "src": "1139:5:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1125:19:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "4458737761704665655365747465723a20464f5242494444454e", - "id": 1503, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1146:28:4", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_d58d50c25ffba7fc541c2f4efc45fa23362e6d6fa72772d468c0628b00571f61", - "typeString": "literal_string \"DXswapFeeSetter: FORBIDDEN\"" - }, - "value": "DXswapFeeSetter: FORBIDDEN" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_d58d50c25ffba7fc541c2f4efc45fa23362e6d6fa72772d468c0628b00571f61", - "typeString": "literal_string \"DXswapFeeSetter: FORBIDDEN\"" - } - ], - "id": 1498, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "1117:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 1504, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1117:58:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1505, - "nodeType": "ExpressionStatement", - "src": "1117:58:4" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1509, - "name": "protocolFeeDenominator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1495, - "src": "1208:22:4", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - ], - "expression": { - "argumentTypes": null, - "id": 1506, - "name": "factory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1395, - "src": "1185:7:4", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapFactory_$2841", - "typeString": "contract IDXswapFactory" - } - }, - "id": 1508, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "setProtocolFee", - "nodeType": "MemberAccess", - "referencedDeclaration": 2833, - "src": "1185:22:4", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint8_$returns$__$", - "typeString": "function (uint8) external" - } - }, - "id": 1510, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1185:46:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1511, - "nodeType": "ExpressionStatement", - "src": "1185:46:4" - } - ] - }, - "documentation": null, - "id": 1513, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "setProtocolFee", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1496, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1495, - "name": "protocolFeeDenominator", - "nodeType": "VariableDeclaration", - "scope": 1513, - "src": "1068:28:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 1494, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "1068:5:4", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1067:30:4" - }, - "returnParameters": { - "id": 1497, - "nodeType": "ParameterList", - "parameters": [], - "src": "1107:0:4" - }, - "scope": 1547, - "src": "1044:194:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": { - "id": 1545, - "nodeType": "Block", - "src": "1307:158:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 1534, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1524, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1521, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "1326:3:4", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1522, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1326:10:4", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 1523, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1389, - "src": "1340:5:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1326:19:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 1525, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1325:21:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1531, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1526, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "1352:3:4", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1527, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1352:10:4", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1528, - "name": "pairOwners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1393, - "src": "1366:10:4", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 1530, - "indexExpression": { - "argumentTypes": null, - "id": 1529, - "name": "pair", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1515, - "src": "1377:4:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1366:16:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1352:30:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 1532, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1351:32:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 1533, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1350:34:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "1325:59:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "4458737761704665655365747465723a20464f5242494444454e", - "id": 1535, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1386:28:4", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_d58d50c25ffba7fc541c2f4efc45fa23362e6d6fa72772d468c0628b00571f61", - "typeString": "literal_string \"DXswapFeeSetter: FORBIDDEN\"" - }, - "value": "DXswapFeeSetter: FORBIDDEN" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_d58d50c25ffba7fc541c2f4efc45fa23362e6d6fa72772d468c0628b00571f61", - "typeString": "literal_string \"DXswapFeeSetter: FORBIDDEN\"" - } - ], - "id": 1520, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "1317:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 1536, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1317:98:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1537, - "nodeType": "ExpressionStatement", - "src": "1317:98:4" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1541, - "name": "pair", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1515, - "src": "1444:4:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1542, - "name": "swapFee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1517, - "src": "1450:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "expression": { - "argumentTypes": null, - "id": 1538, - "name": "factory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1395, - "src": "1425:7:4", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapFactory_$2841", - "typeString": "contract IDXswapFactory" - } - }, - "id": 1540, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "setSwapFee", - "nodeType": "MemberAccess", - "referencedDeclaration": 2840, - "src": "1425:18:4", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint32_$returns$__$", - "typeString": "function (address,uint32) external" - } - }, - "id": 1543, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1425:33:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1544, - "nodeType": "ExpressionStatement", - "src": "1425:33:4" - } - ] - }, - "documentation": null, - "id": 1546, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "setSwapFee", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1518, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1515, - "name": "pair", - "nodeType": "VariableDeclaration", - "scope": 1546, - "src": "1268:12:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1514, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1268:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1517, - "name": "swapFee", - "nodeType": "VariableDeclaration", - "scope": 1546, - "src": "1282:14:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1516, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1282:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1267:30:4" - }, - "returnParameters": { - "id": 1519, - "nodeType": "ParameterList", - "parameters": [], - "src": "1307:0:4" - }, - "scope": 1547, - "src": "1248:217:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - } - ], - "scope": 1548, - "src": "69:1398:4" - } - ], - "src": "0:1468:4" - } - }, - "contracts/DXswapPair.sol": { - "id": 5, - "AST": { - "absolutePath": "contracts/DXswapPair.sol", - "exportedSymbols": { - "DXswapPair": [ - 2624 - ] - }, - "id": 2625, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1549, - "literals": [ - "solidity", - "=", - "0.5", - ".16" - ], - "nodeType": "PragmaDirective", - "src": "0:24:5" - }, - { - "absolutePath": "contracts/interfaces/IDXswapPair.sol", - "file": "./interfaces/IDXswapPair.sol", - "id": 1550, - "nodeType": "ImportDirective", - "scope": 2625, - "sourceUnit": 3094, - "src": "26:38:5", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "contracts/DXswapERC20.sol", - "file": "./DXswapERC20.sol", - "id": 1551, - "nodeType": "ImportDirective", - "scope": 2625, - "sourceUnit": 645, - "src": "65:27:5", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "contracts/libraries/Math.sol", - "file": "./libraries/Math.sol", - "id": 1552, - "nodeType": "ImportDirective", - "scope": 2625, - "sourceUnit": 3281, - "src": "93:30:5", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "contracts/libraries/UQ112x112.sol", - "file": "./libraries/UQ112x112.sol", - "id": 1553, - "nodeType": "ImportDirective", - "scope": 2625, - "sourceUnit": 3556, - "src": "124:35:5", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "contracts/interfaces/IERC20.sol", - "file": "./interfaces/IERC20.sol", - "id": 1554, - "nodeType": "ImportDirective", - "scope": 2625, - "sourceUnit": 3178, - "src": "160:33:5", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "contracts/interfaces/IDXswapFactory.sol", - "file": "./interfaces/IDXswapFactory.sol", - "id": 1555, - "nodeType": "ImportDirective", - "scope": 2625, - "sourceUnit": 2842, - "src": "194:41:5", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "contracts/interfaces/IDXswapCallee.sol", - "file": "./interfaces/IDXswapCallee.sol", - "id": 1556, - "nodeType": "ImportDirective", - "scope": 2625, - "sourceUnit": 2639, - "src": "236:40:5", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 1557, - "name": "IDXswapPair", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 3093, - "src": "301:11:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapPair_$3093", - "typeString": "contract IDXswapPair" - } - }, - "id": 1558, - "nodeType": "InheritanceSpecifier", - "src": "301:11:5" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 1559, - "name": "DXswapERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 644, - "src": "314:11:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapERC20_$644", - "typeString": "contract DXswapERC20" - } - }, - "id": 1560, - "nodeType": "InheritanceSpecifier", - "src": "314:11:5" - } - ], - "contractDependencies": [ - 644, - 2756, - 3093 - ], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 2624, - "linearizedBaseContracts": [ - 2624, - 644, - 2756, - 3093 - ], - "name": "DXswapPair", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 1563, - "libraryName": { - "contractScope": null, - "id": 1561, - "name": "SafeMath", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 3355, - "src": "338:8:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeMath_$3355", - "typeString": "library SafeMath" - } - }, - "nodeType": "UsingForDirective", - "src": "332:25:5", - "typeName": { - "id": 1562, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "352:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - { - "id": 1566, - "libraryName": { - "contractScope": null, - "id": 1564, - "name": "UQ112x112", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 3555, - "src": "368:9:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_UQ112x112_$3555", - "typeString": "library UQ112x112" - } - }, - "nodeType": "UsingForDirective", - "src": "362:28:5", - "typeName": { - "id": 1565, - "name": "uint224", - "nodeType": "ElementaryTypeName", - "src": "382:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - } - }, - { - "constant": true, - "id": 1571, - "name": "MINIMUM_LIQUIDITY", - "nodeType": "VariableDeclaration", - "scope": 2624, - "src": "396:46:5", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1567, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "396:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_rational_1000_by_1", - "typeString": "int_const 1000" - }, - "id": 1570, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "3130", - "id": 1568, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "437:2:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "argumentTypes": null, - "hexValue": "33", - "id": 1569, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "441:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "src": "437:5:5", - "typeDescriptions": { - "typeIdentifier": "t_rational_1000_by_1", - "typeString": "int_const 1000" - } - }, - "visibility": "public" - }, - { - "constant": true, - "id": 1580, - "name": "SELECTOR", - "nodeType": "VariableDeclaration", - "scope": 2624, - "src": "448:88:5", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - }, - "typeName": { - "id": 1572, - "name": "bytes4", - "nodeType": "ElementaryTypeName", - "src": "448:6:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "value": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "7472616e7366657228616464726573732c75696e7432353629", - "id": 1576, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "506:27:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_a9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b", - "typeString": "literal_string \"transfer(address,uint256)\"" - }, - "value": "transfer(address,uint256)" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_a9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b", - "typeString": "literal_string \"transfer(address,uint256)\"" - } - ], - "id": 1575, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "500:5:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": "bytes" - }, - "id": 1577, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "500:34:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 1574, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3824, - "src": "490:9:5", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 1578, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "490:45:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 1573, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "483:6:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes4_$", - "typeString": "type(bytes4)" - }, - "typeName": "bytes4" - }, - "id": 1579, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "483:53:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "visibility": "private" - }, - { - "constant": false, - "id": 1582, - "name": "factory", - "nodeType": "VariableDeclaration", - "scope": 2624, - "src": "543:22:5", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1581, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "543:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 1584, - "name": "token0", - "nodeType": "VariableDeclaration", - "scope": 2624, - "src": "571:21:5", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1583, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "571:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 1586, - "name": "token1", - "nodeType": "VariableDeclaration", - "scope": 2624, - "src": "598:21:5", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1585, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "598:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 1588, - "name": "reserve0", - "nodeType": "VariableDeclaration", - "scope": 2624, - "src": "626:24:5", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 1587, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "626:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 1590, - "name": "reserve1", - "nodeType": "VariableDeclaration", - "scope": 2624, - "src": "722:24:5", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 1589, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "722:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 1592, - "name": "blockTimestampLast", - "nodeType": "VariableDeclaration", - "scope": 2624, - "src": "818:34:5", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1591, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "818:6:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 1594, - "name": "price0CumulativeLast", - "nodeType": "VariableDeclaration", - "scope": 2624, - "src": "915:32:5", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1593, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "915:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 1596, - "name": "price1CumulativeLast", - "nodeType": "VariableDeclaration", - "scope": 2624, - "src": "953:32:5", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1595, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "953:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 1598, - "name": "kLast", - "nodeType": "VariableDeclaration", - "scope": 2624, - "src": "991:17:5", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1597, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "991:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 1601, - "name": "swapFee", - "nodeType": "VariableDeclaration", - "scope": 2624, - "src": "1094:26:5", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1599, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1094:6:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "3235", - "id": 1600, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1118:2:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_25_by_1", - "typeString": "int_const 25" - }, - "value": "25" - }, - "visibility": "public" - }, - { - "constant": false, - "id": 1604, - "name": "unlocked", - "nodeType": "VariableDeclaration", - "scope": 2624, - "src": "1160:25:5", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1602, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1160:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "31", - "id": 1603, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1184:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "visibility": "private" - }, - { - "body": { - "id": 1622, - "nodeType": "Block", - "src": "1207:116:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1609, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1607, - "name": "unlocked", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1604, - "src": "1225:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 1608, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1237:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "1225:13:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "445873776170506169723a204c4f434b4544", - "id": 1610, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1240:20:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_111e9c0d39af0eb66f47be8754536a67f027c1c917a505a42704700db70f9740", - "typeString": "literal_string \"DXswapPair: LOCKED\"" - }, - "value": "DXswapPair: LOCKED" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_111e9c0d39af0eb66f47be8754536a67f027c1c917a505a42704700db70f9740", - "typeString": "literal_string \"DXswapPair: LOCKED\"" - } - ], - "id": 1606, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "1217:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 1611, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1217:44:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1612, - "nodeType": "ExpressionStatement", - "src": "1217:44:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 1615, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1613, - "name": "unlocked", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1604, - "src": "1271:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "30", - "id": 1614, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1282:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1271:12:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1616, - "nodeType": "ExpressionStatement", - "src": "1271:12:5" - }, - { - "id": 1617, - "nodeType": "PlaceholderStatement", - "src": "1293:1:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 1620, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1618, - "name": "unlocked", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1604, - "src": "1304:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "31", - "id": 1619, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1315:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "1304:12:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1621, - "nodeType": "ExpressionStatement", - "src": "1304:12:5" - } - ] - }, - "documentation": null, - "id": 1623, - "name": "lock", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 1605, - "nodeType": "ParameterList", - "parameters": [], - "src": "1204:2:5" - }, - "src": "1191:132:5", - "visibility": "internal" - }, - { - "body": { - "id": 1644, - "nodeType": "Block", - "src": "1439:117:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1634, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1632, - "name": "_reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1626, - "src": "1449:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 1633, - "name": "reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1588, - "src": "1461:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "src": "1449:20:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "id": 1635, - "nodeType": "ExpressionStatement", - "src": "1449:20:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 1638, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1636, - "name": "_reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1628, - "src": "1479:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 1637, - "name": "reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1590, - "src": "1491:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "src": "1479:20:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "id": 1639, - "nodeType": "ExpressionStatement", - "src": "1479:20:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 1642, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1640, - "name": "_blockTimestampLast", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1630, - "src": "1509:19:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 1641, - "name": "blockTimestampLast", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1592, - "src": "1531:18:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "1509:40:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "id": 1643, - "nodeType": "ExpressionStatement", - "src": "1509:40:5" - } - ] - }, - "documentation": null, - "id": 1645, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getReserves", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1624, - "nodeType": "ParameterList", - "parameters": [], - "src": "1349:2:5" - }, - "returnParameters": { - "id": 1631, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1626, - "name": "_reserve0", - "nodeType": "VariableDeclaration", - "scope": 1645, - "src": "1373:17:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 1625, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "1373:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1628, - "name": "_reserve1", - "nodeType": "VariableDeclaration", - "scope": 1645, - "src": "1392:17:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 1627, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "1392:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1630, - "name": "_blockTimestampLast", - "nodeType": "VariableDeclaration", - "scope": 1645, - "src": "1411:26:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1629, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1411:6:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1372:66:5" - }, - "scope": 2624, - "src": "1329:227:5", - "stateMutability": "view", - "superFunction": 3025, - "visibility": "public" - }, - { - "body": { - "id": 1686, - "nodeType": "Block", - "src": "1632:215:5", - "statements": [ - { - "assignments": [ - 1655, - 1657 - ], - "declarations": [ - { - "constant": false, - "id": 1655, - "name": "success", - "nodeType": "VariableDeclaration", - "scope": 1686, - "src": "1643:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1654, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1643:4:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1657, - "name": "data", - "nodeType": "VariableDeclaration", - "scope": 1686, - "src": "1657:17:5", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1656, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1657:5:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1667, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1662, - "name": "SELECTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1580, - "src": "1712:8:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - { - "argumentTypes": null, - "id": 1663, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1649, - "src": "1722:2:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1664, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1651, - "src": "1726:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1660, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3817, - "src": "1689:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 1661, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "encodeWithSelector", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1689:22:5", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (bytes4) pure returns (bytes memory)" - } - }, - "id": 1665, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1689:43:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "argumentTypes": null, - "id": 1658, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1647, - "src": "1678:5:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1659, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "call", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1678:10:5", - "typeDescriptions": { - "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes memory) payable returns (bool,bytes memory)" - } - }, - "id": 1666, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1678:55:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1642:91:5" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 1682, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1669, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1655, - "src": "1751:7:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 1680, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1673, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1670, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1657, - "src": "1763:4:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 1671, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1763:11:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1672, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1778:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1763:16:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1676, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1657, - "src": "1794:4:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "id": 1677, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1801:4:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bool_$", - "typeString": "type(bool)" - }, - "typeName": "bool" - } - ], - "id": 1678, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1800:6:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bool_$", - "typeString": "type(bool)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_type$_t_bool_$", - "typeString": "type(bool)" - } - ], - "expression": { - "argumentTypes": null, - "id": 1674, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3817, - "src": "1783:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 1675, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "decode", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1783:10:5", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 1679, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1783:24:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "1763:44:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 1681, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1762:46:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "1751:57:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "445873776170506169723a205452414e534645525f4641494c4544", - "id": 1683, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1810:29:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_08771ad0d7da0724ad7f4886f4aad31cb2e4607b71ab093eaeeb78f6465930d8", - "typeString": "literal_string \"DXswapPair: TRANSFER_FAILED\"" - }, - "value": "DXswapPair: TRANSFER_FAILED" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_08771ad0d7da0724ad7f4886f4aad31cb2e4607b71ab093eaeeb78f6465930d8", - "typeString": "literal_string \"DXswapPair: TRANSFER_FAILED\"" - } - ], - "id": 1668, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "1743:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 1684, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1743:97:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1685, - "nodeType": "ExpressionStatement", - "src": "1743:97:5" - } - ] - }, - "documentation": null, - "id": 1687, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_safeTransfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1652, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1647, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 1687, - "src": "1585:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1646, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1585:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1649, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1687, - "src": "1600:10:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1648, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1600:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1651, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1687, - "src": "1612:10:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1650, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1612:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1584:39:5" - }, - "returnParameters": { - "id": 1653, - "nodeType": "ParameterList", - "parameters": [], - "src": "1632:0:5" - }, - "scope": 2624, - "src": "1562:285:5", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "private" - }, - { - "anonymous": false, - "documentation": null, - "id": 1695, - "name": "Mint", - "nodeType": "EventDefinition", - "parameters": { - "id": 1694, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1689, - "indexed": true, - "name": "sender", - "nodeType": "VariableDeclaration", - "scope": 1695, - "src": "1864:22:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1688, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1864:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1691, - "indexed": false, - "name": "amount0", - "nodeType": "VariableDeclaration", - "scope": 1695, - "src": "1888:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1690, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1888:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1693, - "indexed": false, - "name": "amount1", - "nodeType": "VariableDeclaration", - "scope": 1695, - "src": "1902:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1692, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1902:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1863:52:5" - }, - "src": "1853:63:5" - }, - { - "anonymous": false, - "documentation": null, - "id": 1705, - "name": "Burn", - "nodeType": "EventDefinition", - "parameters": { - "id": 1704, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1697, - "indexed": true, - "name": "sender", - "nodeType": "VariableDeclaration", - "scope": 1705, - "src": "1932:22:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1696, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1932:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1699, - "indexed": false, - "name": "amount0", - "nodeType": "VariableDeclaration", - "scope": 1705, - "src": "1956:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1698, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1956:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1701, - "indexed": false, - "name": "amount1", - "nodeType": "VariableDeclaration", - "scope": 1705, - "src": "1970:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1700, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1970:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1703, - "indexed": true, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1705, - "src": "1984:18:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1702, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1984:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1931:72:5" - }, - "src": "1921:83:5" - }, - { - "anonymous": false, - "documentation": null, - "id": 1719, - "name": "Swap", - "nodeType": "EventDefinition", - "parameters": { - "id": 1718, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1707, - "indexed": true, - "name": "sender", - "nodeType": "VariableDeclaration", - "scope": 1719, - "src": "2029:22:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1706, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2029:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1709, - "indexed": false, - "name": "amount0In", - "nodeType": "VariableDeclaration", - "scope": 1719, - "src": "2061:14:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1708, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2061:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1711, - "indexed": false, - "name": "amount1In", - "nodeType": "VariableDeclaration", - "scope": 1719, - "src": "2085:14:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1710, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2085:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1713, - "indexed": false, - "name": "amount0Out", - "nodeType": "VariableDeclaration", - "scope": 1719, - "src": "2109:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1712, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2109:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1715, - "indexed": false, - "name": "amount1Out", - "nodeType": "VariableDeclaration", - "scope": 1719, - "src": "2134:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1714, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2134:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1717, - "indexed": true, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1719, - "src": "2159:18:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1716, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2159:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2019:164:5" - }, - "src": "2009:175:5" - }, - { - "anonymous": false, - "documentation": null, - "id": 1725, - "name": "Sync", - "nodeType": "EventDefinition", - "parameters": { - "id": 1724, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1721, - "indexed": false, - "name": "reserve0", - "nodeType": "VariableDeclaration", - "scope": 1725, - "src": "2200:16:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 1720, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "2200:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1723, - "indexed": false, - "name": "reserve1", - "nodeType": "VariableDeclaration", - "scope": 1725, - "src": "2218:16:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 1722, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "2218:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2199:36:5" - }, - "src": "2189:47:5" - }, - { - "body": { - "id": 1733, - "nodeType": "Block", - "src": "2263:37:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1731, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1728, - "name": "factory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1582, - "src": "2273:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1729, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "2283:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1730, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2283:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "2273:20:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1732, - "nodeType": "ExpressionStatement", - "src": "2273:20:5" - } - ] - }, - "documentation": null, - "id": 1734, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1726, - "nodeType": "ParameterList", - "parameters": [], - "src": "2253:2:5" - }, - "returnParameters": { - "id": 1727, - "nodeType": "ParameterList", - "parameters": [], - "src": "2263:0:5" - }, - "scope": 2624, - "src": "2242:58:5", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1757, - "nodeType": "Block", - "src": "2425:144:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1745, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1742, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "2443:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1743, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2443:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 1744, - "name": "factory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1582, - "src": "2457:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2443:21:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "445873776170506169723a20464f5242494444454e", - "id": 1746, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2466:23:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_7c080202dc28c8f0845562e54cf1e823ca8cbf2ec2c98369cec7af1290844178", - "typeString": "literal_string \"DXswapPair: FORBIDDEN\"" - }, - "value": "DXswapPair: FORBIDDEN" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_7c080202dc28c8f0845562e54cf1e823ca8cbf2ec2c98369cec7af1290844178", - "typeString": "literal_string \"DXswapPair: FORBIDDEN\"" - } - ], - "id": 1741, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "2435:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 1747, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2435:55:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1748, - "nodeType": "ExpressionStatement", - "src": "2435:55:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 1751, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1749, - "name": "token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1584, - "src": "2520:6:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 1750, - "name": "_token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1736, - "src": "2529:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2520:16:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1752, - "nodeType": "ExpressionStatement", - "src": "2520:16:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 1755, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1753, - "name": "token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1586, - "src": "2546:6:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 1754, - "name": "_token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1738, - "src": "2555:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2546:16:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1756, - "nodeType": "ExpressionStatement", - "src": "2546:16:5" - } - ] - }, - "documentation": null, - "id": 1758, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "initialize", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1739, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1736, - "name": "_token0", - "nodeType": "VariableDeclaration", - "scope": 1758, - "src": "2382:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1735, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2382:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1738, - "name": "_token1", - "nodeType": "VariableDeclaration", - "scope": 1758, - "src": "2399:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1737, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2399:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2381:34:5" - }, - "returnParameters": { - "id": 1740, - "nodeType": "ParameterList", - "parameters": [], - "src": "2425:0:5" - }, - "scope": 2624, - "src": "2362:207:5", - "stateMutability": "nonpayable", - "superFunction": 3087, - "visibility": "external" - }, - { - "body": { - "id": 1782, - "nodeType": "Block", - "src": "2673:208:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1767, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1764, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "2691:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1765, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2691:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 1766, - "name": "factory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1582, - "src": "2705:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2691:21:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "445873776170506169723a20464f5242494444454e", - "id": 1768, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2714:23:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_7c080202dc28c8f0845562e54cf1e823ca8cbf2ec2c98369cec7af1290844178", - "typeString": "literal_string \"DXswapPair: FORBIDDEN\"" - }, - "value": "DXswapPair: FORBIDDEN" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_7c080202dc28c8f0845562e54cf1e823ca8cbf2ec2c98369cec7af1290844178", - "typeString": "literal_string \"DXswapPair: FORBIDDEN\"" - } - ], - "id": 1763, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "2683:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 1769, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2683:55:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1770, - "nodeType": "ExpressionStatement", - "src": "2683:55:5" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 1774, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1772, - "name": "_swapFee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1760, - "src": "2776:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31303030", - "id": 1773, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2788:4:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000_by_1", - "typeString": "int_const 1000" - }, - "value": "1000" - }, - "src": "2776:16:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "445873776170506169723a20464f5242494444454e5f464545", - "id": 1775, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2794:27:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_453b37ee43a956cb996b6514c58ff0b6dc4d7693f723f9bea6c10a7200e7fd99", - "typeString": "literal_string \"DXswapPair: FORBIDDEN_FEE\"" - }, - "value": "DXswapPair: FORBIDDEN_FEE" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_453b37ee43a956cb996b6514c58ff0b6dc4d7693f723f9bea6c10a7200e7fd99", - "typeString": "literal_string \"DXswapPair: FORBIDDEN_FEE\"" - } - ], - "id": 1771, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "2768:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 1776, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2768:54:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1777, - "nodeType": "ExpressionStatement", - "src": "2768:54:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 1780, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1778, - "name": "swapFee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1601, - "src": "2856:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 1779, - "name": "_swapFee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1760, - "src": "2866:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "2856:18:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "id": 1781, - "nodeType": "ExpressionStatement", - "src": "2856:18:5" - } - ] - }, - "documentation": null, - "id": 1783, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "setSwapFee", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1761, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1760, - "name": "_swapFee", - "nodeType": "VariableDeclaration", - "scope": 1783, - "src": "2647:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1759, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2647:6:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2646:17:5" - }, - "returnParameters": { - "id": 1762, - "nodeType": "ParameterList", - "parameters": [], - "src": "2673:0:5" - }, - "scope": 2624, - "src": "2627:254:5", - "stateMutability": "nonpayable", - "superFunction": 3092, - "visibility": "external" - }, - { - "body": { - "id": 1890, - "nodeType": "Block", - "src": "3056:755:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 1807, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1800, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1795, - "name": "balance0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1785, - "src": "3074:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1798, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "-", - "prefix": true, - "src": "3094:2:5", - "subExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 1797, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3095:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "typeDescriptions": { - "typeIdentifier": "t_rational_minus_1_by_1", - "typeString": "int_const -1" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_minus_1_by_1", - "typeString": "int_const -1" - } - ], - "id": 1796, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3086:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint112_$", - "typeString": "type(uint112)" - }, - "typeName": "uint112" - }, - "id": 1799, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3086:11:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "src": "3074:23:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1806, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1801, - "name": "balance1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1787, - "src": "3101:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1804, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "-", - "prefix": true, - "src": "3121:2:5", - "subExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 1803, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3122:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "typeDescriptions": { - "typeIdentifier": "t_rational_minus_1_by_1", - "typeString": "int_const -1" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_minus_1_by_1", - "typeString": "int_const -1" - } - ], - "id": 1802, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3113:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint112_$", - "typeString": "type(uint112)" - }, - "typeName": "uint112" - }, - "id": 1805, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3113:11:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "src": "3101:23:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "3074:50:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "445873776170506169723a204f564552464c4f57", - "id": 1808, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3126:22:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_879c59f76968f1b31a1e5dd951157cb22301094eecc4a2ebf478f5ba036fd642", - "typeString": "literal_string \"DXswapPair: OVERFLOW\"" - }, - "value": "DXswapPair: OVERFLOW" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_879c59f76968f1b31a1e5dd951157cb22301094eecc4a2ebf478f5ba036fd642", - "typeString": "literal_string \"DXswapPair: OVERFLOW\"" - } - ], - "id": 1794, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "3066:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 1809, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3066:83:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1810, - "nodeType": "ExpressionStatement", - "src": "3066:83:5" - }, - { - "assignments": [ - 1812 - ], - "declarations": [ - { - "constant": false, - "id": 1812, - "name": "blockTimestamp", - "nodeType": "VariableDeclaration", - "scope": 1890, - "src": "3159:21:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1811, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "3159:6:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1821, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1819, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1814, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3820, - "src": "3190:5:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 1815, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "timestamp", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3190:15:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "%", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_rational_4294967296_by_1", - "typeString": "int_const 4294967296" - }, - "id": 1818, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 1816, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3208:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "argumentTypes": null, - "hexValue": "3332", - "id": 1817, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3211:2:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_32_by_1", - "typeString": "int_const 32" - }, - "value": "32" - }, - "src": "3208:5:5", - "typeDescriptions": { - "typeIdentifier": "t_rational_4294967296_by_1", - "typeString": "int_const 4294967296" - } - }, - "src": "3190:23:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1813, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3183:6:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint32_$", - "typeString": "type(uint32)" - }, - "typeName": "uint32" - }, - "id": 1820, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3183:31:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3159:55:5" - }, - { - "assignments": [ - 1823 - ], - "declarations": [ - { - "constant": false, - "id": 1823, - "name": "timeElapsed", - "nodeType": "VariableDeclaration", - "scope": 1890, - "src": "3224:18:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1822, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "3224:6:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1827, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 1826, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1824, - "name": "blockTimestamp", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1812, - "src": "3245:14:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 1825, - "name": "blockTimestampLast", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1592, - "src": "3262:18:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "3245:35:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3224:56:5" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 1838, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 1834, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 1830, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1828, - "name": "timeElapsed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1823, - "src": "3317:11:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1829, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3331:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "3317:15:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "id": 1833, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1831, - "name": "_reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1789, - "src": "3336:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1832, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3349:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "3336:14:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "3317:33:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "id": 1837, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1835, - "name": "_reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1791, - "src": "3354:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1836, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3367:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "3354:14:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "3317:51:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 1868, - "nodeType": "IfStatement", - "src": "3313:332:5", - "trueBody": { - "id": 1867, - "nodeType": "Block", - "src": "3370:275:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1851, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1839, - "name": "price0CumulativeLast", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1594, - "src": "3444:20:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1850, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1846, - "name": "_reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1789, - "src": "3507:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1843, - "name": "_reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1791, - "src": "3490:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "expression": { - "argumentTypes": null, - "id": 1841, - "name": "UQ112x112", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3555, - "src": "3473:9:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_UQ112x112_$3555_$", - "typeString": "type(library UQ112x112)" - } - }, - "id": 1842, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "encode", - "nodeType": "MemberAccess", - "referencedDeclaration": 3536, - "src": "3473:16:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint112_$returns$_t_uint224_$", - "typeString": "function (uint112) pure returns (uint224)" - } - }, - "id": 1844, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3473:27:5", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - }, - "id": 1845, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "uqdiv", - "nodeType": "MemberAccess", - "referencedDeclaration": 3554, - "src": "3473:33:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint224_$_t_uint112_$returns$_t_uint224_$bound_to$_t_uint224_$", - "typeString": "function (uint224,uint112) pure returns (uint224)" - } - }, - "id": 1847, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3473:44:5", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - ], - "id": 1840, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3468:4:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint" - }, - "id": 1848, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3468:50:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 1849, - "name": "timeElapsed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1823, - "src": "3521:11:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "3468:64:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3444:88:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1852, - "nodeType": "ExpressionStatement", - "src": "3444:88:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 1865, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1853, - "name": "price1CumulativeLast", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1596, - "src": "3546:20:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1864, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1860, - "name": "_reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1791, - "src": "3609:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1857, - "name": "_reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1789, - "src": "3592:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "expression": { - "argumentTypes": null, - "id": 1855, - "name": "UQ112x112", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3555, - "src": "3575:9:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_UQ112x112_$3555_$", - "typeString": "type(library UQ112x112)" - } - }, - "id": 1856, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "encode", - "nodeType": "MemberAccess", - "referencedDeclaration": 3536, - "src": "3575:16:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint112_$returns$_t_uint224_$", - "typeString": "function (uint112) pure returns (uint224)" - } - }, - "id": 1858, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3575:27:5", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - }, - "id": 1859, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "uqdiv", - "nodeType": "MemberAccess", - "referencedDeclaration": 3554, - "src": "3575:33:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint224_$_t_uint112_$returns$_t_uint224_$bound_to$_t_uint224_$", - "typeString": "function (uint224,uint112) pure returns (uint224)" - } - }, - "id": 1861, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3575:44:5", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - ], - "id": 1854, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3570:4:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint" - }, - "id": 1862, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3570:50:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 1863, - "name": "timeElapsed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1823, - "src": "3623:11:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "3570:64:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3546:88:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1866, - "nodeType": "ExpressionStatement", - "src": "3546:88:5" - } - ] - } - }, - { - "expression": { - "argumentTypes": null, - "id": 1873, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1869, - "name": "reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1588, - "src": "3654:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1871, - "name": "balance0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1785, - "src": "3673:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1870, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3665:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint112_$", - "typeString": "type(uint112)" - }, - "typeName": "uint112" - }, - "id": 1872, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3665:17:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "src": "3654:28:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "id": 1874, - "nodeType": "ExpressionStatement", - "src": "3654:28:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 1879, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1875, - "name": "reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1590, - "src": "3692:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1877, - "name": "balance1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1787, - "src": "3711:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1876, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3703:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint112_$", - "typeString": "type(uint112)" - }, - "typeName": "uint112" - }, - "id": 1878, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3703:17:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "src": "3692:28:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "id": 1880, - "nodeType": "ExpressionStatement", - "src": "3692:28:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 1883, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1881, - "name": "blockTimestampLast", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1592, - "src": "3730:18:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 1882, - "name": "blockTimestamp", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1812, - "src": "3751:14:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "3730:35:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "id": 1884, - "nodeType": "ExpressionStatement", - "src": "3730:35:5" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1886, - "name": "reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1588, - "src": "3785:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - { - "argumentTypes": null, - "id": 1887, - "name": "reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1590, - "src": "3795:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "id": 1885, - "name": "Sync", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1725 - ], - "referencedDeclaration": 1725, - "src": "3780:4:5", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint112_$_t_uint112_$returns$__$", - "typeString": "function (uint112,uint112)" - } - }, - "id": 1888, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3780:24:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1889, - "nodeType": "EmitStatement", - "src": "3775:29:5" - } - ] - }, - "documentation": null, - "id": 1891, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_update", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1792, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1785, - "name": "balance0", - "nodeType": "VariableDeclaration", - "scope": 1891, - "src": "2980:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1784, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2980:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1787, - "name": "balance1", - "nodeType": "VariableDeclaration", - "scope": 1891, - "src": "2995:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1786, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2995:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1789, - "name": "_reserve0", - "nodeType": "VariableDeclaration", - "scope": 1891, - "src": "3010:17:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 1788, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "3010:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1791, - "name": "_reserve1", - "nodeType": "VariableDeclaration", - "scope": 1891, - "src": "3029:17:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 1790, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "3029:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2979:68:5" - }, - "returnParameters": { - "id": 1793, - "nodeType": "ParameterList", - "parameters": [], - "src": "3056:0:5" - }, - "scope": 2624, - "src": "2963:848:5", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "private" - }, - { - "body": { - "id": 2004, - "nodeType": "Block", - "src": "4016:841:5", - "statements": [ - { - "assignments": [ - 1901 - ], - "declarations": [ - { - "constant": false, - "id": 1901, - "name": "feeTo", - "nodeType": "VariableDeclaration", - "scope": 2004, - "src": "4026:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1900, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4026:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1907, - "initialValue": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1903, - "name": "factory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1582, - "src": "4057:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1902, - "name": "IDXswapFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2841, - "src": "4042:14:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IDXswapFactory_$2841_$", - "typeString": "type(contract IDXswapFactory)" - } - }, - "id": 1904, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4042:23:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapFactory_$2841", - "typeString": "contract IDXswapFactory" - } - }, - "id": 1905, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "feeTo", - "nodeType": "MemberAccess", - "referencedDeclaration": 2778, - "src": "4042:29:5", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 1906, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4042:31:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4026:47:5" - }, - { - "assignments": [ - 1909 - ], - "declarations": [ - { - "constant": false, - "id": 1909, - "name": "protocolFeeDenominator", - "nodeType": "VariableDeclaration", - "scope": 2004, - "src": "4083:28:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 1908, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "4083:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1915, - "initialValue": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1911, - "name": "factory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1582, - "src": "4129:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1910, - "name": "IDXswapFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2841, - "src": "4114:14:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IDXswapFactory_$2841_$", - "typeString": "type(contract IDXswapFactory)" - } - }, - "id": 1912, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4114:23:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapFactory_$2841", - "typeString": "contract IDXswapFactory" - } - }, - "id": 1913, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "protocolFeeDenominator", - "nodeType": "MemberAccess", - "referencedDeclaration": 2783, - "src": "4114:46:5", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$", - "typeString": "function () view external returns (uint8)" - } - }, - "id": 1914, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4114:48:5", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4083:79:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 1922, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1916, - "name": "feeOn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1898, - "src": "4172:5:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1921, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1917, - "name": "feeTo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1901, - "src": "4180:5:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1919, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4197:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1918, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4189:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1920, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4189:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "4180:19:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "4172:27:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1923, - "nodeType": "ExpressionStatement", - "src": "4172:27:5" - }, - { - "assignments": [ - 1925 - ], - "declarations": [ - { - "constant": false, - "id": 1925, - "name": "_kLast", - "nodeType": "VariableDeclaration", - "scope": 2004, - "src": "4209:11:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1924, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4209:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1927, - "initialValue": { - "argumentTypes": null, - "id": 1926, - "name": "kLast", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1598, - "src": "4223:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4209:19:5" - }, - { - "condition": { - "argumentTypes": null, - "id": 1928, - "name": "feeOn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1898, - "src": "4257:5:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1996, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1994, - "name": "_kLast", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1925, - "src": "4804:6:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1995, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4814:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "4804:11:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 2002, - "nodeType": "IfStatement", - "src": "4800:51:5", - "trueBody": { - "id": 2001, - "nodeType": "Block", - "src": "4817:34:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1999, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1997, - "name": "kLast", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1598, - "src": "4831:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "30", - "id": 1998, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4839:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "4831:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2000, - "nodeType": "ExpressionStatement", - "src": "4831:9:5" - } - ] - } - }, - "id": 2003, - "nodeType": "IfStatement", - "src": "4253:598:5", - "trueBody": { - "id": 1993, - "nodeType": "Block", - "src": "4264:530:5", - "statements": [ - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1931, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1929, - "name": "_kLast", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1925, - "src": "4282:6:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1930, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4292:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "4282:11:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 1992, - "nodeType": "IfStatement", - "src": "4278:506:5", - "trueBody": { - "id": 1991, - "nodeType": "Block", - "src": "4295:489:5", - "statements": [ - { - "assignments": [ - 1933 - ], - "declarations": [ - { - "constant": false, - "id": 1933, - "name": "rootK", - "nodeType": "VariableDeclaration", - "scope": 1991, - "src": "4313:10:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1932, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4313:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1943, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1940, - "name": "_reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1895, - "src": "4356:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1937, - "name": "_reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1893, - "src": "4341:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "id": 1936, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4336:4:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint" - }, - "id": 1938, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4336:15:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1939, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "mul", - "nodeType": "MemberAccess", - "referencedDeclaration": 3354, - "src": "4336:19:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1941, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4336:30:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1934, - "name": "Math", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3280, - "src": "4326:4:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Math_$3280_$", - "typeString": "type(library Math)" - } - }, - "id": 1935, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sqrt", - "nodeType": "MemberAccess", - "referencedDeclaration": 3279, - "src": "4326:9:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) pure returns (uint256)" - } - }, - "id": 1942, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4326:41:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4313:54:5" - }, - { - "assignments": [ - 1945 - ], - "declarations": [ - { - "constant": false, - "id": 1945, - "name": "rootKLast", - "nodeType": "VariableDeclaration", - "scope": 1991, - "src": "4385:14:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1944, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4385:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1950, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1948, - "name": "_kLast", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1925, - "src": "4412:6:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1946, - "name": "Math", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3280, - "src": "4402:4:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Math_$3280_$", - "typeString": "type(library Math)" - } - }, - "id": 1947, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sqrt", - "nodeType": "MemberAccess", - "referencedDeclaration": 3279, - "src": "4402:9:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) pure returns (uint256)" - } - }, - "id": 1949, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4402:17:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4385:34:5" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1953, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1951, - "name": "rootK", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1933, - "src": "4441:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "id": 1952, - "name": "rootKLast", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1945, - "src": "4449:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4441:17:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 1990, - "nodeType": "IfStatement", - "src": "4437:333:5", - "trueBody": { - "id": 1989, - "nodeType": "Block", - "src": "4460:310:5", - "statements": [ - { - "assignments": [ - 1955 - ], - "declarations": [ - { - "constant": false, - "id": 1955, - "name": "numerator", - "nodeType": "VariableDeclaration", - "scope": 1989, - "src": "4482:14:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1954, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4482:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1963, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1960, - "name": "rootKLast", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1945, - "src": "4525:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1958, - "name": "rootK", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1933, - "src": "4515:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1959, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 3326, - "src": "4515:9:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1961, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4515:20:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1956, - "name": "totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 279, - "src": "4499:11:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1957, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "mul", - "nodeType": "MemberAccess", - "referencedDeclaration": 3354, - "src": "4499:15:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1962, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4499:37:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4482:54:5" - }, - { - "assignments": [ - 1965 - ], - "declarations": [ - { - "constant": false, - "id": 1965, - "name": "denominator", - "nodeType": "VariableDeclaration", - "scope": 1989, - "src": "4558:16:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1964, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4558:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1973, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1971, - "name": "rootKLast", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1945, - "src": "4615:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1968, - "name": "protocolFeeDenominator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1909, - "src": "4587:22:5", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - ], - "expression": { - "argumentTypes": null, - "id": 1966, - "name": "rootK", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1933, - "src": "4577:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1967, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "mul", - "nodeType": "MemberAccess", - "referencedDeclaration": 3354, - "src": "4577:9:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1969, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4577:33:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1970, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 3304, - "src": "4577:37:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1972, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4577:48:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4558:67:5" - }, - { - "assignments": [ - 1975 - ], - "declarations": [ - { - "constant": false, - "id": 1975, - "name": "liquidity", - "nodeType": "VariableDeclaration", - "scope": 1989, - "src": "4647:14:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1974, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4647:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1979, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1978, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1976, - "name": "numerator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1955, - "src": "4664:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 1977, - "name": "denominator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1965, - "src": "4676:11:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4664:23:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4647:40:5" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1982, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1980, - "name": "liquidity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1975, - "src": "4713:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1981, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4725:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "4713:13:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 1988, - "nodeType": "IfStatement", - "src": "4709:42:5", - "trueBody": { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1984, - "name": "feeTo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1901, - "src": "4734:5:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1985, - "name": "liquidity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1975, - "src": "4741:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1983, - "name": "_mint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 381, - "src": "4728:5:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 1986, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4728:23:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1987, - "nodeType": "ExpressionStatement", - "src": "4728:23:5" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - }, - "documentation": null, - "id": 2005, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_mintFee", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1896, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1893, - "name": "_reserve0", - "nodeType": "VariableDeclaration", - "scope": 2005, - "src": "3949:17:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 1892, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "3949:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1895, - "name": "_reserve1", - "nodeType": "VariableDeclaration", - "scope": 2005, - "src": "3968:17:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 1894, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "3968:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3948:38:5" - }, - "returnParameters": { - "id": 1899, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1898, - "name": "feeOn", - "nodeType": "VariableDeclaration", - "scope": 2005, - "src": "4004:10:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1897, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4004:4:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4003:12:5" - }, - "scope": 2624, - "src": "3931:926:5", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "private" - }, - { - "body": { - "id": 2149, - "nodeType": "Block", - "src": "5031:1155:5", - "statements": [ - { - "assignments": [ - 2015, - 2017, - null - ], - "declarations": [ - { - "constant": false, - "id": 2015, - "name": "_reserve0", - "nodeType": "VariableDeclaration", - "scope": 2149, - "src": "5042:17:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 2014, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "5042:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2017, - "name": "_reserve1", - "nodeType": "VariableDeclaration", - "scope": 2149, - "src": "5061:17:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 2016, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "5061:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "internal" - }, - null - ], - "id": 2020, - "initialValue": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2018, - "name": "getReserves", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1645, - "src": "5083:11:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint112_$_t_uint112_$_t_uint32_$", - "typeString": "function () view returns (uint112,uint112,uint32)" - } - }, - "id": 2019, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5083:13:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$_t_uint32_$", - "typeString": "tuple(uint112,uint112,uint32)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5041:55:5" - }, - { - "assignments": [ - 2022 - ], - "declarations": [ - { - "constant": false, - "id": 2022, - "name": "balance0", - "nodeType": "VariableDeclaration", - "scope": 2149, - "src": "5121:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2021, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5121:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2031, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2028, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3862, - "src": "5170:4:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - ], - "id": 2027, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5162:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 2029, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5162:13:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2024, - "name": "token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1584, - "src": "5144:6:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2023, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3177, - "src": "5137:6:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$3177_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 2025, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5137:14:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$3177", - "typeString": "contract IERC20" - } - }, - "id": 2026, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 3138, - "src": "5137:24:5", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 2030, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5137:39:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5121:55:5" - }, - { - "assignments": [ - 2033 - ], - "declarations": [ - { - "constant": false, - "id": 2033, - "name": "balance1", - "nodeType": "VariableDeclaration", - "scope": 2149, - "src": "5186:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2032, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5186:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2042, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2039, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3862, - "src": "5235:4:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - ], - "id": 2038, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5227:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 2040, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5227:13:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2035, - "name": "token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1586, - "src": "5209:6:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2034, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3177, - "src": "5202:6:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$3177_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 2036, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5202:14:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$3177", - "typeString": "contract IERC20" - } - }, - "id": 2037, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 3138, - "src": "5202:24:5", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 2041, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5202:39:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5186:55:5" - }, - { - "assignments": [ - 2044 - ], - "declarations": [ - { - "constant": false, - "id": 2044, - "name": "amount0", - "nodeType": "VariableDeclaration", - "scope": 2149, - "src": "5251:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2043, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5251:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2049, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2047, - "name": "_reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2015, - "src": "5279:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "expression": { - "argumentTypes": null, - "id": 2045, - "name": "balance0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2022, - "src": "5266:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2046, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 3326, - "src": "5266:12:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2048, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5266:23:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5251:38:5" - }, - { - "assignments": [ - 2051 - ], - "declarations": [ - { - "constant": false, - "id": 2051, - "name": "amount1", - "nodeType": "VariableDeclaration", - "scope": 2149, - "src": "5299:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2050, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5299:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2056, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2054, - "name": "_reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2017, - "src": "5327:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "expression": { - "argumentTypes": null, - "id": 2052, - "name": "balance1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2033, - "src": "5314:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2053, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 3326, - "src": "5314:12:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2055, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5314:23:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5299:38:5" - }, - { - "assignments": [ - 2058 - ], - "declarations": [ - { - "constant": false, - "id": 2058, - "name": "feeOn", - "nodeType": "VariableDeclaration", - "scope": 2149, - "src": "5348:10:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2057, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5348:4:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2063, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2060, - "name": "_reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2015, - "src": "5370:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - { - "argumentTypes": null, - "id": 2061, - "name": "_reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2017, - "src": "5381:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "id": 2059, - "name": "_mintFee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2005, - "src": "5361:8:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint112_$_t_uint112_$returns$_t_bool_$", - "typeString": "function (uint112,uint112) returns (bool)" - } - }, - "id": 2062, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5361:30:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5348:43:5" - }, - { - "assignments": [ - 2065 - ], - "declarations": [ - { - "constant": false, - "id": 2065, - "name": "_totalSupply", - "nodeType": "VariableDeclaration", - "scope": 2149, - "src": "5401:17:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2064, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5401:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2067, - "initialValue": { - "argumentTypes": null, - "id": 2066, - "name": "totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 279, - "src": "5421:11:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5401:31:5" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2070, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2068, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2065, - "src": "5524:12:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 2069, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5540:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "5524:17:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 2110, - "nodeType": "Block", - "src": "5744:123:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 2108, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 2092, - "name": "liquidity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2012, - "src": "5758:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2100, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2097, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2065, - "src": "5791:12:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 2095, - "name": "amount0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "5779:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2096, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "mul", - "nodeType": "MemberAccess", - "referencedDeclaration": 3354, - "src": "5779:11:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2098, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5779:25:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 2099, - "name": "_reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2015, - "src": "5807:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "src": "5779:37:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2106, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2103, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2065, - "src": "5830:12:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 2101, - "name": "amount1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2051, - "src": "5818:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2102, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "mul", - "nodeType": "MemberAccess", - "referencedDeclaration": 3354, - "src": "5818:11:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2104, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5818:25:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 2105, - "name": "_reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2017, - "src": "5846:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "src": "5818:37:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 2093, - "name": "Math", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3280, - "src": "5770:4:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Math_$3280_$", - "typeString": "type(library Math)" - } - }, - "id": 2094, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "min", - "nodeType": "MemberAccess", - "referencedDeclaration": 3225, - "src": "5770:8:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2107, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5770:86:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5758:98:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2109, - "nodeType": "ExpressionStatement", - "src": "5758:98:5" - } - ] - }, - "id": 2111, - "nodeType": "IfStatement", - "src": "5520:347:5", - "trueBody": { - "id": 2091, - "nodeType": "Block", - "src": "5543:195:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 2082, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 2071, - "name": "liquidity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2012, - "src": "5557:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2080, - "name": "MINIMUM_LIQUIDITY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1571, - "src": "5605:17:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2076, - "name": "amount1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2051, - "src": "5591:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 2074, - "name": "amount0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "5579:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2075, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "mul", - "nodeType": "MemberAccess", - "referencedDeclaration": 3354, - "src": "5579:11:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2077, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5579:20:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 2072, - "name": "Math", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3280, - "src": "5569:4:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Math_$3280_$", - "typeString": "type(library Math)" - } - }, - "id": 2073, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sqrt", - "nodeType": "MemberAccess", - "referencedDeclaration": 3279, - "src": "5569:9:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) pure returns (uint256)" - } - }, - "id": 2078, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5569:31:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2079, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 3326, - "src": "5569:35:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2081, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5569:54:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5557:66:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2083, - "nodeType": "ExpressionStatement", - "src": "5557:66:5" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 2086, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5650:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2085, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5642:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 2087, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5642:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 2088, - "name": "MINIMUM_LIQUIDITY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1571, - "src": "5654:17:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2084, - "name": "_mint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 381, - "src": "5636:5:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 2089, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5636:36:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2090, - "nodeType": "ExpressionStatement", - "src": "5636:36:5" - } - ] - } - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2115, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2113, - "name": "liquidity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2012, - "src": "5884:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 2114, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5896:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "5884:13:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544", - "id": 2116, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5899:43:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_459487d60a65ab36614e002f945d072afcb02e62d05a5ef691df29257af42c1f", - "typeString": "literal_string \"DXswapPair: INSUFFICIENT_LIQUIDITY_MINTED\"" - }, - "value": "DXswapPair: INSUFFICIENT_LIQUIDITY_MINTED" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_459487d60a65ab36614e002f945d072afcb02e62d05a5ef691df29257af42c1f", - "typeString": "literal_string \"DXswapPair: INSUFFICIENT_LIQUIDITY_MINTED\"" - } - ], - "id": 2112, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "5876:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2117, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5876:67:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2118, - "nodeType": "ExpressionStatement", - "src": "5876:67:5" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2120, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2007, - "src": "5959:2:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2121, - "name": "liquidity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2012, - "src": "5963:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2119, - "name": "_mint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 381, - "src": "5953:5:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 2122, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5953:20:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2123, - "nodeType": "ExpressionStatement", - "src": "5953:20:5" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2125, - "name": "balance0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2022, - "src": "5992:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 2126, - "name": "balance1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2033, - "src": "6002:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 2127, - "name": "_reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2015, - "src": "6012:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - { - "argumentTypes": null, - "id": 2128, - "name": "_reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2017, - "src": "6023:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "id": 2124, - "name": "_update", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1891, - "src": "5984:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint112_$_t_uint112_$returns$__$", - "typeString": "function (uint256,uint256,uint112,uint112)" - } - }, - "id": 2129, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5984:49:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2130, - "nodeType": "ExpressionStatement", - "src": "5984:49:5" - }, - { - "condition": { - "argumentTypes": null, - "id": 2131, - "name": "feeOn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2058, - "src": "6047:5:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 2141, - "nodeType": "IfStatement", - "src": "6043:47:5", - "trueBody": { - "expression": { - "argumentTypes": null, - "id": 2139, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 2132, - "name": "kLast", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1598, - "src": "6054:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2137, - "name": "reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1590, - "src": "6081:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2134, - "name": "reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1588, - "src": "6067:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "id": 2133, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6062:4:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint" - }, - "id": 2135, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6062:14:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2136, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "mul", - "nodeType": "MemberAccess", - "referencedDeclaration": 3354, - "src": "6062:18:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2138, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6062:28:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6054:36:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2140, - "nodeType": "ExpressionStatement", - "src": "6054:36:5" - } - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 2143, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "6150:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2144, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "6150:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 2145, - "name": "amount0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "6162:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 2146, - "name": "amount1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2051, - "src": "6171:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2142, - "name": "Mint", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1695 - ], - "referencedDeclaration": 1695, - "src": "6145:4:5", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256,uint256)" - } - }, - "id": 2147, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6145:34:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2148, - "nodeType": "EmitStatement", - "src": "6140:39:5" - } - ] - }, - "documentation": null, - "id": 2150, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 2010, - "modifierName": { - "argumentTypes": null, - "id": 2009, - "name": "lock", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1623, - "src": "5001:4:5", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "5001:4:5" - } - ], - "name": "mint", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2008, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2007, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 2150, - "src": "4980:10:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2006, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4980:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4979:12:5" - }, - "returnParameters": { - "id": 2013, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2012, - "name": "liquidity", - "nodeType": "VariableDeclaration", - "scope": 2150, - "src": "5015:14:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2011, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5015:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5014:16:5" - }, - "scope": 2624, - "src": "4966:1220:5", - "stateMutability": "nonpayable", - "superFunction": 3052, - "visibility": "external" - }, - { - "body": { - "id": 2313, - "nodeType": "Block", - "src": "6372:1368:5", - "statements": [ - { - "assignments": [ - 2162, - 2164, - null - ], - "declarations": [ - { - "constant": false, - "id": 2162, - "name": "_reserve0", - "nodeType": "VariableDeclaration", - "scope": 2313, - "src": "6383:17:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 2161, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "6383:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2164, - "name": "_reserve1", - "nodeType": "VariableDeclaration", - "scope": 2313, - "src": "6402:17:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 2163, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "6402:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "internal" - }, - null - ], - "id": 2167, - "initialValue": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2165, - "name": "getReserves", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1645, - "src": "6424:11:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint112_$_t_uint112_$_t_uint32_$", - "typeString": "function () view returns (uint112,uint112,uint32)" - } - }, - "id": 2166, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6424:13:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$_t_uint32_$", - "typeString": "tuple(uint112,uint112,uint32)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6382:55:5" - }, - { - "assignments": [ - 2169 - ], - "declarations": [ - { - "constant": false, - "id": 2169, - "name": "_token0", - "nodeType": "VariableDeclaration", - "scope": 2313, - "src": "6462:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2168, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6462:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2171, - "initialValue": { - "argumentTypes": null, - "id": 2170, - "name": "token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1584, - "src": "6480:6:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6462:24:5" - }, - { - "assignments": [ - 2173 - ], - "declarations": [ - { - "constant": false, - "id": 2173, - "name": "_token1", - "nodeType": "VariableDeclaration", - "scope": 2313, - "src": "6542:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2172, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6542:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2175, - "initialValue": { - "argumentTypes": null, - "id": 2174, - "name": "token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1586, - "src": "6560:6:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6542:24:5" - }, - { - "assignments": [ - 2177 - ], - "declarations": [ - { - "constant": false, - "id": 2177, - "name": "balance0", - "nodeType": "VariableDeclaration", - "scope": 2313, - "src": "6622:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2176, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "6622:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2186, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2183, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3862, - "src": "6672:4:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - ], - "id": 2182, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6664:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 2184, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6664:13:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2179, - "name": "_token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2169, - "src": "6645:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2178, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3177, - "src": "6638:6:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$3177_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 2180, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6638:15:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$3177", - "typeString": "contract IERC20" - } - }, - "id": 2181, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 3138, - "src": "6638:25:5", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 2185, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6638:40:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6622:56:5" - }, - { - "assignments": [ - 2188 - ], - "declarations": [ - { - "constant": false, - "id": 2188, - "name": "balance1", - "nodeType": "VariableDeclaration", - "scope": 2313, - "src": "6688:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2187, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "6688:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2197, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2194, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3862, - "src": "6738:4:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - ], - "id": 2193, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6730:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 2195, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6730:13:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2190, - "name": "_token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2173, - "src": "6711:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2189, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3177, - "src": "6704:6:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$3177_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 2191, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6704:15:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$3177", - "typeString": "contract IERC20" - } - }, - "id": 2192, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 3138, - "src": "6704:25:5", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 2196, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6704:40:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6688:56:5" - }, - { - "assignments": [ - 2199 - ], - "declarations": [ - { - "constant": false, - "id": 2199, - "name": "liquidity", - "nodeType": "VariableDeclaration", - "scope": 2313, - "src": "6754:14:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2198, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "6754:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2205, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 2200, - "name": "balanceOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 283, - "src": "6771:9:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 2204, - "indexExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2202, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3862, - "src": "6789:4:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - ], - "id": 2201, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6781:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 2203, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6781:13:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "6771:24:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6754:41:5" - }, - { - "assignments": [ - 2207 - ], - "declarations": [ - { - "constant": false, - "id": 2207, - "name": "feeOn", - "nodeType": "VariableDeclaration", - "scope": 2313, - "src": "6806:10:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2206, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "6806:4:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2212, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2209, - "name": "_reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2162, - "src": "6828:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - { - "argumentTypes": null, - "id": 2210, - "name": "_reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2164, - "src": "6839:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "id": 2208, - "name": "_mintFee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2005, - "src": "6819:8:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint112_$_t_uint112_$returns$_t_bool_$", - "typeString": "function (uint112,uint112) returns (bool)" - } - }, - "id": 2211, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6819:30:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6806:43:5" - }, - { - "assignments": [ - 2214 - ], - "declarations": [ - { - "constant": false, - "id": 2214, - "name": "_totalSupply", - "nodeType": "VariableDeclaration", - "scope": 2313, - "src": "6859:17:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2213, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "6859:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2216, - "initialValue": { - "argumentTypes": null, - "id": 2215, - "name": "totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 279, - "src": "6879:11:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6859:31:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 2224, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 2217, - "name": "amount0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2157, - "src": "6978:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2223, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2220, - "name": "balance0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2177, - "src": "7002:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 2218, - "name": "liquidity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2199, - "src": "6988:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2219, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "mul", - "nodeType": "MemberAccess", - "referencedDeclaration": 3354, - "src": "6988:13:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2221, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6988:23:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 2222, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2214, - "src": "7014:12:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6988:38:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6978:48:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2225, - "nodeType": "ExpressionStatement", - "src": "6978:48:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 2233, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 2226, - "name": "amount1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2159, - "src": "7084:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2232, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2229, - "name": "balance1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2188, - "src": "7108:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 2227, - "name": "liquidity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2199, - "src": "7094:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2228, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "mul", - "nodeType": "MemberAccess", - "referencedDeclaration": 3354, - "src": "7094:13:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2230, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7094:23:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 2231, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2214, - "src": "7120:12:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7094:38:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7084:48:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2234, - "nodeType": "ExpressionStatement", - "src": "7084:48:5" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 2242, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2238, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2236, - "name": "amount0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2157, - "src": "7198:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 2237, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7208:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "7198:11:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2241, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2239, - "name": "amount1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2159, - "src": "7213:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 2240, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7223:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "7213:11:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "7198:26:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544", - "id": 2243, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7226:43:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_9386f520401b74573e409cf63c7f8288561f268923616731a54cb905ef111b4c", - "typeString": "literal_string \"DXswapPair: INSUFFICIENT_LIQUIDITY_BURNED\"" - }, - "value": "DXswapPair: INSUFFICIENT_LIQUIDITY_BURNED" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_9386f520401b74573e409cf63c7f8288561f268923616731a54cb905ef111b4c", - "typeString": "literal_string \"DXswapPair: INSUFFICIENT_LIQUIDITY_BURNED\"" - } - ], - "id": 2235, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "7190:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2244, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7190:80:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2245, - "nodeType": "ExpressionStatement", - "src": "7190:80:5" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2248, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3862, - "src": "7294:4:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - ], - "id": 2247, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7286:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 2249, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7286:13:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2250, - "name": "liquidity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2199, - "src": "7301:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2246, - "name": "_burn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 415, - "src": "7280:5:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 2251, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7280:31:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2252, - "nodeType": "ExpressionStatement", - "src": "7280:31:5" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2254, - "name": "_token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2169, - "src": "7335:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2255, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2152, - "src": "7344:2:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2256, - "name": "amount0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2157, - "src": "7348:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2253, - "name": "_safeTransfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1687, - "src": "7321:13:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 2257, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7321:35:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2258, - "nodeType": "ExpressionStatement", - "src": "7321:35:5" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2260, - "name": "_token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2173, - "src": "7380:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2261, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2152, - "src": "7389:2:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2262, - "name": "amount1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2159, - "src": "7393:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2259, - "name": "_safeTransfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1687, - "src": "7366:13:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 2263, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7366:35:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2264, - "nodeType": "ExpressionStatement", - "src": "7366:35:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 2274, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 2265, - "name": "balance0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2177, - "src": "7411:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2271, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3862, - "src": "7456:4:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - ], - "id": 2270, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7448:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 2272, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7448:13:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2267, - "name": "_token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2169, - "src": "7429:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2266, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3177, - "src": "7422:6:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$3177_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 2268, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7422:15:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$3177", - "typeString": "contract IERC20" - } - }, - "id": 2269, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 3138, - "src": "7422:25:5", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 2273, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7422:40:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7411:51:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2275, - "nodeType": "ExpressionStatement", - "src": "7411:51:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 2285, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 2276, - "name": "balance1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2188, - "src": "7472:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2282, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3862, - "src": "7517:4:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - ], - "id": 2281, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7509:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 2283, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7509:13:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2278, - "name": "_token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2173, - "src": "7490:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2277, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3177, - "src": "7483:6:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$3177_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 2279, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7483:15:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$3177", - "typeString": "contract IERC20" - } - }, - "id": 2280, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 3138, - "src": "7483:25:5", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 2284, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7483:40:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7472:51:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2286, - "nodeType": "ExpressionStatement", - "src": "7472:51:5" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2288, - "name": "balance0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2177, - "src": "7542:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 2289, - "name": "balance1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2188, - "src": "7552:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 2290, - "name": "_reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2162, - "src": "7562:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - { - "argumentTypes": null, - "id": 2291, - "name": "_reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2164, - "src": "7573:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "id": 2287, - "name": "_update", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1891, - "src": "7534:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint112_$_t_uint112_$returns$__$", - "typeString": "function (uint256,uint256,uint112,uint112)" - } - }, - "id": 2292, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7534:49:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2293, - "nodeType": "ExpressionStatement", - "src": "7534:49:5" - }, - { - "condition": { - "argumentTypes": null, - "id": 2294, - "name": "feeOn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2207, - "src": "7597:5:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 2304, - "nodeType": "IfStatement", - "src": "7593:47:5", - "trueBody": { - "expression": { - "argumentTypes": null, - "id": 2302, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 2295, - "name": "kLast", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1598, - "src": "7604:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2300, - "name": "reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1590, - "src": "7631:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2297, - "name": "reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1588, - "src": "7617:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "id": 2296, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7612:4:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint" - }, - "id": 2298, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7612:14:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2299, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "mul", - "nodeType": "MemberAccess", - "referencedDeclaration": 3354, - "src": "7612:18:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2301, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7612:28:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7604:36:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2303, - "nodeType": "ExpressionStatement", - "src": "7604:36:5" - } - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 2306, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "7700:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2307, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "7700:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 2308, - "name": "amount0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2157, - "src": "7712:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 2309, - "name": "amount1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2159, - "src": "7721:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 2310, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2152, - "src": "7730:2:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2305, - "name": "Burn", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1705 - ], - "referencedDeclaration": 1705, - "src": "7695:4:5", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_address_$returns$__$", - "typeString": "function (address,uint256,uint256,address)" - } - }, - "id": 2311, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7695:38:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2312, - "nodeType": "EmitStatement", - "src": "7690:43:5" - } - ] - }, - "documentation": null, - "id": 2314, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 2155, - "modifierName": { - "argumentTypes": null, - "id": 2154, - "name": "lock", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1623, - "src": "6330:4:5", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "6330:4:5" - } - ], - "name": "burn", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2153, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2152, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 2314, - "src": "6309:10:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2151, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6309:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "6308:12:5" - }, - "returnParameters": { - "id": 2160, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2157, - "name": "amount0", - "nodeType": "VariableDeclaration", - "scope": 2314, - "src": "6344:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2156, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "6344:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2159, - "name": "amount1", - "nodeType": "VariableDeclaration", - "scope": 2314, - "src": "6358:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2158, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "6358:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "6343:28:5" - }, - "scope": 2624, - "src": "6295:1445:5", - "stateMutability": "nonpayable", - "superFunction": 3061, - "visibility": "external" - }, - { - "body": { - "id": 2547, - "nodeType": "Block", - "src": "7944:1786:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 2334, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2330, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2328, - "name": "amount0Out", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2316, - "src": "7962:10:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 2329, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7975:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "7962:14:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2333, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2331, - "name": "amount1Out", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2318, - "src": "7980:10:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 2332, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7993:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "7980:14:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "7962:32:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54", - "id": 2335, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7996:40:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_72d7c681d312ee71bce07161880582e26f38f96c5b8ce02295bde9b364e304bd", - "typeString": "literal_string \"DXswapPair: INSUFFICIENT_OUTPUT_AMOUNT\"" - }, - "value": "DXswapPair: INSUFFICIENT_OUTPUT_AMOUNT" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_72d7c681d312ee71bce07161880582e26f38f96c5b8ce02295bde9b364e304bd", - "typeString": "literal_string \"DXswapPair: INSUFFICIENT_OUTPUT_AMOUNT\"" - } - ], - "id": 2327, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "7954:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2336, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7954:83:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2337, - "nodeType": "ExpressionStatement", - "src": "7954:83:5" - }, - { - "assignments": [ - 2339, - 2341, - null - ], - "declarations": [ - { - "constant": false, - "id": 2339, - "name": "_reserve0", - "nodeType": "VariableDeclaration", - "scope": 2547, - "src": "8048:17:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 2338, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "8048:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2341, - "name": "_reserve1", - "nodeType": "VariableDeclaration", - "scope": 2547, - "src": "8067:17:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 2340, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "8067:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "internal" - }, - null - ], - "id": 2344, - "initialValue": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2342, - "name": "getReserves", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1645, - "src": "8089:11:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint112_$_t_uint112_$_t_uint32_$", - "typeString": "function () view returns (uint112,uint112,uint32)" - } - }, - "id": 2343, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8089:13:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint112_$_t_uint112_$_t_uint32_$", - "typeString": "tuple(uint112,uint112,uint32)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8047:55:5" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 2352, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2348, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2346, - "name": "amount0Out", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2316, - "src": "8135:10:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 2347, - "name": "_reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2339, - "src": "8148:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "src": "8135:22:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2351, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2349, - "name": "amount1Out", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2318, - "src": "8161:10:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 2350, - "name": "_reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2341, - "src": "8174:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "src": "8161:22:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "8135:48:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "445873776170506169723a20494e53554646494349454e545f4c4951554944495459", - "id": 2353, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8185:36:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_604d3aed60e481548df2f65ab5610bdd6bfe918936e7e7a402dcca49eac2574c", - "typeString": "literal_string \"DXswapPair: INSUFFICIENT_LIQUIDITY\"" - }, - "value": "DXswapPair: INSUFFICIENT_LIQUIDITY" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_604d3aed60e481548df2f65ab5610bdd6bfe918936e7e7a402dcca49eac2574c", - "typeString": "literal_string \"DXswapPair: INSUFFICIENT_LIQUIDITY\"" - } - ], - "id": 2345, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "8127:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2354, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8127:95:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2355, - "nodeType": "ExpressionStatement", - "src": "8127:95:5" - }, - { - "assignments": [ - 2357 - ], - "declarations": [ - { - "constant": false, - "id": 2357, - "name": "balance0", - "nodeType": "VariableDeclaration", - "scope": 2547, - "src": "8233:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2356, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "8233:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2358, - "initialValue": null, - "nodeType": "VariableDeclarationStatement", - "src": "8233:13:5" - }, - { - "assignments": [ - 2360 - ], - "declarations": [ - { - "constant": false, - "id": 2360, - "name": "balance1", - "nodeType": "VariableDeclaration", - "scope": 2547, - "src": "8256:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2359, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "8256:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2361, - "initialValue": null, - "nodeType": "VariableDeclarationStatement", - "src": "8256:13:5" - }, - { - "id": 2439, - "nodeType": "Block", - "src": "8279:636:5", - "statements": [ - { - "assignments": [ - 2363 - ], - "declarations": [ - { - "constant": false, - "id": 2363, - "name": "_token0", - "nodeType": "VariableDeclaration", - "scope": 2439, - "src": "8344:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2362, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8344:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2365, - "initialValue": { - "argumentTypes": null, - "id": 2364, - "name": "token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1584, - "src": "8362:6:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8344:24:5" - }, - { - "assignments": [ - 2367 - ], - "declarations": [ - { - "constant": false, - "id": 2367, - "name": "_token1", - "nodeType": "VariableDeclaration", - "scope": 2439, - "src": "8378:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2366, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8378:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2369, - "initialValue": { - "argumentTypes": null, - "id": 2368, - "name": "token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1586, - "src": "8396:6:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8378:24:5" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 2377, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 2373, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2371, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2320, - "src": "8420:2:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "id": 2372, - "name": "_token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2363, - "src": "8426:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "8420:13:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 2376, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2374, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2320, - "src": "8437:2:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "id": 2375, - "name": "_token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2367, - "src": "8443:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "8437:13:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "8420:30:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "445873776170506169723a20494e56414c49445f544f", - "id": 2378, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8452:24:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_b219d89b952047267fc41249411104cb684e8ca828f44343fad879c5379c767b", - "typeString": "literal_string \"DXswapPair: INVALID_TO\"" - }, - "value": "DXswapPair: INVALID_TO" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_b219d89b952047267fc41249411104cb684e8ca828f44343fad879c5379c767b", - "typeString": "literal_string \"DXswapPair: INVALID_TO\"" - } - ], - "id": 2370, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "8412:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2379, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8412:65:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2380, - "nodeType": "ExpressionStatement", - "src": "8412:65:5" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2383, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2381, - "name": "amount0Out", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2316, - "src": "8491:10:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 2382, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8504:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "8491:14:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 2390, - "nodeType": "IfStatement", - "src": "8487:58:5", - "trueBody": { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2385, - "name": "_token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2363, - "src": "8521:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2386, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2320, - "src": "8530:2:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2387, - "name": "amount0Out", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2316, - "src": "8534:10:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2384, - "name": "_safeTransfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1687, - "src": "8507:13:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 2388, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8507:38:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2389, - "nodeType": "ExpressionStatement", - "src": "8507:38:5" - } - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2393, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2391, - "name": "amount1Out", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2318, - "src": "8593:10:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 2392, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8606:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "8593:14:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 2400, - "nodeType": "IfStatement", - "src": "8589:58:5", - "trueBody": { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2395, - "name": "_token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2367, - "src": "8623:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2396, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2320, - "src": "8632:2:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2397, - "name": "amount1Out", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2318, - "src": "8636:10:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2394, - "name": "_safeTransfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1687, - "src": "8609:13:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 2398, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8609:38:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2399, - "nodeType": "ExpressionStatement", - "src": "8609:38:5" - } - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2404, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 2401, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2322, - "src": "8695:4:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 2402, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "8695:11:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 2403, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8709:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "8695:15:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 2416, - "nodeType": "IfStatement", - "src": "8691:91:5", - "trueBody": { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 2409, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "8741:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2410, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "8741:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 2411, - "name": "amount0Out", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2316, - "src": "8753:10:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 2412, - "name": "amount1Out", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2318, - "src": "8765:10:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 2413, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2322, - "src": "8777:4:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2406, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2320, - "src": "8726:2:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2405, - "name": "IDXswapCallee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2638, - "src": "8712:13:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IDXswapCallee_$2638_$", - "typeString": "type(contract IDXswapCallee)" - } - }, - "id": 2407, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8712:17:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDXswapCallee_$2638", - "typeString": "contract IDXswapCallee" - } - }, - "id": 2408, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "DXswapCall", - "nodeType": "MemberAccess", - "referencedDeclaration": 2637, - "src": "8712:28:5", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (address,uint256,uint256,bytes memory) external" - } - }, - "id": 2414, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8712:70:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2415, - "nodeType": "ExpressionStatement", - "src": "8712:70:5" - } - }, - { - "expression": { - "argumentTypes": null, - "id": 2426, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 2417, - "name": "balance0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2357, - "src": "8792:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2423, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3862, - "src": "8837:4:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - ], - "id": 2422, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8829:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 2424, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8829:13:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2419, - "name": "_token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2363, - "src": "8810:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2418, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3177, - "src": "8803:6:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$3177_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 2420, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8803:15:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$3177", - "typeString": "contract IERC20" - } - }, - "id": 2421, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 3138, - "src": "8803:25:5", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 2425, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8803:40:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "8792:51:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2427, - "nodeType": "ExpressionStatement", - "src": "8792:51:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 2437, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 2428, - "name": "balance1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2360, - "src": "8853:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2434, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3862, - "src": "8898:4:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - ], - "id": 2433, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8890:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 2435, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8890:13:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2430, - "name": "_token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2367, - "src": "8871:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2429, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3177, - "src": "8864:6:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$3177_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 2431, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8864:15:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$3177", - "typeString": "contract IERC20" - } - }, - "id": 2432, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 3138, - "src": "8864:25:5", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 2436, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8864:40:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "8853:51:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2438, - "nodeType": "ExpressionStatement", - "src": "8853:51:5" - } - ] - }, - { - "assignments": [ - 2441 - ], - "declarations": [ - { - "constant": false, - "id": 2441, - "name": "amount0In", - "nodeType": "VariableDeclaration", - "scope": 2547, - "src": "8924:14:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2440, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "8924:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2455, - "initialValue": { - "argumentTypes": null, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2446, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2442, - "name": "balance0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2357, - "src": "8941:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2445, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2443, - "name": "_reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2339, - "src": "8952:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 2444, - "name": "amount0Out", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2316, - "src": "8964:10:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "8952:22:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "8941:33:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 2453, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9015:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "id": 2454, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "8941:75:5", - "trueExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2452, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2447, - "name": "balance0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2357, - "src": "8977:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2450, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2448, - "name": "_reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2339, - "src": "8989:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 2449, - "name": "amount0Out", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2316, - "src": "9001:10:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "8989:22:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 2451, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "8988:24:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "8977:35:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8924:92:5" - }, - { - "assignments": [ - 2457 - ], - "declarations": [ - { - "constant": false, - "id": 2457, - "name": "amount1In", - "nodeType": "VariableDeclaration", - "scope": 2547, - "src": "9026:14:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2456, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "9026:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2471, - "initialValue": { - "argumentTypes": null, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2462, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2458, - "name": "balance1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2360, - "src": "9043:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2461, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2459, - "name": "_reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2341, - "src": "9054:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 2460, - "name": "amount1Out", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2318, - "src": "9066:10:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9054:22:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9043:33:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 2469, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9117:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "id": 2470, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "9043:75:5", - "trueExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2468, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2463, - "name": "balance1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2360, - "src": "9079:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2466, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2464, - "name": "_reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2341, - "src": "9091:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 2465, - "name": "amount1Out", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2318, - "src": "9103:10:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9091:22:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 2467, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "9090:24:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9079:35:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9026:92:5" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 2479, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2475, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2473, - "name": "amount0In", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2441, - "src": "9136:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 2474, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9148:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "9136:13:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2478, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2476, - "name": "amount1In", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2457, - "src": "9153:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 2477, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9165:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "9153:13:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "9136:30:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54", - "id": 2480, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9168:39:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_8d76a0ec84cba25623d887db1a49d24b2a6dc7befbb6c30e541baa2ae3f4e44d", - "typeString": "literal_string \"DXswapPair: INSUFFICIENT_INPUT_AMOUNT\"" - }, - "value": "DXswapPair: INSUFFICIENT_INPUT_AMOUNT" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_8d76a0ec84cba25623d887db1a49d24b2a6dc7befbb6c30e541baa2ae3f4e44d", - "typeString": "literal_string \"DXswapPair: INSUFFICIENT_INPUT_AMOUNT\"" - } - ], - "id": 2472, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "9128:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2481, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9128:80:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2482, - "nodeType": "ExpressionStatement", - "src": "9128:80:5" - }, - { - "id": 2529, - "nodeType": "Block", - "src": "9218:365:5", - "statements": [ - { - "assignments": [ - 2484 - ], - "declarations": [ - { - "constant": false, - "id": 2484, - "name": "balance0Adjusted", - "nodeType": "VariableDeclaration", - "scope": 2529, - "src": "9294:21:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2483, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "9294:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2495, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2492, - "name": "swapFee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1601, - "src": "9356:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "expression": { - "argumentTypes": null, - "id": 2490, - "name": "amount0In", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2441, - "src": "9342:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2491, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "mul", - "nodeType": "MemberAccess", - "referencedDeclaration": 3354, - "src": "9342:13:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2493, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9342:22:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "3130303030", - "id": 2487, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9331:5:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_10000_by_1", - "typeString": "int_const 10000" - }, - "value": "10000" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_10000_by_1", - "typeString": "int_const 10000" - } - ], - "expression": { - "argumentTypes": null, - "id": 2485, - "name": "balance0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2357, - "src": "9318:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2486, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "mul", - "nodeType": "MemberAccess", - "referencedDeclaration": 3354, - "src": "9318:12:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2488, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9318:19:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2489, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 3326, - "src": "9318:23:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2494, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9318:47:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9294:71:5" - }, - { - "assignments": [ - 2497 - ], - "declarations": [ - { - "constant": false, - "id": 2497, - "name": "balance1Adjusted", - "nodeType": "VariableDeclaration", - "scope": 2529, - "src": "9377:21:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2496, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "9377:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2508, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2505, - "name": "swapFee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1601, - "src": "9439:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "expression": { - "argumentTypes": null, - "id": 2503, - "name": "amount1In", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2457, - "src": "9425:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2504, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "mul", - "nodeType": "MemberAccess", - "referencedDeclaration": 3354, - "src": "9425:13:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2506, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9425:22:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "3130303030", - "id": 2500, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9414:5:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_10000_by_1", - "typeString": "int_const 10000" - }, - "value": "10000" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_10000_by_1", - "typeString": "int_const 10000" - } - ], - "expression": { - "argumentTypes": null, - "id": 2498, - "name": "balance1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2360, - "src": "9401:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2499, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "mul", - "nodeType": "MemberAccess", - "referencedDeclaration": 3354, - "src": "9401:12:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2501, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9401:19:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2502, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 3326, - "src": "9401:23:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2507, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9401:47:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9377:71:5" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2525, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2512, - "name": "balance1Adjusted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2497, - "src": "9489:16:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 2510, - "name": "balance0Adjusted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2484, - "src": "9468:16:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2511, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "mul", - "nodeType": "MemberAccess", - "referencedDeclaration": 3354, - "src": "9468:20:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2513, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9468:38:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_rational_100000000_by_1", - "typeString": "int_const 100000000" - }, - "id": 2523, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "3130303030", - "id": 2521, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9545:5:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_10000_by_1", - "typeString": "int_const 10000" - }, - "value": "10000" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 2522, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9552:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "9545:8:5", - "typeDescriptions": { - "typeIdentifier": "t_rational_100000000_by_1", - "typeString": "int_const 100000000" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_100000000_by_1", - "typeString": "int_const 100000000" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2518, - "name": "_reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2341, - "src": "9530:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2515, - "name": "_reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2339, - "src": "9515:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "id": 2514, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9510:4:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint" - }, - "id": 2516, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9510:15:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2517, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "mul", - "nodeType": "MemberAccess", - "referencedDeclaration": 3354, - "src": "9510:19:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2519, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9510:30:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2520, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "mul", - "nodeType": "MemberAccess", - "referencedDeclaration": 3354, - "src": "9510:34:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2524, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9510:44:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9468:86:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "445873776170506169723a204b", - "id": 2526, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9556:15:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_7fd5b0b31b138af5a47b3a51b3592694e55bcba71467c6dbe6d9619a37aa4b66", - "typeString": "literal_string \"DXswapPair: K\"" - }, - "value": "DXswapPair: K" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_7fd5b0b31b138af5a47b3a51b3592694e55bcba71467c6dbe6d9619a37aa4b66", - "typeString": "literal_string \"DXswapPair: K\"" - } - ], - "id": 2509, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "9460:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2527, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9460:112:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2528, - "nodeType": "ExpressionStatement", - "src": "9460:112:5" - } - ] - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2531, - "name": "balance0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2357, - "src": "9601:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 2532, - "name": "balance1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2360, - "src": "9611:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 2533, - "name": "_reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2339, - "src": "9621:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - { - "argumentTypes": null, - "id": 2534, - "name": "_reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2341, - "src": "9632:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "id": 2530, - "name": "_update", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1891, - "src": "9593:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint112_$_t_uint112_$returns$__$", - "typeString": "function (uint256,uint256,uint112,uint112)" - } - }, - "id": 2535, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9593:49:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2536, - "nodeType": "ExpressionStatement", - "src": "9593:49:5" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 2538, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "9662:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2539, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "9662:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 2540, - "name": "amount0In", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2441, - "src": "9674:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 2541, - "name": "amount1In", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2457, - "src": "9685:9:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 2542, - "name": "amount0Out", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2316, - "src": "9696:10:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 2543, - "name": "amount1Out", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2318, - "src": "9708:10:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 2544, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2320, - "src": "9720:2:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2537, - "name": "Swap", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1719 - ], - "referencedDeclaration": 1719, - "src": "9657:4:5", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$returns$__$", - "typeString": "function (address,uint256,uint256,uint256,uint256,address)" - } - }, - "id": 2545, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9657:66:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2546, - "nodeType": "EmitStatement", - "src": "9652:71:5" - } - ] - }, - "documentation": null, - "id": 2548, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 2325, - "modifierName": { - "argumentTypes": null, - "id": 2324, - "name": "lock", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1623, - "src": "7939:4:5", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "7939:4:5" - } - ], - "name": "swap", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2323, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2316, - "name": "amount0Out", - "nodeType": "VariableDeclaration", - "scope": 2548, - "src": "7863:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2315, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "7863:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2318, - "name": "amount1Out", - "nodeType": "VariableDeclaration", - "scope": 2548, - "src": "7880:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2317, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "7880:4:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2320, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 2548, - "src": "7897:10:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2319, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7897:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2322, - "name": "data", - "nodeType": "VariableDeclaration", - "scope": 2548, - "src": "7909:19:5", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2321, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "7909:5:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "7862:67:5" - }, - "returnParameters": { - "id": 2326, - "nodeType": "ParameterList", - "parameters": [], - "src": "7944:0:5" - }, - "scope": 2624, - "src": "7849:1881:5", - "stateMutability": "nonpayable", - "superFunction": 3072, - "visibility": "external" - }, - { - "body": { - "id": 2595, - "nodeType": "Block", - "src": "9816:289:5", - "statements": [ - { - "assignments": [ - 2556 - ], - "declarations": [ - { - "constant": false, - "id": 2556, - "name": "_token0", - "nodeType": "VariableDeclaration", - "scope": 2595, - "src": "9826:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2555, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9826:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2558, - "initialValue": { - "argumentTypes": null, - "id": 2557, - "name": "token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1584, - "src": "9844:6:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9826:24:5" - }, - { - "assignments": [ - 2560 - ], - "declarations": [ - { - "constant": false, - "id": 2560, - "name": "_token1", - "nodeType": "VariableDeclaration", - "scope": 2595, - "src": "9875:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2559, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9875:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2562, - "initialValue": { - "argumentTypes": null, - "id": 2561, - "name": "token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1586, - "src": "9893:6:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9875:24:5" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2564, - "name": "_token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2556, - "src": "9938:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2565, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2550, - "src": "9947:2:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2575, - "name": "reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1588, - "src": "9996:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2571, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3862, - "src": "9985:4:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - ], - "id": 2570, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9977:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 2572, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9977:13:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2567, - "name": "_token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2556, - "src": "9958:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2566, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3177, - "src": "9951:6:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$3177_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 2568, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9951:15:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$3177", - "typeString": "contract IERC20" - } - }, - "id": 2569, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 3138, - "src": "9951:25:5", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 2573, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9951:40:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2574, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 3326, - "src": "9951:44:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2576, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9951:54:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2563, - "name": "_safeTransfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1687, - "src": "9924:13:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 2577, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9924:82:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2578, - "nodeType": "ExpressionStatement", - "src": "9924:82:5" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2580, - "name": "_token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2560, - "src": "10030:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2581, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2550, - "src": "10039:2:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2591, - "name": "reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1590, - "src": "10088:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2587, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3862, - "src": "10077:4:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - ], - "id": 2586, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "10069:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 2588, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "10069:13:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2583, - "name": "_token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2560, - "src": "10050:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2582, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3177, - "src": "10043:6:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$3177_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 2584, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "10043:15:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$3177", - "typeString": "contract IERC20" - } - }, - "id": 2585, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 3138, - "src": "10043:25:5", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 2589, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "10043:40:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2590, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 3326, - "src": "10043:44:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 2592, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "10043:54:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2579, - "name": "_safeTransfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1687, - "src": "10016:13:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 2593, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "10016:82:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2594, - "nodeType": "ExpressionStatement", - "src": "10016:82:5" - } - ] - }, - "documentation": null, - "id": 2596, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 2553, - "modifierName": { - "argumentTypes": null, - "id": 2552, - "name": "lock", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1623, - "src": "9811:4:5", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "9811:4:5" - } - ], - "name": "skim", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2551, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2550, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 2596, - "src": "9790:10:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2549, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9790:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "9789:12:5" - }, - "returnParameters": { - "id": 2554, - "nodeType": "ParameterList", - "parameters": [], - "src": "9816:0:5" - }, - "scope": 2624, - "src": "9776:329:5", - "stateMutability": "nonpayable", - "superFunction": 3077, - "visibility": "external" - }, - { - "body": { - "id": 2622, - "nodeType": "Block", - "src": "10181:126:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2607, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3862, - "src": "10232:4:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - ], - "id": 2606, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "10224:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 2608, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "10224:13:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2603, - "name": "token0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1584, - "src": "10206:6:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2602, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3177, - "src": "10199:6:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$3177_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 2604, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "10199:14:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$3177", - "typeString": "contract IERC20" - } - }, - "id": 2605, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 3138, - "src": "10199:24:5", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 2609, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "10199:39:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2615, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3862, - "src": "10273:4:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DXswapPair_$2624", - "typeString": "contract DXswapPair" - } - ], - "id": 2614, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "10265:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 2616, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "10265:13:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2611, - "name": "token1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1586, - "src": "10247:6:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2610, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3177, - "src": "10240:6:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$3177_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 2612, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "10240:14:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$3177", - "typeString": "contract IERC20" - } - }, - "id": 2613, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 3138, - "src": "10240:24:5", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 2617, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "10240:39:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 2618, - "name": "reserve0", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1588, - "src": "10281:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - { - "argumentTypes": null, - "id": 2619, - "name": "reserve1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1590, - "src": "10291:8:5", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "id": 2601, - "name": "_update", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1891, - "src": "10191:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint112_$_t_uint112_$returns$__$", - "typeString": "function (uint256,uint256,uint112,uint112)" - } - }, - "id": 2620, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "10191:109:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2621, - "nodeType": "ExpressionStatement", - "src": "10191:109:5" - } - ] - }, - "documentation": null, - "id": 2623, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 2599, - "modifierName": { - "argumentTypes": null, - "id": 2598, - "name": "lock", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1623, - "src": "10176:4:5", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "10176:4:5" - } - ], - "name": "sync", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2597, - "nodeType": "ParameterList", - "parameters": [], - "src": "10164:2:5" - }, - "returnParameters": { - "id": 2600, - "nodeType": "ParameterList", - "parameters": [], - "src": "10181:0:5" - }, - "scope": 2624, - "src": "10151:156:5", - "stateMutability": "nonpayable", - "superFunction": 3080, - "visibility": "external" - } - ], - "scope": 2625, - "src": "278:10031:5" - } - ], - "src": "0:10310:5" - } - }, - "contracts/interfaces/IDXswapCallee.sol": { - "id": 6, - "AST": { - "absolutePath": "contracts/interfaces/IDXswapCallee.sol", - "exportedSymbols": { - "IDXswapCallee": [ - 2638 - ] - }, - "id": 2639, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2626, - "literals": [ - "solidity", - ">=", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:24:6" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "interface", - "documentation": null, - "fullyImplemented": false, - "id": 2638, - "linearizedBaseContracts": [ - 2638 - ], - "name": "IDXswapCallee", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": null, - "documentation": null, - "id": 2637, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "DXswapCall", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2635, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2628, - "name": "sender", - "nodeType": "VariableDeclaration", - "scope": 2637, - "src": "76:14:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2627, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "76:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2630, - "name": "amount0", - "nodeType": "VariableDeclaration", - "scope": 2637, - "src": "92:12:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2629, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "92:4:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2632, - "name": "amount1", - "nodeType": "VariableDeclaration", - "scope": 2637, - "src": "106:12:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2631, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "106:4:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2634, - "name": "data", - "nodeType": "VariableDeclaration", - "scope": 2637, - "src": "120:19:6", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2633, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "120:5:6", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "75:65:6" - }, - "returnParameters": { - "id": 2636, - "nodeType": "ParameterList", - "parameters": [], - "src": "149:0:6" - }, - "scope": 2638, - "src": "56:94:6", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - } - ], - "scope": 2639, - "src": "26:126:6" - } - ], - "src": "0:153:6" - } - }, - "contracts/interfaces/IDXswapERC20.sol": { - "id": 7, - "AST": { - "absolutePath": "contracts/interfaces/IDXswapERC20.sol", - "exportedSymbols": { - "IDXswapERC20": [ - 2756 - ] - }, - "id": 2757, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2640, - "literals": [ - "solidity", - ">=", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:24:7" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "interface", - "documentation": null, - "fullyImplemented": false, - "id": 2756, - "linearizedBaseContracts": [ - 2756 - ], - "name": "IDXswapERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": null, - "id": 2648, - "name": "Approval", - "nodeType": "EventDefinition", - "parameters": { - "id": 2647, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2642, - "indexed": true, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 2648, - "src": "70:21:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2641, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "70:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2644, - "indexed": true, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 2648, - "src": "93:23:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2643, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "93:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2646, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 2648, - "src": "118:10:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2645, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "118:4:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "69:60:7" - }, - "src": "55:75:7" - }, - { - "anonymous": false, - "documentation": null, - "id": 2656, - "name": "Transfer", - "nodeType": "EventDefinition", - "parameters": { - "id": 2655, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2650, - "indexed": true, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 2656, - "src": "150:20:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2649, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "150:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2652, - "indexed": true, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 2656, - "src": "172:18:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2651, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "172:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2654, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 2656, - "src": "192:10:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2653, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "192:4:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "149:54:7" - }, - "src": "135:69:7" - }, - { - "body": null, - "documentation": null, - "id": 2661, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "name", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2657, - "nodeType": "ParameterList", - "parameters": [], - "src": "223:2:7" - }, - "returnParameters": { - "id": 2660, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2659, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2661, - "src": "249:13:7", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 2658, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "249:6:7", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "248:15:7" - }, - "scope": 2756, - "src": "210:54:7", - "stateMutability": "pure", - "superFunction": 2864, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2666, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "symbol", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2662, - "nodeType": "ParameterList", - "parameters": [], - "src": "284:2:7" - }, - "returnParameters": { - "id": 2665, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2664, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2666, - "src": "310:13:7", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 2663, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "310:6:7", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "309:15:7" - }, - "scope": 2756, - "src": "269:56:7", - "stateMutability": "pure", - "superFunction": 2869, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2671, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "decimals", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2667, - "nodeType": "ParameterList", - "parameters": [], - "src": "347:2:7" - }, - "returnParameters": { - "id": 2670, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2669, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2671, - "src": "373:5:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 2668, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "373:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "372:7:7" - }, - "scope": 2756, - "src": "330:50:7", - "stateMutability": "pure", - "superFunction": 2874, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2676, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "totalSupply", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2672, - "nodeType": "ParameterList", - "parameters": [], - "src": "405:2:7" - }, - "returnParameters": { - "id": 2675, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2674, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2676, - "src": "431:4:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2673, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "431:4:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "430:6:7" - }, - "scope": 2756, - "src": "385:52:7", - "stateMutability": "view", - "superFunction": 2879, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2683, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "balanceOf", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2679, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2678, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 2683, - "src": "461:13:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2677, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "461:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "460:15:7" - }, - "returnParameters": { - "id": 2682, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2681, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2683, - "src": "499:4:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2680, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "499:4:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "498:6:7" - }, - "scope": 2756, - "src": "442:63:7", - "stateMutability": "view", - "superFunction": 2886, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2692, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2688, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2685, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 2692, - "src": "529:13:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2684, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "529:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2687, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 2692, - "src": "544:15:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2686, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "544:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "528:32:7" - }, - "returnParameters": { - "id": 2691, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2690, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2692, - "src": "584:4:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2689, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "584:4:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "583:6:7" - }, - "scope": 2756, - "src": "510:80:7", - "stateMutability": "view", - "superFunction": 2895, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2701, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "approve", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2697, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2694, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 2701, - "src": "613:15:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2693, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "613:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2696, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 2701, - "src": "630:10:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2695, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "630:4:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "612:29:7" - }, - "returnParameters": { - "id": 2700, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2699, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2701, - "src": "660:4:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2698, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "660:4:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "659:6:7" - }, - "scope": 2756, - "src": "596:70:7", - "stateMutability": "nonpayable", - "superFunction": 2904, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2710, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2706, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2703, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 2710, - "src": "689:10:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2702, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "689:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2705, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 2710, - "src": "701:10:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2704, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "701:4:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "688:24:7" - }, - "returnParameters": { - "id": 2709, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2708, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2710, - "src": "731:4:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2707, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "731:4:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "730:6:7" - }, - "scope": 2756, - "src": "671:66:7", - "stateMutability": "nonpayable", - "superFunction": 2913, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2721, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2717, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2712, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 2721, - "src": "764:12:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2711, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "764:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2714, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 2721, - "src": "778:10:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2713, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "778:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2716, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 2721, - "src": "790:10:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2715, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "790:4:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "763:38:7" - }, - "returnParameters": { - "id": 2720, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2719, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2721, - "src": "820:4:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2718, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "820:4:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "819:6:7" - }, - "scope": 2756, - "src": "742:84:7", - "stateMutability": "nonpayable", - "superFunction": 2924, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2726, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "DOMAIN_SEPARATOR", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2722, - "nodeType": "ParameterList", - "parameters": [], - "src": "857:2:7" - }, - "returnParameters": { - "id": 2725, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2724, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2726, - "src": "883:7:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2723, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "883:7:7", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "882:9:7" - }, - "scope": 2756, - "src": "832:60:7", - "stateMutability": "view", - "superFunction": 2929, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2731, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "PERMIT_TYPEHASH", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2727, - "nodeType": "ParameterList", - "parameters": [], - "src": "921:2:7" - }, - "returnParameters": { - "id": 2730, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2729, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2731, - "src": "947:7:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2728, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "947:7:7", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "946:9:7" - }, - "scope": 2756, - "src": "897:59:7", - "stateMutability": "pure", - "superFunction": 2934, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2738, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "nonces", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2734, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2733, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 2738, - "src": "977:13:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2732, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "977:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "976:15:7" - }, - "returnParameters": { - "id": 2737, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2736, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2738, - "src": "1015:4:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2735, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1015:4:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1014:6:7" - }, - "scope": 2756, - "src": "961:60:7", - "stateMutability": "view", - "superFunction": 2941, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2755, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "permit", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2753, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2740, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 2755, - "src": "1043:13:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2739, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1043:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2742, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 2755, - "src": "1058:15:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2741, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1058:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2744, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 2755, - "src": "1075:10:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2743, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1075:4:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2746, - "name": "deadline", - "nodeType": "VariableDeclaration", - "scope": 2755, - "src": "1087:13:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2745, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1087:4:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2748, - "name": "v", - "nodeType": "VariableDeclaration", - "scope": 2755, - "src": "1102:7:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 2747, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "1102:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2750, - "name": "r", - "nodeType": "VariableDeclaration", - "scope": 2755, - "src": "1111:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2749, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1111:7:7", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2752, - "name": "s", - "nodeType": "VariableDeclaration", - "scope": 2755, - "src": "1122:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2751, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1122:7:7", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1042:90:7" - }, - "returnParameters": { - "id": 2754, - "nodeType": "ParameterList", - "parameters": [], - "src": "1141:0:7" - }, - "scope": 2756, - "src": "1027:115:7", - "stateMutability": "nonpayable", - "superFunction": 2958, - "visibility": "external" - } - ], - "scope": 2757, - "src": "26:1118:7" - } - ], - "src": "0:1145:7" - } - }, - "contracts/interfaces/IDXswapFactory.sol": { - "id": 8, - "AST": { - "absolutePath": "contracts/interfaces/IDXswapFactory.sol", - "exportedSymbols": { - "IDXswapFactory": [ - 2841 - ] - }, - "id": 2842, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2758, - "literals": [ - "solidity", - ">=", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:24:8" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "interface", - "documentation": null, - "fullyImplemented": false, - "id": 2841, - "linearizedBaseContracts": [ - 2841 - ], - "name": "IDXswapFactory", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": null, - "id": 2768, - "name": "PairCreated", - "nodeType": "EventDefinition", - "parameters": { - "id": 2767, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2760, - "indexed": true, - "name": "token0", - "nodeType": "VariableDeclaration", - "scope": 2768, - "src": "75:22:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2759, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "75:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2762, - "indexed": true, - "name": "token1", - "nodeType": "VariableDeclaration", - "scope": 2768, - "src": "99:22:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2761, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "99:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2764, - "indexed": false, - "name": "pair", - "nodeType": "VariableDeclaration", - "scope": 2768, - "src": "123:12:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2763, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "123:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2766, - "indexed": false, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2768, - "src": "137:4:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2765, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "137:4:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "74:68:8" - }, - "src": "57:86:8" - }, - { - "body": null, - "documentation": null, - "id": 2773, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "INIT_CODE_PAIR_HASH", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2769, - "nodeType": "ParameterList", - "parameters": [], - "src": "177:2:8" - }, - "returnParameters": { - "id": 2772, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2771, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2773, - "src": "203:7:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2770, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "203:7:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "202:9:8" - }, - "scope": 2841, - "src": "149:63:8", - "stateMutability": "pure", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2778, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "feeTo", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2774, - "nodeType": "ParameterList", - "parameters": [], - "src": "231:2:8" - }, - "returnParameters": { - "id": 2777, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2776, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2778, - "src": "257:7:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2775, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "257:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "256:9:8" - }, - "scope": 2841, - "src": "217:49:8", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2783, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "protocolFeeDenominator", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2779, - "nodeType": "ParameterList", - "parameters": [], - "src": "302:2:8" - }, - "returnParameters": { - "id": 2782, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2781, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2783, - "src": "328:5:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 2780, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "328:5:8", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "327:7:8" - }, - "scope": 2841, - "src": "271:64:8", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2788, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "feeToSetter", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2784, - "nodeType": "ParameterList", - "parameters": [], - "src": "360:2:8" - }, - "returnParameters": { - "id": 2787, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2786, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2788, - "src": "386:7:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2785, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "386:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "385:9:8" - }, - "scope": 2841, - "src": "340:55:8", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2797, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getPair", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2793, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2790, - "name": "tokenA", - "nodeType": "VariableDeclaration", - "scope": 2797, - "src": "418:14:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2789, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "418:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2792, - "name": "tokenB", - "nodeType": "VariableDeclaration", - "scope": 2797, - "src": "434:14:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2791, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "434:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "417:32:8" - }, - "returnParameters": { - "id": 2796, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2795, - "name": "pair", - "nodeType": "VariableDeclaration", - "scope": 2797, - "src": "473:12:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2794, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "473:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "472:14:8" - }, - "scope": 2841, - "src": "401:86:8", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2804, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allPairs", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2800, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2799, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2804, - "src": "510:4:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2798, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "510:4:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "509:6:8" - }, - "returnParameters": { - "id": 2803, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2802, - "name": "pair", - "nodeType": "VariableDeclaration", - "scope": 2804, - "src": "539:12:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2801, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "539:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "538:14:8" - }, - "scope": 2841, - "src": "492:61:8", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2809, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allPairsLength", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2805, - "nodeType": "ParameterList", - "parameters": [], - "src": "581:2:8" - }, - "returnParameters": { - "id": 2808, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2807, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2809, - "src": "607:4:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2806, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "607:4:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "606:6:8" - }, - "scope": 2841, - "src": "558:55:8", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2818, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "createPair", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2814, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2811, - "name": "tokenA", - "nodeType": "VariableDeclaration", - "scope": 2818, - "src": "639:14:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2810, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "639:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2813, - "name": "tokenB", - "nodeType": "VariableDeclaration", - "scope": 2818, - "src": "655:14:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2812, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "655:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "638:32:8" - }, - "returnParameters": { - "id": 2817, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2816, - "name": "pair", - "nodeType": "VariableDeclaration", - "scope": 2818, - "src": "689:12:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2815, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "689:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "688:14:8" - }, - "scope": 2841, - "src": "619:84:8", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2823, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setFeeTo", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2821, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2820, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2823, - "src": "727:7:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2819, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "727:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "726:9:8" - }, - "returnParameters": { - "id": 2822, - "nodeType": "ParameterList", - "parameters": [], - "src": "744:0:8" - }, - "scope": 2841, - "src": "709:36:8", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2828, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setFeeToSetter", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2826, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2825, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2828, - "src": "774:7:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2824, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "774:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "773:9:8" - }, - "returnParameters": { - "id": 2827, - "nodeType": "ParameterList", - "parameters": [], - "src": "791:0:8" - }, - "scope": 2841, - "src": "750:42:8", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2833, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setProtocolFee", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2831, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2830, - "name": "_protocolFee", - "nodeType": "VariableDeclaration", - "scope": 2833, - "src": "821:18:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 2829, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "821:5:8", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "820:20:8" - }, - "returnParameters": { - "id": 2832, - "nodeType": "ParameterList", - "parameters": [], - "src": "849:0:8" - }, - "scope": 2841, - "src": "797:53:8", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2840, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setSwapFee", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2838, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2835, - "name": "pair", - "nodeType": "VariableDeclaration", - "scope": 2840, - "src": "875:12:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2834, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "875:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2837, - "name": "swapFee", - "nodeType": "VariableDeclaration", - "scope": 2840, - "src": "889:14:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 2836, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "889:6:8", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "874:30:8" - }, - "returnParameters": { - "id": 2839, - "nodeType": "ParameterList", - "parameters": [], - "src": "913:0:8" - }, - "scope": 2841, - "src": "855:59:8", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - } - ], - "scope": 2842, - "src": "26:890:8" - } - ], - "src": "0:917:8" - } - }, - "contracts/interfaces/IDXswapPair.sol": { - "id": 9, - "AST": { - "absolutePath": "contracts/interfaces/IDXswapPair.sol", - "exportedSymbols": { - "IDXswapPair": [ - 3093 - ] - }, - "id": 3094, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2843, - "literals": [ - "solidity", - ">=", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:24:9" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "interface", - "documentation": null, - "fullyImplemented": false, - "id": 3093, - "linearizedBaseContracts": [ - 3093 - ], - "name": "IDXswapPair", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": null, - "id": 2851, - "name": "Approval", - "nodeType": "EventDefinition", - "parameters": { - "id": 2850, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2845, - "indexed": true, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 2851, - "src": "69:21:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2844, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "69:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2847, - "indexed": true, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 2851, - "src": "92:23:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2846, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "92:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2849, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 2851, - "src": "117:10:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2848, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "117:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "68:60:9" - }, - "src": "54:75:9" - }, - { - "anonymous": false, - "documentation": null, - "id": 2859, - "name": "Transfer", - "nodeType": "EventDefinition", - "parameters": { - "id": 2858, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2853, - "indexed": true, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 2859, - "src": "149:20:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2852, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "149:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2855, - "indexed": true, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 2859, - "src": "171:18:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2854, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "171:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2857, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 2859, - "src": "191:10:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2856, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "191:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "148:54:9" - }, - "src": "134:69:9" - }, - { - "body": null, - "documentation": null, - "id": 2864, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "name", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2860, - "nodeType": "ParameterList", - "parameters": [], - "src": "222:2:9" - }, - "returnParameters": { - "id": 2863, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2862, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2864, - "src": "248:13:9", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 2861, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "248:6:9", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "247:15:9" - }, - "scope": 3093, - "src": "209:54:9", - "stateMutability": "pure", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2869, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "symbol", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2865, - "nodeType": "ParameterList", - "parameters": [], - "src": "283:2:9" - }, - "returnParameters": { - "id": 2868, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2867, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2869, - "src": "309:13:9", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 2866, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "309:6:9", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "308:15:9" - }, - "scope": 3093, - "src": "268:56:9", - "stateMutability": "pure", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2874, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "decimals", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2870, - "nodeType": "ParameterList", - "parameters": [], - "src": "346:2:9" - }, - "returnParameters": { - "id": 2873, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2872, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2874, - "src": "372:5:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 2871, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "372:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "371:7:9" - }, - "scope": 3093, - "src": "329:50:9", - "stateMutability": "pure", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2879, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "totalSupply", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2875, - "nodeType": "ParameterList", - "parameters": [], - "src": "404:2:9" - }, - "returnParameters": { - "id": 2878, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2877, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2879, - "src": "430:4:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2876, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "430:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "429:6:9" - }, - "scope": 3093, - "src": "384:52:9", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2886, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "balanceOf", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2882, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2881, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 2886, - "src": "460:13:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2880, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "460:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "459:15:9" - }, - "returnParameters": { - "id": 2885, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2884, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2886, - "src": "498:4:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2883, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "498:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "497:6:9" - }, - "scope": 3093, - "src": "441:63:9", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2895, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2891, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2888, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 2895, - "src": "528:13:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2887, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "528:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2890, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 2895, - "src": "543:15:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2889, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "543:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "527:32:9" - }, - "returnParameters": { - "id": 2894, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2893, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2895, - "src": "583:4:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2892, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "583:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "582:6:9" - }, - "scope": 3093, - "src": "509:80:9", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2904, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "approve", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2900, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2897, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 2904, - "src": "612:15:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2896, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "612:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2899, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 2904, - "src": "629:10:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2898, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "629:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "611:29:9" - }, - "returnParameters": { - "id": 2903, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2902, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2904, - "src": "659:4:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2901, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "659:4:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "658:6:9" - }, - "scope": 3093, - "src": "595:70:9", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2913, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2909, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2906, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 2913, - "src": "688:10:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2905, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "688:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2908, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 2913, - "src": "700:10:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2907, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "700:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "687:24:9" - }, - "returnParameters": { - "id": 2912, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2911, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2913, - "src": "730:4:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2910, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "730:4:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "729:6:9" - }, - "scope": 3093, - "src": "670:66:9", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2924, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2920, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2915, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 2924, - "src": "763:12:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2914, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "763:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2917, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 2924, - "src": "777:10:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2916, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "777:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2919, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 2924, - "src": "789:10:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2918, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "789:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "762:38:9" - }, - "returnParameters": { - "id": 2923, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2922, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2924, - "src": "819:4:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2921, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "819:4:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "818:6:9" - }, - "scope": 3093, - "src": "741:84:9", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2929, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "DOMAIN_SEPARATOR", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2925, - "nodeType": "ParameterList", - "parameters": [], - "src": "856:2:9" - }, - "returnParameters": { - "id": 2928, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2927, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2929, - "src": "882:7:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2926, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "882:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "881:9:9" - }, - "scope": 3093, - "src": "831:60:9", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2934, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "PERMIT_TYPEHASH", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2930, - "nodeType": "ParameterList", - "parameters": [], - "src": "920:2:9" - }, - "returnParameters": { - "id": 2933, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2932, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2934, - "src": "946:7:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2931, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "946:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "945:9:9" - }, - "scope": 3093, - "src": "896:59:9", - "stateMutability": "pure", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2941, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "nonces", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2937, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2936, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 2941, - "src": "976:13:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2935, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "976:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "975:15:9" - }, - "returnParameters": { - "id": 2940, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2939, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2941, - "src": "1014:4:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2938, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1014:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1013:6:9" - }, - "scope": 3093, - "src": "960:60:9", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2958, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "permit", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2956, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2943, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 2958, - "src": "1042:13:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2942, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1042:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2945, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 2958, - "src": "1057:15:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2944, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1057:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2947, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 2958, - "src": "1074:10:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2946, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1074:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2949, - "name": "deadline", - "nodeType": "VariableDeclaration", - "scope": 2958, - "src": "1086:13:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2948, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1086:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2951, - "name": "v", - "nodeType": "VariableDeclaration", - "scope": 2958, - "src": "1101:7:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 2950, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "1101:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2953, - "name": "r", - "nodeType": "VariableDeclaration", - "scope": 2958, - "src": "1110:9:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2952, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1110:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2955, - "name": "s", - "nodeType": "VariableDeclaration", - "scope": 2958, - "src": "1121:9:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2954, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1121:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1041:90:9" - }, - "returnParameters": { - "id": 2957, - "nodeType": "ParameterList", - "parameters": [], - "src": "1140:0:9" - }, - "scope": 3093, - "src": "1026:115:9", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "anonymous": false, - "documentation": null, - "id": 2966, - "name": "Mint", - "nodeType": "EventDefinition", - "parameters": { - "id": 2965, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2960, - "indexed": true, - "name": "sender", - "nodeType": "VariableDeclaration", - "scope": 2966, - "src": "1158:22:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2959, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1158:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2962, - "indexed": false, - "name": "amount0", - "nodeType": "VariableDeclaration", - "scope": 2966, - "src": "1182:12:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2961, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1182:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2964, - "indexed": false, - "name": "amount1", - "nodeType": "VariableDeclaration", - "scope": 2966, - "src": "1196:12:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2963, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1196:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1157:52:9" - }, - "src": "1147:63:9" - }, - { - "anonymous": false, - "documentation": null, - "id": 2976, - "name": "Burn", - "nodeType": "EventDefinition", - "parameters": { - "id": 2975, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2968, - "indexed": true, - "name": "sender", - "nodeType": "VariableDeclaration", - "scope": 2976, - "src": "1226:22:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2967, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1226:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2970, - "indexed": false, - "name": "amount0", - "nodeType": "VariableDeclaration", - "scope": 2976, - "src": "1250:12:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2969, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1250:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2972, - "indexed": false, - "name": "amount1", - "nodeType": "VariableDeclaration", - "scope": 2976, - "src": "1264:12:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2971, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1264:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2974, - "indexed": true, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 2976, - "src": "1278:18:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2973, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1278:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1225:72:9" - }, - "src": "1215:83:9" - }, - { - "anonymous": false, - "documentation": null, - "id": 2990, - "name": "Swap", - "nodeType": "EventDefinition", - "parameters": { - "id": 2989, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2978, - "indexed": true, - "name": "sender", - "nodeType": "VariableDeclaration", - "scope": 2990, - "src": "1323:22:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2977, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1323:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2980, - "indexed": false, - "name": "amount0In", - "nodeType": "VariableDeclaration", - "scope": 2990, - "src": "1355:14:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2979, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1355:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2982, - "indexed": false, - "name": "amount1In", - "nodeType": "VariableDeclaration", - "scope": 2990, - "src": "1379:14:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2981, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1379:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2984, - "indexed": false, - "name": "amount0Out", - "nodeType": "VariableDeclaration", - "scope": 2990, - "src": "1403:15:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2983, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1403:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2986, - "indexed": false, - "name": "amount1Out", - "nodeType": "VariableDeclaration", - "scope": 2990, - "src": "1428:15:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2985, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1428:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2988, - "indexed": true, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 2990, - "src": "1453:18:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2987, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1453:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1313:164:9" - }, - "src": "1303:175:9" - }, - { - "anonymous": false, - "documentation": null, - "id": 2996, - "name": "Sync", - "nodeType": "EventDefinition", - "parameters": { - "id": 2995, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2992, - "indexed": false, - "name": "reserve0", - "nodeType": "VariableDeclaration", - "scope": 2996, - "src": "1494:16:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 2991, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "1494:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2994, - "indexed": false, - "name": "reserve1", - "nodeType": "VariableDeclaration", - "scope": 2996, - "src": "1512:16:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 2993, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "1512:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1493:36:9" - }, - "src": "1483:47:9" - }, - { - "body": null, - "documentation": null, - "id": 3001, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "MINIMUM_LIQUIDITY", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2997, - "nodeType": "ParameterList", - "parameters": [], - "src": "1562:2:9" - }, - "returnParameters": { - "id": 3000, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2999, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3001, - "src": "1588:4:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2998, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1588:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1587:6:9" - }, - "scope": 3093, - "src": "1536:58:9", - "stateMutability": "pure", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3006, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "factory", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3002, - "nodeType": "ParameterList", - "parameters": [], - "src": "1615:2:9" - }, - "returnParameters": { - "id": 3005, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3004, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3006, - "src": "1641:7:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3003, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1641:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1640:9:9" - }, - "scope": 3093, - "src": "1599:51:9", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3011, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "token0", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3007, - "nodeType": "ParameterList", - "parameters": [], - "src": "1670:2:9" - }, - "returnParameters": { - "id": 3010, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3009, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3011, - "src": "1696:7:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3008, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1696:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1695:9:9" - }, - "scope": 3093, - "src": "1655:50:9", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3016, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "token1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3012, - "nodeType": "ParameterList", - "parameters": [], - "src": "1725:2:9" - }, - "returnParameters": { - "id": 3015, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3014, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3016, - "src": "1751:7:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3013, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1751:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1750:9:9" - }, - "scope": 3093, - "src": "1710:50:9", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3025, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getReserves", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3017, - "nodeType": "ParameterList", - "parameters": [], - "src": "1785:2:9" - }, - "returnParameters": { - "id": 3024, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3019, - "name": "reserve0", - "nodeType": "VariableDeclaration", - "scope": 3025, - "src": "1811:16:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 3018, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "1811:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3021, - "name": "reserve1", - "nodeType": "VariableDeclaration", - "scope": 3025, - "src": "1829:16:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 3020, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "1829:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3023, - "name": "blockTimestampLast", - "nodeType": "VariableDeclaration", - "scope": 3025, - "src": "1847:25:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3022, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1847:6:9", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1810:63:9" - }, - "scope": 3093, - "src": "1765:109:9", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3030, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "price0CumulativeLast", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3026, - "nodeType": "ParameterList", - "parameters": [], - "src": "1908:2:9" - }, - "returnParameters": { - "id": 3029, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3028, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3030, - "src": "1934:4:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3027, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1934:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1933:6:9" - }, - "scope": 3093, - "src": "1879:61:9", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3035, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "price1CumulativeLast", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3031, - "nodeType": "ParameterList", - "parameters": [], - "src": "1974:2:9" - }, - "returnParameters": { - "id": 3034, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3033, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3035, - "src": "2000:4:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3032, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2000:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1999:6:9" - }, - "scope": 3093, - "src": "1945:61:9", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3040, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "kLast", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3036, - "nodeType": "ParameterList", - "parameters": [], - "src": "2025:2:9" - }, - "returnParameters": { - "id": 3039, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3038, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3040, - "src": "2051:4:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3037, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2051:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2050:6:9" - }, - "scope": 3093, - "src": "2011:46:9", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3045, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "swapFee", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3041, - "nodeType": "ParameterList", - "parameters": [], - "src": "2078:2:9" - }, - "returnParameters": { - "id": 3044, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3043, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3045, - "src": "2104:6:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3042, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2104:6:9", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2103:8:9" - }, - "scope": 3093, - "src": "2062:50:9", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3052, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "mint", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3048, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3047, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 3052, - "src": "2132:10:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3046, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2132:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2131:12:9" - }, - "returnParameters": { - "id": 3051, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3050, - "name": "liquidity", - "nodeType": "VariableDeclaration", - "scope": 3052, - "src": "2162:14:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3049, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2162:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2161:16:9" - }, - "scope": 3093, - "src": "2118:60:9", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3061, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "burn", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3055, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3054, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 3061, - "src": "2197:10:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3053, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2197:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2196:12:9" - }, - "returnParameters": { - "id": 3060, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3057, - "name": "amount0", - "nodeType": "VariableDeclaration", - "scope": 3061, - "src": "2227:12:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3056, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2227:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3059, - "name": "amount1", - "nodeType": "VariableDeclaration", - "scope": 3061, - "src": "2241:12:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3058, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2241:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2226:28:9" - }, - "scope": 3093, - "src": "2183:72:9", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3072, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "swap", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3070, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3063, - "name": "amount0Out", - "nodeType": "VariableDeclaration", - "scope": 3072, - "src": "2274:15:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3062, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2274:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3065, - "name": "amount1Out", - "nodeType": "VariableDeclaration", - "scope": 3072, - "src": "2291:15:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3064, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2291:4:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3067, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 3072, - "src": "2308:10:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3066, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2308:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3069, - "name": "data", - "nodeType": "VariableDeclaration", - "scope": 3072, - "src": "2320:19:9", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3068, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2320:5:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2273:67:9" - }, - "returnParameters": { - "id": 3071, - "nodeType": "ParameterList", - "parameters": [], - "src": "2349:0:9" - }, - "scope": 3093, - "src": "2260:90:9", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3077, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "skim", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3075, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3074, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 3077, - "src": "2369:10:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3073, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2369:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2368:12:9" - }, - "returnParameters": { - "id": 3076, - "nodeType": "ParameterList", - "parameters": [], - "src": "2389:0:9" - }, - "scope": 3093, - "src": "2355:35:9", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3080, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "sync", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3078, - "nodeType": "ParameterList", - "parameters": [], - "src": "2408:2:9" - }, - "returnParameters": { - "id": 3079, - "nodeType": "ParameterList", - "parameters": [], - "src": "2419:0:9" - }, - "scope": 3093, - "src": "2395:25:9", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3087, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "initialize", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3085, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3082, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3087, - "src": "2446:7:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3081, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2446:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3084, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3087, - "src": "2455:7:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3083, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2455:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2445:18:9" - }, - "returnParameters": { - "id": 3086, - "nodeType": "ParameterList", - "parameters": [], - "src": "2472:0:9" - }, - "scope": 3093, - "src": "2426:47:9", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3092, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setSwapFee", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3090, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3089, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3092, - "src": "2498:6:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3088, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2498:6:9", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2497:8:9" - }, - "returnParameters": { - "id": 3091, - "nodeType": "ParameterList", - "parameters": [], - "src": "2514:0:9" - }, - "scope": 3093, - "src": "2478:37:9", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - } - ], - "scope": 3094, - "src": "26:2491:9" - } - ], - "src": "0:2518:9" - } - }, - "contracts/interfaces/IERC20.sol": { - "id": 10, - "AST": { - "absolutePath": "contracts/interfaces/IERC20.sol", - "exportedSymbols": { - "IERC20": [ - 3177 - ] - }, - "id": 3178, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 3095, - "literals": [ - "solidity", - ">=", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:24:10" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "interface", - "documentation": null, - "fullyImplemented": false, - "id": 3177, - "linearizedBaseContracts": [ - 3177 - ], - "name": "IERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": null, - "id": 3103, - "name": "Approval", - "nodeType": "EventDefinition", - "parameters": { - "id": 3102, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3097, - "indexed": true, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 3103, - "src": "64:21:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3096, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "64:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3099, - "indexed": true, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 3103, - "src": "87:23:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3098, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "87:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3101, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 3103, - "src": "112:10:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3100, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "112:4:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "63:60:10" - }, - "src": "49:75:10" - }, - { - "anonymous": false, - "documentation": null, - "id": 3111, - "name": "Transfer", - "nodeType": "EventDefinition", - "parameters": { - "id": 3110, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3105, - "indexed": true, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 3111, - "src": "144:20:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3104, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "144:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3107, - "indexed": true, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 3111, - "src": "166:18:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3106, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "166:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3109, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 3111, - "src": "186:10:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3108, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "186:4:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "143:54:10" - }, - "src": "129:69:10" - }, - { - "body": null, - "documentation": null, - "id": 3116, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "name", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3112, - "nodeType": "ParameterList", - "parameters": [], - "src": "217:2:10" - }, - "returnParameters": { - "id": 3115, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3114, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3116, - "src": "243:13:10", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 3113, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "243:6:10", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "242:15:10" - }, - "scope": 3177, - "src": "204:54:10", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3121, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "symbol", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3117, - "nodeType": "ParameterList", - "parameters": [], - "src": "278:2:10" - }, - "returnParameters": { - "id": 3120, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3119, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3121, - "src": "304:13:10", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 3118, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "304:6:10", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "303:15:10" - }, - "scope": 3177, - "src": "263:56:10", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3126, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "decimals", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3122, - "nodeType": "ParameterList", - "parameters": [], - "src": "341:2:10" - }, - "returnParameters": { - "id": 3125, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3124, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3126, - "src": "367:5:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 3123, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "367:5:10", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "366:7:10" - }, - "scope": 3177, - "src": "324:50:10", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3131, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "totalSupply", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3127, - "nodeType": "ParameterList", - "parameters": [], - "src": "399:2:10" - }, - "returnParameters": { - "id": 3130, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3129, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3131, - "src": "425:4:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3128, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "425:4:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "424:6:10" - }, - "scope": 3177, - "src": "379:52:10", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3138, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "balanceOf", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3134, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3133, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 3138, - "src": "455:13:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3132, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "455:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "454:15:10" - }, - "returnParameters": { - "id": 3137, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3136, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3138, - "src": "493:4:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3135, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "493:4:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "492:6:10" - }, - "scope": 3177, - "src": "436:63:10", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3147, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3143, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3140, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 3147, - "src": "523:13:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3139, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "523:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3142, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 3147, - "src": "538:15:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3141, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "538:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "522:32:10" - }, - "returnParameters": { - "id": 3146, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3145, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3147, - "src": "578:4:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3144, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "578:4:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "577:6:10" - }, - "scope": 3177, - "src": "504:80:10", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3156, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "approve", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3152, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3149, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 3156, - "src": "607:15:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3148, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "607:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3151, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 3156, - "src": "624:10:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3150, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "624:4:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "606:29:10" - }, - "returnParameters": { - "id": 3155, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3154, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3156, - "src": "654:4:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3153, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "654:4:10", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "653:6:10" - }, - "scope": 3177, - "src": "590:70:10", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3165, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3161, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3158, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 3165, - "src": "683:10:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3157, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "683:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3160, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 3165, - "src": "695:10:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3159, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "695:4:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "682:24:10" - }, - "returnParameters": { - "id": 3164, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3163, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3165, - "src": "725:4:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3162, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "725:4:10", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "724:6:10" - }, - "scope": 3177, - "src": "665:66:10", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3176, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3172, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3167, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 3176, - "src": "758:12:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3166, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "758:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3169, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 3176, - "src": "772:10:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3168, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "772:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3171, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 3176, - "src": "784:10:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3170, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "784:4:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "757:38:10" - }, - "returnParameters": { - "id": 3175, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3174, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3176, - "src": "814:4:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3173, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "814:4:10", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "813:6:10" - }, - "scope": 3177, - "src": "736:84:10", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - } - ], - "scope": 3178, - "src": "26:796:10" - } - ], - "src": "0:823:10" - } - }, - "contracts/interfaces/IWETH.sol": { - "id": 11, - "AST": { - "absolutePath": "contracts/interfaces/IWETH.sol", - "exportedSymbols": { - "IWETH": [ - 3204 - ] - }, - "id": 3205, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 3179, - "literals": [ - "solidity", - ">=", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:24:11" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "interface", - "documentation": null, - "fullyImplemented": false, - "id": 3204, - "linearizedBaseContracts": [ - 3204 - ], - "name": "IWETH", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": null, - "documentation": null, - "id": 3182, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "deposit", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3180, - "nodeType": "ParameterList", - "parameters": [], - "src": "64:2:11" - }, - "returnParameters": { - "id": 3181, - "nodeType": "ParameterList", - "parameters": [], - "src": "83:0:11" - }, - "scope": 3204, - "src": "48:36:11", - "stateMutability": "payable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3191, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3187, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3184, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 3191, - "src": "107:10:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3183, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "107:7:11", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3186, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 3191, - "src": "119:10:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3185, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "119:4:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "106:24:11" - }, - "returnParameters": { - "id": 3190, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3189, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3191, - "src": "149:4:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3188, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "149:4:11", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "148:6:11" - }, - "scope": 3204, - "src": "89:66:11", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3196, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "withdraw", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3194, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3193, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3196, - "src": "178:4:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3192, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "178:4:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "177:6:11" - }, - "returnParameters": { - "id": 3195, - "nodeType": "ParameterList", - "parameters": [], - "src": "192:0:11" - }, - "scope": 3204, - "src": "160:33:11", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 3203, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "balanceOf", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3199, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3198, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 3203, - "src": "217:13:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3197, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "217:7:11", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "216:15:11" - }, - "returnParameters": { - "id": 3202, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3201, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3203, - "src": "255:4:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3200, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "255:4:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "254:6:11" - }, - "scope": 3204, - "src": "198:63:11", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - } - ], - "scope": 3205, - "src": "26:237:11" - } - ], - "src": "0:264:11" - } - }, - "contracts/libraries/Math.sol": { - "id": 12, - "AST": { - "absolutePath": "contracts/libraries/Math.sol", - "exportedSymbols": { - "Math": [ - 3280 - ] - }, - "id": 3281, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 3206, - "literals": [ - "solidity", - "=", - "0.5", - ".16" - ], - "nodeType": "PragmaDirective", - "src": "0:24:12" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": null, - "fullyImplemented": true, - "id": 3280, - "linearizedBaseContracts": [ - 3280 - ], - "name": "Math", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 3224, - "nodeType": "Block", - "src": "158:34:12", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 3222, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 3215, - "name": "z", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3213, - "src": "168:1:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3218, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 3216, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3208, - "src": "172:1:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 3217, - "name": "y", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3210, - "src": "176:1:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "172:5:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "argumentTypes": null, - "id": 3220, - "name": "y", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3210, - "src": "184:1:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3221, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "172:13:12", - "trueExpression": { - "argumentTypes": null, - "id": 3219, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3208, - "src": "180:1:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "168:17:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3223, - "nodeType": "ExpressionStatement", - "src": "168:17:12" - } - ] - }, - "documentation": null, - "id": 3225, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "min", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3211, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3208, - "name": "x", - "nodeType": "VariableDeclaration", - "scope": 3225, - "src": "111:6:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3207, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "111:4:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3210, - "name": "y", - "nodeType": "VariableDeclaration", - "scope": 3225, - "src": "119:6:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3209, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "119:4:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "110:16:12" - }, - "returnParameters": { - "id": 3214, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3213, - "name": "z", - "nodeType": "VariableDeclaration", - "scope": 3225, - "src": "150:6:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3212, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "150:4:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "149:8:12" - }, - "scope": 3280, - "src": "98:94:12", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 3278, - "nodeType": "Block", - "src": "360:239:12", - "statements": [ - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3234, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 3232, - "name": "y", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3227, - "src": "374:1:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "33", - "id": 3233, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "378:1:12", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "src": "374:5:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3270, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 3268, - "name": "y", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3227, - "src": "555:1:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 3269, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "560:1:12", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "555:6:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 3276, - "nodeType": "IfStatement", - "src": "551:42:12", - "trueBody": { - "id": 3275, - "nodeType": "Block", - "src": "563:30:12", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 3273, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 3271, - "name": "z", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3230, - "src": "577:1:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "31", - "id": 3272, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "581:1:12", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "577:5:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3274, - "nodeType": "ExpressionStatement", - "src": "577:5:12" - } - ] - } - }, - "id": 3277, - "nodeType": "IfStatement", - "src": "370:223:12", - "trueBody": { - "id": 3267, - "nodeType": "Block", - "src": "381:164:12", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 3237, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 3235, - "name": "z", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3230, - "src": "395:1:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 3236, - "name": "y", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3227, - "src": "399:1:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "395:5:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3238, - "nodeType": "ExpressionStatement", - "src": "395:5:12" - }, - { - "assignments": [ - 3240 - ], - "declarations": [ - { - "constant": false, - "id": 3240, - "name": "x", - "nodeType": "VariableDeclaration", - "scope": 3267, - "src": "414:6:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3239, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "414:4:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 3246, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3245, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3243, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 3241, - "name": "y", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3227, - "src": "423:1:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 3242, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "427:1:12", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "423:5:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 3244, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "431:1:12", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "423:9:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "414:18:12" - }, - { - "body": { - "id": 3265, - "nodeType": "Block", - "src": "460:75:12", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 3252, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 3250, - "name": "z", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3230, - "src": "478:1:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 3251, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3240, - "src": "482:1:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "478:5:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3253, - "nodeType": "ExpressionStatement", - "src": "478:5:12" - }, - { - "expression": { - "argumentTypes": null, - "id": 3263, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 3254, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3240, - "src": "501:1:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3262, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3259, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3257, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 3255, - "name": "y", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3227, - "src": "506:1:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 3256, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3240, - "src": "510:1:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "506:5:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 3258, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3240, - "src": "514:1:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "506:9:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 3260, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "505:11:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 3261, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "519:1:12", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "505:15:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "501:19:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3264, - "nodeType": "ExpressionStatement", - "src": "501:19:12" - } - ] - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3249, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 3247, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3240, - "src": "453:1:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 3248, - "name": "z", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3230, - "src": "457:1:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "453:5:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3266, - "nodeType": "WhileStatement", - "src": "446:89:12" - } - ] - } - } - ] - }, - "documentation": null, - "id": 3279, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "sqrt", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3228, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3227, - "name": "y", - "nodeType": "VariableDeclaration", - "scope": 3279, - "src": "321:6:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3226, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "321:4:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "320:8:12" - }, - "returnParameters": { - "id": 3231, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3230, - "name": "z", - "nodeType": "VariableDeclaration", - "scope": 3279, - "src": "352:6:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3229, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "352:4:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "351:8:12" - }, - "scope": 3280, - "src": "307:292:12", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 3281, - "src": "79:522:12" - } - ], - "src": "0:602:12" - } - }, - "contracts/libraries/SafeMath.sol": { - "id": 13, - "AST": { - "absolutePath": "contracts/libraries/SafeMath.sol", - "exportedSymbols": { - "SafeMath": [ - 3355 - ] - }, - "id": 3356, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 3282, - "literals": [ - "solidity", - "=", - "0.5", - ".16" - ], - "nodeType": "PragmaDirective", - "src": "0:24:13" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": null, - "fullyImplemented": true, - "id": 3355, - "linearizedBaseContracts": [ - 3355 - ], - "name": "SafeMath", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 3303, - "nodeType": "Block", - "src": "215:66:13", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3299, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "id": 3296, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 3292, - "name": "z", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3289, - "src": "234:1:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3295, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 3293, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3284, - "src": "238:1:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 3294, - "name": "y", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3286, - "src": "242:1:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "238:5:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "234:9:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 3297, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "233:11:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 3298, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3284, - "src": "248:1:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "233:16:13", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "64732d6d6174682d6164642d6f766572666c6f77", - "id": 3300, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "251:22:13", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_3903056b84ed2aba2be78662dc6c5c99b160cebe9af9bd9493d0fc28ff16f6db", - "typeString": "literal_string \"ds-math-add-overflow\"" - }, - "value": "ds-math-add-overflow" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_3903056b84ed2aba2be78662dc6c5c99b160cebe9af9bd9493d0fc28ff16f6db", - "typeString": "literal_string \"ds-math-add-overflow\"" - } - ], - "id": 3291, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "225:7:13", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 3301, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "225:49:13", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3302, - "nodeType": "ExpressionStatement", - "src": "225:49:13" - } - ] - }, - "documentation": null, - "id": 3304, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "add", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3287, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3284, - "name": "x", - "nodeType": "VariableDeclaration", - "scope": 3304, - "src": "168:6:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3283, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "168:4:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3286, - "name": "y", - "nodeType": "VariableDeclaration", - "scope": 3304, - "src": "176:6:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3285, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "176:4:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "167:16:13" - }, - "returnParameters": { - "id": 3290, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3289, - "name": "z", - "nodeType": "VariableDeclaration", - "scope": 3304, - "src": "207:6:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3288, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "207:4:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "206:8:13" - }, - "scope": 3355, - "src": "155:126:13", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 3325, - "nodeType": "Block", - "src": "347:67:13", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3321, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "id": 3318, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 3314, - "name": "z", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3311, - "src": "366:1:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3317, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 3315, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3306, - "src": "370:1:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 3316, - "name": "y", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3308, - "src": "374:1:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "370:5:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "366:9:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 3319, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "365:11:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "id": 3320, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3306, - "src": "380:1:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "365:16:13", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "64732d6d6174682d7375622d756e646572666c6f77", - "id": 3322, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "383:23:13", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_03b20b9f6e6e7905f077509fd420fb44afc685f254bcefe49147296e1ba25590", - "typeString": "literal_string \"ds-math-sub-underflow\"" - }, - "value": "ds-math-sub-underflow" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_03b20b9f6e6e7905f077509fd420fb44afc685f254bcefe49147296e1ba25590", - "typeString": "literal_string \"ds-math-sub-underflow\"" - } - ], - "id": 3313, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "357:7:13", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 3323, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "357:50:13", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3324, - "nodeType": "ExpressionStatement", - "src": "357:50:13" - } - ] - }, - "documentation": null, - "id": 3326, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "sub", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3309, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3306, - "name": "x", - "nodeType": "VariableDeclaration", - "scope": 3326, - "src": "300:6:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3305, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "300:4:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3308, - "name": "y", - "nodeType": "VariableDeclaration", - "scope": 3326, - "src": "308:6:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3307, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "308:4:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "299:16:13" - }, - "returnParameters": { - "id": 3312, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3311, - "name": "z", - "nodeType": "VariableDeclaration", - "scope": 3326, - "src": "339:6:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3310, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "339:4:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "338:8:13" - }, - "scope": 3355, - "src": "287:127:13", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 3353, - "nodeType": "Block", - "src": "480:80:13", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 3349, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3338, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 3336, - "name": "y", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3330, - "src": "498:1:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 3337, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "503:1:13", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "498:6:13", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3348, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3346, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "id": 3343, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 3339, - "name": "z", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3333, - "src": "509:1:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3342, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 3340, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3328, - "src": "513:1:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 3341, - "name": "y", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3330, - "src": "517:1:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "513:5:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "509:9:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 3344, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "508:11:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 3345, - "name": "y", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3330, - "src": "522:1:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "508:15:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 3347, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3328, - "src": "527:1:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "508:20:13", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "498:30:13", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "64732d6d6174682d6d756c2d6f766572666c6f77", - "id": 3350, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "530:22:13", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_25a0ef6406c6af6852555433653ce478274cd9f03a5dec44d001868a76b3bfdd", - "typeString": "literal_string \"ds-math-mul-overflow\"" - }, - "value": "ds-math-mul-overflow" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_25a0ef6406c6af6852555433653ce478274cd9f03a5dec44d001868a76b3bfdd", - "typeString": "literal_string \"ds-math-mul-overflow\"" - } - ], - "id": 3335, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "490:7:13", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 3351, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "490:63:13", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3352, - "nodeType": "ExpressionStatement", - "src": "490:63:13" - } - ] - }, - "documentation": null, - "id": 3354, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "mul", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3331, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3328, - "name": "x", - "nodeType": "VariableDeclaration", - "scope": 3354, - "src": "433:6:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3327, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "433:4:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3330, - "name": "y", - "nodeType": "VariableDeclaration", - "scope": 3354, - "src": "441:6:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3329, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "441:4:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "432:16:13" - }, - "returnParameters": { - "id": 3334, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3333, - "name": "z", - "nodeType": "VariableDeclaration", - "scope": 3354, - "src": "472:6:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3332, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "472:4:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "471:8:13" - }, - "scope": 3355, - "src": "420:140:13", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 3356, - "src": "132:430:13" - } - ], - "src": "0:563:13" - } - }, - "contracts/libraries/TransferHelper.sol": { - "id": 14, - "AST": { - "absolutePath": "contracts/libraries/TransferHelper.sol", - "exportedSymbols": { - "TransferHelper": [ - 3513 - ] - }, - "id": 3514, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 3357, - "literals": [ - "solidity", - "=", - "0.5", - ".16" - ], - "nodeType": "PragmaDirective", - "src": "0:24:14" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": null, - "fullyImplemented": true, - "id": 3513, - "linearizedBaseContracts": [ - 3513 - ], - "name": "TransferHelper", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 3398, - "nodeType": "Block", - "src": "235:285:14", - "statements": [ - { - "assignments": [ - 3367, - 3369 - ], - "declarations": [ - { - "constant": false, - "id": 3367, - "name": "success", - "nodeType": "VariableDeclaration", - "scope": 3398, - "src": "311:12:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3366, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "311:4:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3369, - "name": "data", - "nodeType": "VariableDeclaration", - "scope": 3398, - "src": "325:17:14", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3368, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "325:5:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 3379, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30783039356561376233", - "id": 3374, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "380:10:14", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_157198259_by_1", - "typeString": "int_const 157198259" - }, - "value": "0x095ea7b3" - }, - { - "argumentTypes": null, - "id": 3375, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3361, - "src": "392:2:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 3376, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3363, - "src": "396:5:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_157198259_by_1", - "typeString": "int_const 157198259" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 3372, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3817, - "src": "357:3:14", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 3373, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "encodeWithSelector", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "357:22:14", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (bytes4) pure returns (bytes memory)" - } - }, - "id": 3377, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "357:45:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "argumentTypes": null, - "id": 3370, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3359, - "src": "346:5:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 3371, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "call", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "346:10:14", - "typeDescriptions": { - "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes memory) payable returns (bool,bytes memory)" - } - }, - "id": 3378, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "346:57:14", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "310:93:14" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 3394, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 3381, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3367, - "src": "421:7:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 3392, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3385, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 3382, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "433:4:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 3383, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "433:11:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 3384, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "448:1:14", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "433:16:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 3388, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "464:4:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "id": 3389, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "471:4:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bool_$", - "typeString": "type(bool)" - }, - "typeName": "bool" - } - ], - "id": 3390, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "470:6:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bool_$", - "typeString": "type(bool)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_type$_t_bool_$", - "typeString": "type(bool)" - } - ], - "expression": { - "argumentTypes": null, - "id": 3386, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3817, - "src": "453:3:14", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 3387, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "decode", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "453:10:14", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 3391, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "453:24:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "433:44:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 3393, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "432:46:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "421:57:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "5472616e7366657248656c7065723a20415050524f56455f4641494c4544", - "id": 3395, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "480:32:14", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_3e27be550bb5367a6d8a8b2dd8b5c52ee0710d2d5b26de50062207957ab5bd00", - "typeString": "literal_string \"TransferHelper: APPROVE_FAILED\"" - }, - "value": "TransferHelper: APPROVE_FAILED" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_3e27be550bb5367a6d8a8b2dd8b5c52ee0710d2d5b26de50062207957ab5bd00", - "typeString": "literal_string \"TransferHelper: APPROVE_FAILED\"" - } - ], - "id": 3380, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "413:7:14", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 3396, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "413:100:14", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3397, - "nodeType": "ExpressionStatement", - "src": "413:100:14" - } - ] - }, - "documentation": null, - "id": 3399, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeApprove", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3364, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3359, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 3399, - "src": "187:13:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3358, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "187:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3361, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 3399, - "src": "202:10:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3360, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "202:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3363, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 3399, - "src": "214:10:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3362, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "214:4:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "186:39:14" - }, - "returnParameters": { - "id": 3365, - "nodeType": "ParameterList", - "parameters": [], - "src": "235:0:14" - }, - "scope": 3513, - "src": "166:354:14", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 3440, - "nodeType": "Block", - "src": "596:287:14", - "statements": [ - { - "assignments": [ - 3409, - 3411 - ], - "declarations": [ - { - "constant": false, - "id": 3409, - "name": "success", - "nodeType": "VariableDeclaration", - "scope": 3440, - "src": "673:12:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3408, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "673:4:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3411, - "name": "data", - "nodeType": "VariableDeclaration", - "scope": 3440, - "src": "687:17:14", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3410, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "687:5:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 3421, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30786139303539636262", - "id": 3416, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "742:10:14", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2835717307_by_1", - "typeString": "int_const 2835717307" - }, - "value": "0xa9059cbb" - }, - { - "argumentTypes": null, - "id": 3417, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3403, - "src": "754:2:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 3418, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3405, - "src": "758:5:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_2835717307_by_1", - "typeString": "int_const 2835717307" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 3414, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3817, - "src": "719:3:14", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 3415, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "encodeWithSelector", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "719:22:14", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (bytes4) pure returns (bytes memory)" - } - }, - "id": 3419, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "719:45:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "argumentTypes": null, - "id": 3412, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3401, - "src": "708:5:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 3413, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "call", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "708:10:14", - "typeDescriptions": { - "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes memory) payable returns (bool,bytes memory)" - } - }, - "id": 3420, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "708:57:14", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "672:93:14" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 3436, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 3423, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3409, - "src": "783:7:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 3434, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3427, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 3424, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3411, - "src": "795:4:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 3425, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "795:11:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 3426, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "810:1:14", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "795:16:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 3430, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3411, - "src": "826:4:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "id": 3431, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "833:4:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bool_$", - "typeString": "type(bool)" - }, - "typeName": "bool" - } - ], - "id": 3432, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "832:6:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bool_$", - "typeString": "type(bool)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_type$_t_bool_$", - "typeString": "type(bool)" - } - ], - "expression": { - "argumentTypes": null, - "id": 3428, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3817, - "src": "815:3:14", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 3429, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "decode", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "815:10:14", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 3433, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "815:24:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "795:44:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 3435, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "794:46:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "783:57:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "5472616e7366657248656c7065723a205452414e534645525f4641494c4544", - "id": 3437, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "842:33:14", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_05d7eee434319ef96b9de8eaf182057f1e6a6441451c0ddc676469e4b256f426", - "typeString": "literal_string \"TransferHelper: TRANSFER_FAILED\"" - }, - "value": "TransferHelper: TRANSFER_FAILED" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_05d7eee434319ef96b9de8eaf182057f1e6a6441451c0ddc676469e4b256f426", - "typeString": "literal_string \"TransferHelper: TRANSFER_FAILED\"" - } - ], - "id": 3422, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "775:7:14", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 3438, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "775:101:14", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3439, - "nodeType": "ExpressionStatement", - "src": "775:101:14" - } - ] - }, - "documentation": null, - "id": 3441, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeTransfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3406, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3401, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 3441, - "src": "548:13:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3400, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "548:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3403, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 3441, - "src": "563:10:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3402, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "563:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3405, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 3441, - "src": "575:10:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3404, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "575:4:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "547:39:14" - }, - "returnParameters": { - "id": 3407, - "nodeType": "ParameterList", - "parameters": [], - "src": "596:0:14" - }, - "scope": 3513, - "src": "526:357:14", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 3485, - "nodeType": "Block", - "src": "977:310:14", - "statements": [ - { - "assignments": [ - 3453, - 3455 - ], - "declarations": [ - { - "constant": false, - "id": 3453, - "name": "success", - "nodeType": "VariableDeclaration", - "scope": 3485, - "src": "1066:12:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3452, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1066:4:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3455, - "name": "data", - "nodeType": "VariableDeclaration", - "scope": 3485, - "src": "1080:17:14", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3454, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1080:5:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 3466, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30783233623837326464", - "id": 3460, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1135:10:14", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_599290589_by_1", - "typeString": "int_const 599290589" - }, - "value": "0x23b872dd" - }, - { - "argumentTypes": null, - "id": 3461, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3445, - "src": "1147:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 3462, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3447, - "src": "1153:2:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 3463, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3449, - "src": "1157:5:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_599290589_by_1", - "typeString": "int_const 599290589" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 3458, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3817, - "src": "1112:3:14", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 3459, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "encodeWithSelector", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1112:22:14", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (bytes4) pure returns (bytes memory)" - } - }, - "id": 3464, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1112:51:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "argumentTypes": null, - "id": 3456, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3443, - "src": "1101:5:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 3457, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "call", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1101:10:14", - "typeDescriptions": { - "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes memory) payable returns (bool,bytes memory)" - } - }, - "id": 3465, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1101:63:14", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1065:99:14" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 3481, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 3468, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3453, - "src": "1182:7:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 3479, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3472, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 3469, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3455, - "src": "1194:4:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 3470, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1194:11:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 3471, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1209:1:14", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1194:16:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 3475, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3455, - "src": "1225:4:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "id": 3476, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1232:4:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bool_$", - "typeString": "type(bool)" - }, - "typeName": "bool" - } - ], - "id": 3477, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1231:6:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bool_$", - "typeString": "type(bool)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_type$_t_bool_$", - "typeString": "type(bool)" - } - ], - "expression": { - "argumentTypes": null, - "id": 3473, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3817, - "src": "1214:3:14", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 3474, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "decode", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1214:10:14", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 3478, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1214:24:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "1194:44:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 3480, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1193:46:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "1182:57:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "5472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544", - "id": 3482, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1241:38:14", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_eb2904bf3c0c9ae693b53eb0188a703c388998a9c405b7965ca678cef9a51d18", - "typeString": "literal_string \"TransferHelper: TRANSFER_FROM_FAILED\"" - }, - "value": "TransferHelper: TRANSFER_FROM_FAILED" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_eb2904bf3c0c9ae693b53eb0188a703c388998a9c405b7965ca678cef9a51d18", - "typeString": "literal_string \"TransferHelper: TRANSFER_FROM_FAILED\"" - } - ], - "id": 3467, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "1174:7:14", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 3483, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1174:106:14", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3484, - "nodeType": "ExpressionStatement", - "src": "1174:106:14" - } - ] - }, - "documentation": null, - "id": 3486, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeTransferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3450, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3443, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 3486, - "src": "915:13:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3442, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "915:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3445, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 3486, - "src": "930:12:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3444, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "930:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3447, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 3486, - "src": "944:10:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3446, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "944:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3449, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 3486, - "src": "956:10:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3448, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "956:4:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "914:53:14" - }, - "returnParameters": { - "id": 3451, - "nodeType": "ParameterList", - "parameters": [], - "src": "977:0:14" - }, - "scope": 3513, - "src": "889:398:14", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 3511, - "nodeType": "Block", - "src": "1351:134:14", - "statements": [ - { - "assignments": [ - 3494, - null - ], - "declarations": [ - { - "constant": false, - "id": 3494, - "name": "success", - "nodeType": "VariableDeclaration", - "scope": 3511, - "src": "1362:12:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3493, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1362:4:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - }, - null - ], - "id": 3505, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 3502, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1410:1:14", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 3501, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "1400:9:14", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$", - "typeString": "function (uint256) pure returns (bytes memory)" - }, - "typeName": { - "id": 3500, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1404:5:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - } - }, - "id": 3503, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1400:12:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory", - "typeString": "bytes memory" - } - ], - "arguments": [ - { - "argumentTypes": null, - "id": 3498, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3490, - "src": "1393:5:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 3495, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3488, - "src": "1379:2:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 3496, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "call", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1379:7:14", - "typeDescriptions": { - "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes memory) payable returns (bool,bytes memory)" - } - }, - "id": 3497, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1379:13:14", - "typeDescriptions": { - "typeIdentifier": "t_function_setvalue_pure$_t_uint256_$returns$_t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value_$", - "typeString": "function (uint256) pure returns (function (bytes memory) payable returns (bool,bytes memory))" - } - }, - "id": 3499, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1379:20:14", - "typeDescriptions": { - "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", - "typeString": "function (bytes memory) payable returns (bool,bytes memory)" - } - }, - "id": 3504, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1379:34:14", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1361:52:14" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 3507, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3494, - "src": "1431:7:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "5472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544", - "id": 3508, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1440:37:14", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_d290720a9b119bbeaf8124eb771e119cbea85a2f430cbb39a8fead2398528881", - "typeString": "literal_string \"TransferHelper: ETH_TRANSFER_FAILED\"" - }, - "value": "TransferHelper: ETH_TRANSFER_FAILED" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_d290720a9b119bbeaf8124eb771e119cbea85a2f430cbb39a8fead2398528881", - "typeString": "literal_string \"TransferHelper: ETH_TRANSFER_FAILED\"" - } - ], - "id": 3506, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "1423:7:14", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 3509, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1423:55:14", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3510, - "nodeType": "ExpressionStatement", - "src": "1423:55:14" - } - ] - }, - "documentation": null, - "id": 3512, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeTransferETH", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3491, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3488, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 3512, - "src": "1318:10:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3487, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1318:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3490, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 3512, - "src": "1330:10:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3489, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1330:4:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1317:24:14" - }, - "returnParameters": { - "id": 3492, - "nodeType": "ParameterList", - "parameters": [], - "src": "1351:0:14" - }, - "scope": 3513, - "src": "1293:192:14", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 3514, - "src": "137:1350:14" - } - ], - "src": "0:1488:14" - } - }, - "contracts/libraries/UQ112x112.sol": { - "id": 15, - "AST": { - "absolutePath": "contracts/libraries/UQ112x112.sol", - "exportedSymbols": { - "UQ112x112": [ - 3555 - ] - }, - "id": 3556, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 3515, - "literals": [ - "solidity", - "=", - "0.5", - ".16" - ], - "nodeType": "PragmaDirective", - "src": "0:24:15" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": null, - "fullyImplemented": true, - "id": 3555, - "linearizedBaseContracts": [ - 3555 - ], - "name": "UQ112x112", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": true, - "id": 3520, - "name": "Q112", - "nodeType": "VariableDeclaration", - "scope": 3555, - "src": "207:30:15", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - }, - "typeName": { - "id": 3516, - "name": "uint224", - "nodeType": "ElementaryTypeName", - "src": "207:7:15", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_rational_5192296858534827628530496329220096_by_1", - "typeString": "int_const 5192...(26 digits omitted)...0096" - }, - "id": 3519, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 3517, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "231:1:15", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "argumentTypes": null, - "hexValue": "313132", - "id": 3518, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "234:3:15", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_112_by_1", - "typeString": "int_const 112" - }, - "value": "112" - }, - "src": "231:6:15", - "typeDescriptions": { - "typeIdentifier": "t_rational_5192296858534827628530496329220096_by_1", - "typeString": "int_const 5192...(26 digits omitted)...0096" - } - }, - "visibility": "internal" - }, - { - "body": { - "id": 3535, - "nodeType": "Block", - "src": "344:57:15", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 3533, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 3527, - "name": "z", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3525, - "src": "354:1:15", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - }, - "id": 3532, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 3529, - "name": "y", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3522, - "src": "366:1:15", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "id": 3528, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "358:7:15", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint224_$", - "typeString": "type(uint224)" - }, - "typeName": "uint224" - }, - "id": 3530, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "358:10:15", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 3531, - "name": "Q112", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3520, - "src": "371:4:15", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - }, - "src": "358:17:15", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - }, - "src": "354:21:15", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - }, - "id": 3534, - "nodeType": "ExpressionStatement", - "src": "354:21:15" - } - ] - }, - "documentation": null, - "id": 3536, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "encode", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3523, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3522, - "name": "y", - "nodeType": "VariableDeclaration", - "scope": 3536, - "src": "299:9:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 3521, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "299:7:15", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "298:11:15" - }, - "returnParameters": { - "id": 3526, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3525, - "name": "z", - "nodeType": "VariableDeclaration", - "scope": 3536, - "src": "333:9:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - }, - "typeName": { - "id": 3524, - "name": "uint224", - "nodeType": "ElementaryTypeName", - "src": "333:7:15", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "332:11:15" - }, - "scope": 3555, - "src": "283:118:15", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 3553, - "nodeType": "Block", - "src": "540:35:15", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 3551, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 3545, - "name": "z", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3543, - "src": "550:1:15", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - }, - "id": 3550, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 3546, - "name": "x", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3538, - "src": "554:1:15", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 3548, - "name": "y", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3540, - "src": "566:1:15", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - ], - "id": 3547, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "558:7:15", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint224_$", - "typeString": "type(uint224)" - }, - "typeName": "uint224" - }, - "id": 3549, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "558:10:15", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - }, - "src": "554:14:15", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - }, - "src": "550:18:15", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - }, - "id": 3552, - "nodeType": "ExpressionStatement", - "src": "550:18:15" - } - ] - }, - "documentation": null, - "id": 3554, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "uqdiv", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3541, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3538, - "name": "x", - "nodeType": "VariableDeclaration", - "scope": 3554, - "src": "484:9:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - }, - "typeName": { - "id": 3537, - "name": "uint224", - "nodeType": "ElementaryTypeName", - "src": "484:7:15", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3540, - "name": "y", - "nodeType": "VariableDeclaration", - "scope": 3554, - "src": "495:9:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 3539, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "495:7:15", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "483:22:15" - }, - "returnParameters": { - "id": 3544, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3543, - "name": "z", - "nodeType": "VariableDeclaration", - "scope": 3554, - "src": "529:9:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - }, - "typeName": { - "id": 3542, - "name": "uint224", - "nodeType": "ElementaryTypeName", - "src": "529:7:15", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "528:11:15" - }, - "scope": 3555, - "src": "469:106:15", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 3556, - "src": "183:394:15" - } - ], - "src": "0:578:15" - } - }, - "contracts/test/ERC20.sol": { - "id": 16, - "AST": { - "absolutePath": "contracts/test/ERC20.sol", - "exportedSymbols": { - "ERC20": [ - 3573 - ] - }, - "id": 3574, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 3557, - "literals": [ - "solidity", - "=", - "0.5", - ".16" - ], - "nodeType": "PragmaDirective", - "src": "0:24:16" - }, - { - "absolutePath": "contracts/DXswapERC20.sol", - "file": "../DXswapERC20.sol", - "id": 3558, - "nodeType": "ImportDirective", - "scope": 3574, - "sourceUnit": 645, - "src": "26:28:16", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 3559, - "name": "DXswapERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 644, - "src": "74:11:16", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DXswapERC20_$644", - "typeString": "contract DXswapERC20" - } - }, - "id": 3560, - "nodeType": "InheritanceSpecifier", - "src": "74:11:16" - } - ], - "contractDependencies": [ - 644, - 2756 - ], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 3573, - "linearizedBaseContracts": [ - 3573, - 644, - 2756 - ], - "name": "ERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 3571, - "nodeType": "Block", - "src": "130:48:16", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 3566, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "146:3:16", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 3567, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "146:10:16", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 3568, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3562, - "src": "158:12:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 3565, - "name": "_mint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 381, - "src": "140:5:16", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 3569, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "140:31:16", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3570, - "nodeType": "ExpressionStatement", - "src": "140:31:16" - } - ] - }, - "documentation": null, - "id": 3572, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3563, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3562, - "name": "_totalSupply", - "nodeType": "VariableDeclaration", - "scope": 3572, - "src": "104:17:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3561, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "104:4:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "103:19:16" - }, - "returnParameters": { - "id": 3564, - "nodeType": "ParameterList", - "parameters": [], - "src": "130:0:16" - }, - "scope": 3573, - "src": "92:86:16", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 3574, - "src": "56:124:16" - } - ], - "src": "0:181:16" - } - }, - "contracts/test/WETH9.sol": { - "id": 17, - "AST": { - "absolutePath": "contracts/test/WETH9.sol", - "exportedSymbols": { - "WETH9": [ - 3815 - ] - }, - "id": 3816, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 3575, - "literals": [ - "solidity", - "=", - "0.5", - ".16" - ], - "nodeType": "PragmaDirective", - "src": "686:24:17" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 3815, - "linearizedBaseContracts": [ - 3815 - ], - "name": "WETH9", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 3578, - "name": "name", - "nodeType": "VariableDeclaration", - "scope": 3815, - "src": "733:40:17", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string" - }, - "typeName": { - "id": 3576, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "733:6:17", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "57726170706564204574686572", - "id": 3577, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "758:15:17", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_00cd3d46df44f2cbb950cf84eb2e92aa2ddd23195b1a009173ea59a063357ed3", - "typeString": "literal_string \"Wrapped Ether\"" - }, - "value": "Wrapped Ether" - }, - "visibility": "public" - }, - { - "constant": false, - "id": 3581, - "name": "symbol", - "nodeType": "VariableDeclaration", - "scope": 3815, - "src": "779:31:17", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string" - }, - "typeName": { - "id": 3579, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "779:6:17", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "57455448", - "id": 3580, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "804:6:17", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_0f8a193ff464434486c0daf7db2a895884365d2bc84ba47a68fcf89c1b14b5b8", - "typeString": "literal_string \"WETH\"" - }, - "value": "WETH" - }, - "visibility": "public" - }, - { - "constant": false, - "id": 3584, - "name": "decimals", - "nodeType": "VariableDeclaration", - "scope": 3815, - "src": "816:27:17", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 3582, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "816:5:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "3138", - "id": 3583, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "841:2:17", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_18_by_1", - "typeString": "int_const 18" - }, - "value": "18" - }, - "visibility": "public" - }, - { - "anonymous": false, - "documentation": null, - "id": 3592, - "name": "Approval", - "nodeType": "EventDefinition", - "parameters": { - "id": 3591, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3586, - "indexed": true, - "name": "src", - "nodeType": "VariableDeclaration", - "scope": 3592, - "src": "866:19:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3585, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "866:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3588, - "indexed": true, - "name": "guy", - "nodeType": "VariableDeclaration", - "scope": 3592, - "src": "887:19:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3587, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "887:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3590, - "indexed": false, - "name": "wad", - "nodeType": "VariableDeclaration", - "scope": 3592, - "src": "908:8:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3589, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "908:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "865:52:17" - }, - "src": "850:68:17" - }, - { - "anonymous": false, - "documentation": null, - "id": 3600, - "name": "Transfer", - "nodeType": "EventDefinition", - "parameters": { - "id": 3599, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3594, - "indexed": true, - "name": "src", - "nodeType": "VariableDeclaration", - "scope": 3600, - "src": "939:19:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3593, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "939:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3596, - "indexed": true, - "name": "dst", - "nodeType": "VariableDeclaration", - "scope": 3600, - "src": "960:19:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3595, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "960:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3598, - "indexed": false, - "name": "wad", - "nodeType": "VariableDeclaration", - "scope": 3600, - "src": "981:8:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3597, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "981:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "938:52:17" - }, - "src": "923:68:17" - }, - { - "anonymous": false, - "documentation": null, - "id": 3606, - "name": "Deposit", - "nodeType": "EventDefinition", - "parameters": { - "id": 3605, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3602, - "indexed": true, - "name": "dst", - "nodeType": "VariableDeclaration", - "scope": 3606, - "src": "1011:19:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3601, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1011:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3604, - "indexed": false, - "name": "wad", - "nodeType": "VariableDeclaration", - "scope": 3606, - "src": "1032:8:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3603, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1032:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1010:31:17" - }, - "src": "996:46:17" - }, - { - "anonymous": false, - "documentation": null, - "id": 3612, - "name": "Withdrawal", - "nodeType": "EventDefinition", - "parameters": { - "id": 3611, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3608, - "indexed": true, - "name": "src", - "nodeType": "VariableDeclaration", - "scope": 3612, - "src": "1065:19:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3607, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1065:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3610, - "indexed": false, - "name": "wad", - "nodeType": "VariableDeclaration", - "scope": 3612, - "src": "1086:8:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3609, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1086:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1064:31:17" - }, - "src": "1047:49:17" - }, - { - "constant": false, - "id": 3616, - "name": "balanceOf", - "nodeType": "VariableDeclaration", - "scope": 3815, - "src": "1102:65:17", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 3615, - "keyType": { - "id": 3613, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1111:7:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "1102:25:17", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 3614, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1122:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 3622, - "name": "allowance", - "nodeType": "VariableDeclaration", - "scope": 3815, - "src": "1173:65:17", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - }, - "typeName": { - "id": 3621, - "keyType": { - "id": 3617, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1182:7:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "1173:46:17", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - }, - "valueType": { - "id": 3620, - "keyType": { - "id": 3618, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1202:7:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "1193:25:17", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 3619, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1213:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - } - }, - "value": null, - "visibility": "public" - }, - { - "body": { - "id": 3640, - "nodeType": "Block", - "src": "1345:96:17", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 3631, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 3625, - "name": "balanceOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3616, - "src": "1355:9:17", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 3628, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 3626, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "1365:3:17", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 3627, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1365:10:17", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1355:21:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 3629, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "1380:3:17", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 3630, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1380:9:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1355:34:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3632, - "nodeType": "ExpressionStatement", - "src": "1355:34:17" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 3634, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "1412:3:17", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 3635, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1412:10:17", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 3636, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "1424:3:17", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 3637, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1424:9:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 3633, - "name": "Deposit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3606, - "src": "1404:7:17", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 3638, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1404:30:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3639, - "nodeType": "EmitStatement", - "src": "1399:35:17" - } - ] - }, - "documentation": null, - "id": 3641, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "deposit", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3623, - "nodeType": "ParameterList", - "parameters": [], - "src": "1327:2:17" - }, - "returnParameters": { - "id": 3624, - "nodeType": "ParameterList", - "parameters": [], - "src": "1345:0:17" - }, - "scope": 3815, - "src": "1311:130:17", - "stateMutability": "payable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 3677, - "nodeType": "Block", - "src": "1481:172:17", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3652, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 3647, - "name": "balanceOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3616, - "src": "1499:9:17", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 3650, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 3648, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "1509:3:17", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 3649, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1509:10:17", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1499:21:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 3651, - "name": "wad", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3643, - "src": "1524:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1499:28:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "", - "id": 3653, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1529:2:17", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - }, - "value": "" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - } - ], - "id": 3646, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "1491:7:17", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 3654, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1491:41:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3655, - "nodeType": "ExpressionStatement", - "src": "1491:41:17" - }, - { - "expression": { - "argumentTypes": null, - "id": 3661, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 3656, - "name": "balanceOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3616, - "src": "1542:9:17", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 3659, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 3657, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "1552:3:17", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 3658, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1552:10:17", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1542:21:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "-=", - "rightHandSide": { - "argumentTypes": null, - "id": 3660, - "name": "wad", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3643, - "src": "1567:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1542:28:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3662, - "nodeType": "ExpressionStatement", - "src": "1542:28:17" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 3668, - "name": "wad", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3643, - "src": "1600:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 3663, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "1580:3:17", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 3666, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1580:10:17", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "id": 3667, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1580:19:17", - "typeDescriptions": { - "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 3669, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1580:24:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3670, - "nodeType": "ExpressionStatement", - "src": "1580:24:17" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 3672, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "1630:3:17", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 3673, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1630:10:17", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 3674, - "name": "wad", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3643, - "src": "1642:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 3671, - "name": "Withdrawal", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3612, - "src": "1619:10:17", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 3675, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1619:27:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3676, - "nodeType": "EmitStatement", - "src": "1614:32:17" - } - ] - }, - "documentation": null, - "id": 3678, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "withdraw", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3644, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3643, - "name": "wad", - "nodeType": "VariableDeclaration", - "scope": 3678, - "src": "1464:8:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3642, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1464:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1463:10:17" - }, - "returnParameters": { - "id": 3645, - "nodeType": "ParameterList", - "parameters": [], - "src": "1481:0:17" - }, - "scope": 3815, - "src": "1446:207:17", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 3688, - "nodeType": "Block", - "src": "1709:45:17", - "statements": [ - { - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 3684, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3878, - "src": "1734:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_WETH9_$3815", - "typeString": "contract WETH9" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_WETH9_$3815", - "typeString": "contract WETH9" - } - ], - "id": 3683, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1726:7:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 3685, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1726:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 3686, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balance", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1726:21:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 3682, - "id": 3687, - "nodeType": "Return", - "src": "1719:28:17" - } - ] - }, - "documentation": null, - "id": 3689, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "totalSupply", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3679, - "nodeType": "ParameterList", - "parameters": [], - "src": "1679:2:17" - }, - "returnParameters": { - "id": 3682, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3681, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3689, - "src": "1703:4:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3680, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1703:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1702:6:17" - }, - "scope": 3815, - "src": "1659:95:17", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 3716, - "nodeType": "Block", - "src": "1822:115:17", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 3705, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 3698, - "name": "allowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3622, - "src": "1832:9:17", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 3702, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 3699, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "1842:3:17", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 3700, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1842:10:17", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1832:21:17", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 3703, - "indexExpression": { - "argumentTypes": null, - "id": 3701, - "name": "guy", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3691, - "src": "1854:3:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1832:26:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 3704, - "name": "wad", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3693, - "src": "1861:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1832:32:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3706, - "nodeType": "ExpressionStatement", - "src": "1832:32:17" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 3708, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "1888:3:17", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 3709, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1888:10:17", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 3710, - "name": "guy", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3691, - "src": "1900:3:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 3711, - "name": "wad", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3693, - "src": "1905:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 3707, - "name": "Approval", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3592, - "src": "1879:8:17", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 3712, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1879:30:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3713, - "nodeType": "EmitStatement", - "src": "1874:35:17" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 3714, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1926:4:17", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 3697, - "id": 3715, - "nodeType": "Return", - "src": "1919:11:17" - } - ] - }, - "documentation": null, - "id": 3717, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "approve", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3694, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3691, - "name": "guy", - "nodeType": "VariableDeclaration", - "scope": 3717, - "src": "1777:11:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3690, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1777:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3693, - "name": "wad", - "nodeType": "VariableDeclaration", - "scope": 3717, - "src": "1790:8:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3692, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1790:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1776:23:17" - }, - "returnParameters": { - "id": 3697, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3696, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3717, - "src": "1816:4:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3695, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1816:4:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1815:6:17" - }, - "scope": 3815, - "src": "1760:177:17", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 3733, - "nodeType": "Block", - "src": "2006:58:17", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 3727, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "2036:3:17", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 3728, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2036:10:17", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 3729, - "name": "dst", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3719, - "src": "2048:3:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 3730, - "name": "wad", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3721, - "src": "2053:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 3726, - "name": "transferFrom", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3814, - "src": "2023:12:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,address,uint256) returns (bool)" - } - }, - "id": 3731, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2023:34:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 3725, - "id": 3732, - "nodeType": "Return", - "src": "2016:41:17" - } - ] - }, - "documentation": null, - "id": 3734, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3722, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3719, - "name": "dst", - "nodeType": "VariableDeclaration", - "scope": 3734, - "src": "1961:11:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3718, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1961:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3721, - "name": "wad", - "nodeType": "VariableDeclaration", - "scope": 3734, - "src": "1974:8:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3720, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1974:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1960:23:17" - }, - "returnParameters": { - "id": 3725, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3724, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3734, - "src": "2000:4:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3723, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2000:4:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1999:6:17" - }, - "scope": 3815, - "src": "1943:121:17", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 3813, - "nodeType": "Block", - "src": "2170:368:17", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3750, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 3746, - "name": "balanceOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3616, - "src": "2188:9:17", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 3748, - "indexExpression": { - "argumentTypes": null, - "id": 3747, - "name": "src", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3736, - "src": "2198:3:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2188:14:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 3749, - "name": "wad", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3740, - "src": "2206:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2188:21:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "", - "id": 3751, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2211:2:17", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - }, - "value": "" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - } - ], - "id": 3745, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "2180:7:17", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 3752, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2180:34:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3753, - "nodeType": "ExpressionStatement", - "src": "2180:34:17" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 3769, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 3757, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 3754, - "name": "src", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3736, - "src": "2229:3:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 3755, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "2236:3:17", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 3756, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2236:10:17", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "2229:17:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3768, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 3758, - "name": "allowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3622, - "src": "2250:9:17", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 3760, - "indexExpression": { - "argumentTypes": null, - "id": 3759, - "name": "src", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3736, - "src": "2260:3:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2250:14:17", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 3763, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 3761, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "2265:3:17", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 3762, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2265:10:17", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2250:26:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 3766, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "-", - "prefix": true, - "src": "2285:2:17", - "subExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 3765, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2286:1:17", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "typeDescriptions": { - "typeIdentifier": "t_rational_minus_1_by_1", - "typeString": "int_const -1" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_minus_1_by_1", - "typeString": "int_const -1" - } - ], - "id": 3764, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2280:4:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint" - }, - "id": 3767, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2280:8:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2250:38:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "2229:59:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 3792, - "nodeType": "IfStatement", - "src": "2225:183:17", - "trueBody": { - "id": 3791, - "nodeType": "Block", - "src": "2290:118:17", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3778, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 3771, - "name": "allowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3622, - "src": "2312:9:17", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 3773, - "indexExpression": { - "argumentTypes": null, - "id": 3772, - "name": "src", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3736, - "src": "2322:3:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2312:14:17", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 3776, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 3774, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "2327:3:17", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 3775, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2327:10:17", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2312:26:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 3777, - "name": "wad", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3740, - "src": "2342:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2312:33:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "", - "id": 3779, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2347:2:17", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - }, - "value": "" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - } - ], - "id": 3770, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 3833, - 3834 - ], - "referencedDeclaration": 3834, - "src": "2304:7:17", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 3780, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2304:46:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3781, - "nodeType": "ExpressionStatement", - "src": "2304:46:17" - }, - { - "expression": { - "argumentTypes": null, - "id": 3789, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 3782, - "name": "allowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3622, - "src": "2364:9:17", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 3786, - "indexExpression": { - "argumentTypes": null, - "id": 3783, - "name": "src", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3736, - "src": "2374:3:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2364:14:17", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 3787, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 3784, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3830, - "src": "2379:3:17", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 3785, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2379:10:17", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2364:26:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "-=", - "rightHandSide": { - "argumentTypes": null, - "id": 3788, - "name": "wad", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3740, - "src": "2394:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2364:33:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3790, - "nodeType": "ExpressionStatement", - "src": "2364:33:17" - } - ] - } - }, - { - "expression": { - "argumentTypes": null, - "id": 3797, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 3793, - "name": "balanceOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3616, - "src": "2418:9:17", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 3795, - "indexExpression": { - "argumentTypes": null, - "id": 3794, - "name": "src", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3736, - "src": "2428:3:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2418:14:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "-=", - "rightHandSide": { - "argumentTypes": null, - "id": 3796, - "name": "wad", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3740, - "src": "2436:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2418:21:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3798, - "nodeType": "ExpressionStatement", - "src": "2418:21:17" - }, - { - "expression": { - "argumentTypes": null, - "id": 3803, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 3799, - "name": "balanceOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3616, - "src": "2449:9:17", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 3801, - "indexExpression": { - "argumentTypes": null, - "id": 3800, - "name": "dst", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3738, - "src": "2459:3:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2449:14:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "argumentTypes": null, - "id": 3802, - "name": "wad", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3740, - "src": "2467:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2449:21:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3804, - "nodeType": "ExpressionStatement", - "src": "2449:21:17" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 3806, - "name": "src", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3736, - "src": "2495:3:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 3807, - "name": "dst", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3738, - "src": "2500:3:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 3808, - "name": "wad", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3740, - "src": "2505:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 3805, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3600, - "src": "2486:8:17", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 3809, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2486:23:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3810, - "nodeType": "EmitStatement", - "src": "2481:28:17" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 3811, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2527:4:17", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 3744, - "id": 3812, - "nodeType": "Return", - "src": "2520:11:17" - } - ] - }, - "documentation": null, - "id": 3814, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "transferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3741, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3736, - "name": "src", - "nodeType": "VariableDeclaration", - "scope": 3814, - "src": "2092:11:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3735, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2092:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3738, - "name": "dst", - "nodeType": "VariableDeclaration", - "scope": 3814, - "src": "2105:11:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3737, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2105:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 3740, - "name": "wad", - "nodeType": "VariableDeclaration", - "scope": 3814, - "src": "2118:8:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3739, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2118:4:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2091:36:17" - }, - "returnParameters": { - "id": 3744, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3743, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 3814, - "src": "2160:4:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3742, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2160:4:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2159:6:17" - }, - "scope": 3815, - "src": "2070:468:17", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 3816, - "src": "712:1828:17" - } - ], - "src": "686:37011:17" - } - } - }, - "sourceList": [ - "contracts/DXswapDeployer.sol", - "contracts/DXswapERC20.sol", - "contracts/DXswapFactory.sol", - "contracts/DXswapFeeReceiver.sol", - "contracts/DXswapFeeSetter.sol", - "contracts/DXswapPair.sol", - "contracts/interfaces/IDXswapCallee.sol", - "contracts/interfaces/IDXswapERC20.sol", - "contracts/interfaces/IDXswapFactory.sol", - "contracts/interfaces/IDXswapPair.sol", - "contracts/interfaces/IERC20.sol", - "contracts/interfaces/IWETH.sol", - "contracts/libraries/Math.sol", - "contracts/libraries/SafeMath.sol", - "contracts/libraries/TransferHelper.sol", - "contracts/libraries/UQ112x112.sol", - "contracts/test/ERC20.sol", - "contracts/test/WETH9.sol" - ] -} \ No newline at end of file diff --git a/build/DXswapDeployer.json b/build/DXswapDeployer.json deleted file mode 100644 index 1a116e9bf..000000000 --- a/build/DXswapDeployer.json +++ /dev/null @@ -1,409 +0,0 @@ -{ - "abi": [ - { - "inputs": [ - { - "internalType": "address payable", - "name": "_protocolFeeReceiver", - "type": "address" - }, - { - "internalType": "address payable", - "name": "_dxdaoAvatar", - "type": "address" - }, - { - "internalType": "address", - "name": "_WETH", - "type": "address" - }, - { - "internalType": "address[]", - "name": "tokensA", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "tokensB", - "type": "address[]" - }, - { - "internalType": "uint32[]", - "name": "swapFees", - "type": "uint32[]" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "feeReceiver", - "type": "address" - } - ], - "name": "FeeReceiverDeployed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "feeSetter", - "type": "address" - } - ], - "name": "FeeSetterDeployed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "pair", - "type": "address" - } - ], - "name": "PairDeployed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "factory", - "type": "address" - } - ], - "name": "PairFactoryDeployed", - "type": "event" - }, - { - "payable": true, - "stateMutability": "payable", - "type": "fallback" - }, - { - "constant": true, - "inputs": [], - "name": "WETH", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "deploy", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "dxdaoAvatar", - "outputs": [ - { - "internalType": "address payable", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "initialTokenPairs", - "outputs": [ - { - "internalType": "address", - "name": "tokenA", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenB", - "type": "address" - }, - { - "internalType": "uint32", - "name": "swapFee", - "type": "uint32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "protocolFeeReceiver", - "outputs": [ - { - "internalType": "address payable", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "state", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "60806040526002805460ff60a01b1916905534801561001d57600080fd5b506040516200533838038062005338833981810160405260c081101561004257600080fd5b81516020830151604080850151606086018051925194969395919493918201928464010000000082111561007557600080fd5b90830190602082018581111561008a57600080fd5b82518660208202830111640100000000821117156100a757600080fd5b82525081516020918201928201910280838360005b838110156100d45781810151838201526020016100bc565b50505050905001604052602001805160405193929190846401000000008211156100fd57600080fd5b90830190602082018581111561011257600080fd5b825186602082028301116401000000008211171561012f57600080fd5b82525081516020918201928201910280838360005b8381101561015c578181015183820152602001610144565b505050509050016040526020018051604051939291908464010000000082111561018557600080fd5b90830190602082018581111561019a57600080fd5b82518660208202830111640100000000821117156101b757600080fd5b82525081516020918201928201910280838360005b838110156101e45781810151838201526020016101cc565b50505050919091016040525050600180546001600160a01b03808a166001600160a01b0319928316179092556002805489841690831617905560008054928b16929091169190911781559150505b83518160ff1610156103275760036040518060600160405280868460ff168151811061025a57fe5b60200260200101516001600160a01b03168152602001858460ff168151811061027f57fe5b60200260200101516001600160a01b03168152602001848460ff16815181106102a457fe5b60209081029190910181015163ffffffff908116909252835460018082018655600095865294829020845160029092020180546001600160a01b03199081166001600160a01b039384161782559285015190860180546040909601519590931691161763ffffffff60a01b1916600160a01b939092169290920217905501610232565b50505050505050614ffa806200033e6000396000f3fe6080604052600436106100555760003560e01c806339a51be5146100fc578063775c300c1461012d578063ad5c464814610144578063c19d93fb14610159578063e07d14b414610184578063e5fdf8de146101de575b600254600160a01b900460ff161561009e5760405162461bcd60e51b8152600401808060200182810382526024815260200180614f7a6024913960400191505060405180910390fd5b6001546001600160a01b031633146100e75760405162461bcd60e51b8152600401808060200182810382526028815260200180614f9e6028913960400191505060405180910390fd5b6002805460ff60a01b1916600160a01b179055005b34801561010857600080fd5b506101116101f3565b604080516001600160a01b039092168252519081900360200190f35b34801561013957600080fd5b50610142610202565b005b34801561015057600080fd5b50610111610725565b34801561016557600080fd5b5061016e610734565b6040805160ff9092168252519081900360200190f35b34801561019057600080fd5b506101ae600480360360208110156101a757600080fd5b5035610744565b604080516001600160a01b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b3480156101ea57600080fd5b5061011161078a565b6000546001600160a01b031681565b600254600160a01b900460ff1660011461024d5760405162461bcd60e51b8152600401808060200182810382526024815260200180614f7a6024913960400191505060405180910390fd5b60003060405161025c90610799565b6001600160a01b03909116815260405190819003602001906000f080158015610289573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507f8eef7239ce5bc4f9918f5584befdc2ee2113478098db0ca89bdf5f0d6ff32a6f919081900360200190a160005b60035460ff821610156104a9576000826001600160a01b031663c9c6539660038460ff16815481106102fb57fe5b6000918252602090912060029091020154600380546001600160a01b039092169160ff871690811061032957fe5b6000918252602080832060016002909302019190910154604080516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909116602485015251604480850194929391928390030190829087803b15801561038f57600080fd5b505af11580156103a3573d6000803e3d6000fd5b505050506040513d60208110156103b957600080fd5b5051600380549192506001600160a01b03851691639e68ceb891849160ff87169081106103e257fe5b60009182526020822060029190910201600101546040805160e086901b6001600160e01b03191681526001600160a01b03949094166004850152600160a01b90910463ffffffff1660248401525160448084019382900301818387803b15801561044b57600080fd5b505af115801561045f573d6000803e3d6000fd5b5050604080516001600160a01b038516815290517f29548d6a519d97e51db535dddb28bc2c7f262348939f8c389a0fe32591848e7d9350908190036020019150a1506001016102cd565b506001546002546000805460405191936001600160a01b03908116938693908216929091169084906104da906107a6565b6001600160a01b039586168152938516602085015291841660408085019190915290841660608401529216608082015290519081900360a001906000f080158015610529573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507f7c450ceeab8451c8a098a92a1867a12d3a3495dafd319c2aece20b2587a50c3c919081900360200190a1816001600160a01b031663f46901ed826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b1580156105c257600080fd5b505af11580156105d6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b03909116915084906105fa906107b3565b6001600160a01b03928316815291166020820152604080519182900301906000f08015801561062d573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507fc8de8af6dbce59b45166a45b74012db8d28162a620199b081b3453c42dcca7ea919081900360200190a1826001600160a01b031663a2e74af6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b1580156106c657600080fd5b505af11580156106da573d6000803e3d6000fd5b505060028054600160a11b60ff60a01b19909116179055505060405133904780156108fc02916000818181858888f1935050505015801561071f573d6000803e3d6000fd5b50505050565b6002546001600160a01b031681565b600254600160a01b900460ff1681565b6003818154811061075157fe5b6000918252602090912060029091020180546001909101546001600160a01b03918216925090811690600160a01b900463ffffffff1683565b6001546001600160a01b031681565b612f9c806107c183390190565b6111798061375d83390190565b6106a4806148d68339019056fe60806040526001805460ff60a01b1916600960a01b17905534801561002357600080fd5b50604051612f9c380380612f9c8339818101604052602081101561004657600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055612f26806100766000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80635855a25a116100715780635855a25a1461015c5780639e68ceb814610164578063a2e74af614610196578063c9c65396146101bc578063e6a43905146101ea578063f46901ed14610218576100b4565b8063017e7e58146100b9578063094b7415146100dd5780631e3dd18b146100e55780632ff7042a146101025780634e91f81114610120578063574f2ba314610142575b600080fd5b6100c161023e565b604080516001600160a01b039092168252519081900360200190f35b6100c161024d565b6100c1600480360360208110156100fb57600080fd5b503561025c565b61010a610283565b6040805160ff9092168252519081900360200190f35b6101406004803603602081101561013657600080fd5b503560ff16610293565b005b61014a610365565b60408051918252519081900360200190f35b61014a61036b565b6101406004803603604081101561017a57600080fd5b5080356001600160a01b0316906020013563ffffffff166103fe565b610140600480360360208110156101ac57600080fd5b50356001600160a01b03166104c1565b6100c1600480360360408110156101d257600080fd5b506001600160a01b038135811691602001351661053d565b6100c16004803603604081101561020057600080fd5b506001600160a01b038135811691602001351661085f565b6101406004803603602081101561022e57600080fd5b50356001600160a01b0316610885565b6000546001600160a01b031681565b6001546001600160a01b031681565b6003818154811061026957fe5b6000918252602090912001546001600160a01b0316905081565b600154600160a01b900460ff1681565b6001546001600160a01b031633146102ed576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b60008160ff1611610345576040805162461bcd60e51b815260206004820152601c60248201527f445873776170466163746f72793a20464f5242494444454e5f46454500000000604482015290519081900360640190fd5b6001805460ff909216600160a01b0260ff60a01b19909216919091179055565b60035490565b60405161037a60208201610901565b6020820181038252601f19601f820116604052506040516020018082805190602001908083835b602083106103c05780518252601f1990920191602091820191016103a1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b6001546001600160a01b03163314610458576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b6040805163d6d788c360e01b815263ffffffff8316600482015290516001600160a01b0384169163d6d788c391602480830192600092919082900301818387803b1580156104a557600080fd5b505af11580156104b9573d6000803e3d6000fd5b505050505050565b6001546001600160a01b0316331461051b576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b031614156105905760405162461bcd60e51b8152600401808060200182810382526022815260200180612ed06022913960400191505060405180910390fd5b600080836001600160a01b0316856001600160a01b0316106105b35783856105b6565b84845b90925090506001600160a01b038216610616576040805162461bcd60e51b815260206004820152601b60248201527f445873776170466163746f72793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615610690576040805162461bcd60e51b815260206004820152601a60248201527f445873776170466163746f72793a20504149525f455849535453000000000000604482015290519081900360640190fd5b6060604051806020016106a290610901565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f56040805163485cc95560e01b81526001600160a01b038781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561077557600080fd5b505af1158015610789573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b031633146108df576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6125c18061090f8339019056fe6080604052600c805463ffffffff191660191790556001600d5534801561002557600080fd5b50604051469080605261256f8239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561245e806101116000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429445873776170466163746f72793a204944454e544943414c5f414444524553534553a265627a7a72315820c6fa710efa4f71df9b005295f714d02cccf70f7f9c7bc282fca1f7f11487da9064736f6c63430005100032608060405234801561001057600080fd5b50604051611179380380611179833981810160405260a081101561003357600080fd5b508051602082015160408301516060840151608090940151600080546001600160a01b039586166001600160a01b031991821617909155600180549486169482169490941790935560028054928516928416929092179091556003805494841694831694909417909355600480549290931691161790556110c0806100b96000396000f3fe60806040526004361061007b5760003560e01c8063c1f4381d1161004e578063c1f4381d14610155578063c45a015514610190578063f2269521146101a5578063f2fde38b146101ba5761007b565b80635cb9c4ec1461007d5780638da5cb5b146100fa578063ad5c46481461012b578063b988847214610140575b005b34801561008957600080fd5b5061007b600480360360208110156100a057600080fd5b8101906020810181356401000000008111156100bb57600080fd5b8201836020820111156100cd57600080fd5b803590602001918460208302840111640100000000831117156100ef57600080fd5b5090925090506101ed565b34801561010657600080fd5b5061010f610511565b604080516001600160a01b039092168252519081900360200190f35b34801561013757600080fd5b5061010f610520565b34801561014c57600080fd5b5061010f61052f565b34801561016157600080fd5b5061007b6004803603604081101561017857600080fd5b506001600160a01b038135811691602001351661053e565b34801561019c57600080fd5b5061010f6105cb565b3480156101b157600080fd5b5061010f6105da565b3480156101c657600080fd5b5061007b600480360360208110156101dd57600080fd5b50356001600160a01b03166105e9565b60005b8181101561050c57600083838381811061020657fe5b905060200201356001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561024e57600080fd5b505afa158015610262573d6000803e3d6000fd5b505050506040513d602081101561027857600080fd5b50519050600084848481811061028a57fe5b905060200201356001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156102d257600080fd5b505afa1580156102e6573d6000803e3d6000fd5b505050506040513d60208110156102fc57600080fd5b5051905084848481811061030c57fe5b905060200201356001600160a01b03166001600160a01b031663a9059cbb86868681811061033657fe5b905060200201356001600160a01b031687878781811061035257fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561039e57600080fd5b505afa1580156103b2573d6000803e3d6000fd5b505050506040513d60208110156103c857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561041957600080fd5b505af115801561042d573d6000803e3d6000fd5b505050506040513d602081101561044357600080fd5b50600090508086868681811061045557fe5b6040805163226bf2d160e21b8152306004820152815160209390930294909401356001600160a01b0316936389afcb449350602480820193918290030181600087803b1580156104a457600080fd5b505af11580156104b8573d6000803e3d6000fd5b505050506040513d60408110156104ce57600080fd5b508051602090910151909250905081156104ec576104ec848361066a565b80156104fc576104fc838261066a565b5050600190920191506101f09050565b505050565b6000546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b031681565b6000546001600160a01b0316331461059d576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6001546001600160a01b031681565b6004546001600160a01b031681565b6000546001600160a01b03163314610648576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03838116911614156107015760025460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b50506003546106fc92506001600160a01b031690508261074c565b610748565b6002546107219061071c9084906001600160a01b031661083f565b6108fe565b15610730576106fc8183610904565b6004546107489083906001600160a01b031683610cc9565b5050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106107985780518252601f199092019160209182019101610779565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146107fa576040519150601f19603f3d011682016040523d82523d6000602084013e6107ff565b606091505b505090508061050c5760405162461bcd60e51b81526004018080602001828103825260238152602001806110696023913960400191505060405180910390fd5b600080600061084e8585610e33565b600154604080516bffffffffffffffffffffffff19606095861b811660208084019190915294861b81166034830152825160288184030181526048830184528051908601206001600160f81b031960688401529390951b9094166069850152607d8401919091527fd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776609d808501919091528151808503909101815260bd9093019052815191012095945050505050565b3b151590565b60025460009061091e9083906001600160a01b031661083f565b9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561095c57600080fd5b505afa158015610970573d6000803e3d6000fd5b505050506040513d606081101561098657600080fd5b5080516020909101516002546dffffffffffffffffffffffffffff92831694509116915060009081906001600160a01b03908116908716106109c95782846109cc565b83835b915091506000821180156109e05750600081115b610a1b5760405162461bcd60e51b815260040180806020018281038252602981526020018061101a6029913960400191505060405180910390fd5b6000610aa8610a9b876001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5c57600080fd5b505afa158015610a70573d6000803e3d6000fd5b505050506040513d6020811015610a8657600080fd5b50516127109063ffffffff90811690610f1116565b899063ffffffff610f6716565b90506000610abc828463ffffffff610f6716565b90506000610ae283610ad68761271063ffffffff610f6716565b9063ffffffff610fca16565b90506000818381610aef57fe5b049050610afd8a8a8d610cc9565b60025460009081906001600160a01b03908116908d1610610b2057826000610b24565b6000835b915091508a6001600160a01b031663022c0d9f83833060006040519080825280601f01601f191660200182016040528015610b66576020820181803883390190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610bd7578181015183820152602001610bbf565b50505050905090810190601f168015610c045780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610c2657600080fd5b505af1158015610c3a573d6000803e3d6000fd5b505060025460408051632e1a7d4d60e01b81526004810188905290516001600160a01b039092169350632e1a7d4d925060248082019260009290919082900301818387803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b5050600354610cba92506001600160a01b031690508461074c565b50505050505050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310610d465780518252601f199092019160209182019101610d27565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610da8576040519150601f19603f3d011682016040523d82523d6000602084013e610dad565b606091505b5091509150818015610ddb575080511580610ddb5750808060200190516020811015610dd857600080fd5b50515b610e2c576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b600080826001600160a01b0316846001600160a01b03161415610e875760405162461bcd60e51b81526004018080602001828103825260268152602001806110436026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610610ea7578284610eaa565b83835b90925090506001600160a01b038216610f0a576040805162461bcd60e51b815260206004820152601f60248201527f44587377617046656552656365697665723a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b80820382811115610f61576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b92915050565b6000811580610f8257505080820282828281610f7f57fe5b04145b610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe44587377617046656552656365697665723a20494e53554646494349454e545f4c495155494449545944587377617046656552656365697665723a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158204488a5c6d24546776395f2d8e5b107b99bb124fd814a71281fc10579ac69368864736f6c63430005100032608060405234801561001057600080fd5b506040516106a43803806106a48339818101604052604081101561003357600080fd5b508051602090910151600080546001600160a01b039384166001600160a01b0319918216179091556002805493909216921691909117905561062a8061007a6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a2e74af611610066578063a2e74af614610136578063a6dab93f1461015c578063c45a01551461018a578063f2fde38b14610192578063f46901ed146101b857610093565b806317c06b34146100985780634e91f811146100da5780638da5cb5b146100fc5780639e68ceb814610104575b600080fd5b6100be600480360360208110156100ae57600080fd5b50356001600160a01b03166101de565b604080516001600160a01b039092168252519081900360200190f35b6100fa600480360360208110156100f057600080fd5b503560ff166101f9565b005b6100be6102b0565b6100fa6004803603604081101561011a57600080fd5b5080356001600160a01b0316906020013563ffffffff166102bf565b6100fa6004803603602081101561014c57600080fd5b50356001600160a01b03166103a6565b6100fa6004803603604081101561017257600080fd5b506001600160a01b0381358116916020013516610441565b6100be6104bc565b6100fa600480360360208110156101a857600080fd5b50356001600160a01b03166104cb565b6100fa600480360360208110156101ce57600080fd5b50356001600160a01b031661053a565b6001602052600090815260409020546001600160a01b031681565b6000546001600160a01b03163314610246576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051634e91f81160e01b815260ff8416600482015290516001600160a01b0390921691634e91f8119160248082019260009290919082900301818387803b15801561029557600080fd5b505af11580156102a9573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031681565b6000546001600160a01b03163314806102f157506001600160a01b038281166000908152600160205260409020541633145b610330576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600254604080516313cd19d760e31b81526001600160a01b03858116600483015263ffffffff8516602483015291519190921691639e68ceb891604480830192600092919082900301818387803b15801561038a57600080fd5b505af115801561039e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146103f3576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051635173a57b60e11b81526001600160a01b0384811660048301529151919092169163a2e74af691602480830192600092919082900301818387803b15801561029557600080fd5b6000546001600160a01b0316331461048e576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6002546001600160a01b031681565b6000546001600160a01b03163314610518576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610587576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6002546040805163f46901ed60e01b81526001600160a01b0384811660048301529151919092169163f46901ed91602480830192600092919082900301818387803b15801561029557600080fdfe4458737761704665655365747465723a20464f5242494444454e000000000000a265627a7a72315820a0be763e035529abb8cc9d7d753668d36fa96da26d709983f608f42e5b3d615964736f6c634300051000324458737761704465706c6f7965723a2057524f4e475f4445504c4f5945525f53544154454458737761704465706c6f7965723a2043414c4c45525f4e4f545f4645455f544f5f534554544552a265627a7a72315820f21258416ec6a704eb1b3b2327ba2cad2a5062ee9f012b0de5c7632a8796809064736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x2 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x5338 CODESIZE SUB DUP1 PUSH3 0x5338 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD DUP1 MLOAD SWAP3 MLOAD SWAP5 SWAP7 SWAP4 SWAP6 SWAP2 SWAP5 SWAP4 SWAP2 DUP3 ADD SWAP3 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0xA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xBC JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0xFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x112 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x12F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x15C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x144 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x19A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x1B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1E4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1CC JUMP JUMPDEST POP POP POP POP SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 MSTORE POP POP PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP11 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x2 DUP1 SLOAD DUP10 DUP5 AND SWAP1 DUP4 AND OR SWAP1 SSTORE PUSH1 0x0 DUP1 SLOAD SWAP3 DUP12 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 POP POP JUMPDEST DUP4 MLOAD DUP2 PUSH1 0xFF AND LT ISZERO PUSH2 0x327 JUMPI PUSH1 0x3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP7 DUP5 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x25A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP5 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x27F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP5 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x2A4 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 SWAP3 MSTORE DUP4 SLOAD PUSH1 0x1 DUP1 DUP3 ADD DUP7 SSTORE PUSH1 0x0 SWAP6 DUP7 MSTORE SWAP5 DUP3 SWAP1 KECCAK256 DUP5 MLOAD PUSH1 0x2 SWAP1 SWAP3 MUL ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR DUP3 SSTORE SWAP3 DUP6 ADD MLOAD SWAP1 DUP7 ADD DUP1 SLOAD PUSH1 0x40 SWAP1 SWAP7 ADD MLOAD SWAP6 SWAP1 SWAP4 AND SWAP2 AND OR PUSH4 0xFFFFFFFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL SWAP4 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL OR SWAP1 SSTORE ADD PUSH2 0x232 JUMP JUMPDEST POP POP POP POP POP POP POP PUSH2 0x4FFA DUP1 PUSH3 0x33E PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x55 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39A51BE5 EQ PUSH2 0xFC JUMPI DUP1 PUSH4 0x775C300C EQ PUSH2 0x12D JUMPI DUP1 PUSH4 0xAD5C4648 EQ PUSH2 0x144 JUMPI DUP1 PUSH4 0xC19D93FB EQ PUSH2 0x159 JUMPI DUP1 PUSH4 0xE07D14B4 EQ PUSH2 0x184 JUMPI DUP1 PUSH4 0xE5FDF8DE EQ PUSH2 0x1DE JUMPI JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x9E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4F7A PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4F9E PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x108 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x111 PUSH2 0x1F3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x142 PUSH2 0x202 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x150 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x111 PUSH2 0x725 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x165 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x16E PUSH2 0x734 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x190 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x744 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x111 PUSH2 0x78A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH1 0x1 EQ PUSH2 0x24D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4F7A PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x40 MLOAD PUSH2 0x25C SWAP1 PUSH2 0x799 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x289 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH32 0x8EEF7239CE5BC4F9918F5584BEFDC2EE2113478098DB0CA89BDF5F0D6FF32A6F SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 PUSH1 0x0 JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF DUP3 AND LT ISZERO PUSH2 0x4A9 JUMPI PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC9C65396 PUSH1 0x3 DUP5 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2FB JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 PUSH1 0x2 SWAP1 SWAP2 MUL ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH1 0xFF DUP8 AND SWAP1 DUP2 LT PUSH2 0x329 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 SWAP1 SWAP2 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP9 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP5 SWAP1 SWAP2 AND PUSH1 0x24 DUP6 ADD MSTORE MLOAD PUSH1 0x44 DUP1 DUP6 ADD SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP1 SUB ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x38F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3A3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x9E68CEB8 SWAP2 DUP5 SWAP2 PUSH1 0xFF DUP8 AND SWAP1 DUP2 LT PUSH2 0x3E2 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 KECCAK256 PUSH1 0x2 SWAP2 SWAP1 SWAP2 MUL ADD PUSH1 0x1 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0xE0 DUP7 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH4 0xFFFFFFFF AND PUSH1 0x24 DUP5 ADD MSTORE MLOAD PUSH1 0x44 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x44B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x45F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x29548D6A519D97E51DB535DDDB28BC2C7F262348939F8C389A0FE32591848E7D SWAP4 POP SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP2 POP LOG1 POP PUSH1 0x1 ADD PUSH2 0x2CD JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x2 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 DUP7 SWAP4 SWAP1 DUP3 AND SWAP3 SWAP1 SWAP2 AND SWAP1 DUP5 SWAP1 PUSH2 0x4DA SWAP1 PUSH2 0x7A6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND DUP2 MSTORE SWAP4 DUP6 AND PUSH1 0x20 DUP6 ADD MSTORE SWAP2 DUP5 AND PUSH1 0x40 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP5 AND PUSH1 0x60 DUP5 ADD MSTORE SWAP3 AND PUSH1 0x80 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x529 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH32 0x7C450CEEAB8451C8A098A92A1867A12D3A3495DAFD319C2AECE20B2587A50C3C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF46901ED DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP5 SWAP1 PUSH2 0x5FA SWAP1 PUSH2 0x7B3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x62D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH32 0xC8DE8AF6DBCE59B45166A45B74012DB8D28162A620199B081B3453C42DCCA7EA SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA2E74AF6 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA1 SHL PUSH1 0xFF PUSH1 0xA0 SHL NOT SWAP1 SWAP2 AND OR SWAP1 SSTORE POP POP PUSH1 0x40 MLOAD CALLER SWAP1 SELFBALANCE DUP1 ISZERO PUSH2 0x8FC MUL SWAP2 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x71F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x751 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 PUSH1 0x2 SWAP1 SWAP2 MUL ADD DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP3 POP SWAP1 DUP2 AND SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP4 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2F9C DUP1 PUSH2 0x7C1 DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH2 0x1179 DUP1 PUSH2 0x375D DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH2 0x6A4 DUP1 PUSH2 0x48D6 DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x9 PUSH1 0xA0 SHL OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x2F9C CODESIZE SUB DUP1 PUSH2 0x2F9C DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2F26 DUP1 PUSH2 0x76 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5855A25A GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x5855A25A EQ PUSH2 0x15C JUMPI DUP1 PUSH4 0x9E68CEB8 EQ PUSH2 0x164 JUMPI DUP1 PUSH4 0xA2E74AF6 EQ PUSH2 0x196 JUMPI DUP1 PUSH4 0xC9C65396 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0xE6A43905 EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0xF46901ED EQ PUSH2 0x218 JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x17E7E58 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x94B7415 EQ PUSH2 0xDD JUMPI DUP1 PUSH4 0x1E3DD18B EQ PUSH2 0xE5 JUMPI DUP1 PUSH4 0x2FF7042A EQ PUSH2 0x102 JUMPI DUP1 PUSH4 0x4E91F811 EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0x574F2BA3 EQ PUSH2 0x142 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0x23E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xC1 PUSH2 0x24D JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x25C JUMP JUMPDEST PUSH2 0x10A PUSH2 0x283 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xFF AND PUSH2 0x293 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x14A PUSH2 0x365 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x14A PUSH2 0x36B JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x17A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x3FE JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4C1 JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x53D JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x200 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x85F JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x885 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x269 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2ED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND GT PUSH2 0x345 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A20464F5242494444454E5F46454500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH1 0xFF PUSH1 0xA0 SHL NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37A PUSH1 0x20 DUP3 ADD PUSH2 0x901 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3C0 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x458 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xD6D788C3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0xD6D788C3 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4B9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x51B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x590 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2ED0 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x5B3 JUMPI DUP4 DUP6 PUSH2 0x5B6 JUMP JUMPDEST DUP5 DUP5 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x616 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A205A45524F5F414444524553530000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD AND ISZERO PUSH2 0x690 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A20504149525F455849535453000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0x6A2 SWAP1 PUSH2 0x901 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP SWAP1 POP PUSH1 0x0 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 DUP3 MLOAD PUSH1 0x20 DUP5 ADD PUSH1 0x0 CREATE2 PUSH1 0x40 DUP1 MLOAD PUSH4 0x485CC955 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP8 POP SWAP1 DUP8 AND SWAP2 PUSH4 0x485CC955 SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x775 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x789 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP10 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP1 SLOAD SWAP8 DUP14 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP9 DUP10 AND DUP2 OR SWAP1 SWAP2 SSTORE SWAP4 DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP7 DUP7 MSTORE DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP1 SLOAD DUP9 AND DUP6 OR SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE SWAP6 DUP2 SWAP1 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 SWAP6 ADD DUP1 SLOAD SWAP1 SWAP8 AND DUP5 OR SWAP1 SWAP7 SSTORE SWAP3 SLOAD DUP4 MLOAD SWAP3 DUP4 MSTORE SWAP1 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0xD3648BD0F6BA80134A33BA9275AC585D9D315F0AD8355CDDEFDE31AFA28D0E9 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x8DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x25C1 DUP1 PUSH2 0x90F DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH1 0x19 OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0xD SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD CHAINID SWAP1 DUP1 PUSH1 0x52 PUSH2 0x256F DUP3 CODECOPY PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB PUSH1 0x52 ADD DUP3 KECCAK256 DUP3 DUP3 ADD DUP3 MSTORE PUSH1 0x6 DUP4 MSTORE PUSH6 0x44587377617 PUSH1 0xD4 SHL PUSH1 0x20 SWAP4 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD DUP4 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL SWAP1 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x3649D708A7ABF9E212D0A587955EAD4123223014B2E46201DFB587457CBD4591 DUP2 DUP4 ADD MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP1 MSTORE DUP3 MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x3 SSTORE POP PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0x245E DUP1 PUSH2 0x111 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1CF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6A627842 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xBA9A7A56 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x583 JUMPI DUP1 PUSH4 0xD6D788C3 EQ PUSH2 0x5D4 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x5F7 JUMPI DUP1 PUSH4 0xFFF6CAE9 EQ PUSH2 0x625 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0xBA9A7A56 EQ PUSH2 0x545 JUMPI DUP1 PUSH4 0xBC25CF77 EQ PUSH2 0x54D JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xD21220A7 EQ PUSH2 0x57B JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0x89AFCB44 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x511 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x519 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x6A627842 EQ PUSH2 0x458 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x47E JUMPI DUP1 PUSH4 0x7464FC3D EQ PUSH2 0x4A4 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x485CC955 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x485CC955 EQ PUSH2 0x3F9 JUMPI DUP1 PUSH4 0x54CF2AEB EQ PUSH2 0x427 JUMPI DUP1 PUSH4 0x5909C0D5 EQ PUSH2 0x448 JUMPI DUP1 PUSH4 0x5A3D5493 EQ PUSH2 0x450 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x3D3 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x3F1 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x1AD JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x317 JUMPI DUP1 PUSH4 0xDFE1681 EQ PUSH2 0x357 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x37B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x395 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x22C0D9F EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x262 JUMPI DUP1 PUSH4 0x902F1AC EQ PUSH2 0x2DF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP4 ADD CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x62D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26A PUSH2 0xB7F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x28C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2D1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2E7 PUSH2 0xBA1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x32D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xBCB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x35F PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xBF1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xBF7 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xC91 JUMP JUMPDEST PUSH2 0x3DB PUSH2 0xCB5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xCBA JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x40F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xCC0 JUMP JUMPDEST PUSH2 0x42F PUSH2 0xD45 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xD51 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xD57 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD5D JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x494 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x105E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1076 JUMP JUMPDEST PUSH2 0x4F8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1088 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x26A PUSH2 0x142F JUMP JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x52F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x144E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x145B JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x563 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1461 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15CD JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15DC JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x17EF JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x60D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x18BF JUMP JUMPDEST PUSH2 0x260 PUSH2 0x18DC JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x679 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE DUP5 ISZERO ISZERO DUP1 PUSH2 0x68C JUMPI POP PUSH1 0x0 DUP5 GT JUMPDEST PUSH2 0x6C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23B6 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6D2 PUSH2 0xBA1 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP8 LT DUP1 ISZERO PUSH2 0x6F7 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP7 LT JUMPDEST PUSH2 0x732 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2394 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 SWAP1 DUP2 AND SWAP1 DUP10 AND DUP3 EQ DUP1 ISZERO SWAP1 PUSH2 0x770 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST PUSH2 0x7BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x445873776170506169723A20494E56414C49445F544F PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP11 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x7CB DUP3 DUP11 DUP14 PUSH2 0x1A3F JUMP JUMPDEST DUP10 ISZERO PUSH2 0x7DC JUMPI PUSH2 0x7DC DUP2 DUP11 DUP13 PUSH2 0x1A3F JUMP JUMPDEST DUP7 ISZERO PUSH2 0x897 JUMPI DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x78B94AE6 CALLER DUP14 DUP14 DUP13 DUP13 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x87E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x892 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8F1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x907 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x953 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x967 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x97D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP PUSH1 0x0 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP6 AND DUP11 SWAP1 SUB DUP4 GT PUSH2 0x9A0 JUMPI PUSH1 0x0 PUSH2 0x9AF JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 GT PUSH2 0x9CC JUMPI PUSH1 0x0 PUSH2 0x9DB JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 GT DUP1 PUSH2 0x9EC JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST PUSH2 0xA27 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23DC PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC SLOAD PUSH1 0x0 SWAP1 PUSH2 0xA64 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xA58 DUP8 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0xC SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0xA86 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH2 0xAB8 PUSH4 0x5F5E100 PUSH2 0xAAC PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP12 DUP2 AND SWAP1 DUP12 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xAC8 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST LT ISZERO PUSH2 0xB0B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x445873776170506169723A204B PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH2 0xB19 DUP5 DUP5 DUP9 DUP9 PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP14 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP13 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND SWAP2 CALLER SWAP2 PUSH32 0xD78AD95FA46C994B6551D0DA85FC275FE613CE37657FB8D5E3D130840159D822 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x44587377617 PUSH1 0xD4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP3 PUSH1 0x1 PUSH1 0x70 SHL DUP4 DIV SWAP1 SWAP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1E52 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x0 NOT EQ PUSH2 0xC7C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xC57 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE JUMPDEST PUSH2 0xC87 DUP5 DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD17 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x7 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xC SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0xDAB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0xDBB PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP4 SWAP6 POP SWAP2 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 PUSH2 0xED5 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xEF2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF00 DUP8 DUP8 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0xF3D JUMPI PUSH2 0xF29 PUSH2 0x3E8 PUSH2 0xA58 PUSH2 0xF24 DUP8 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0x2146 JUMP JUMPDEST SWAP9 POP PUSH2 0xF38 PUSH1 0x0 PUSH2 0x3E8 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xF8C JUMP JUMPDEST PUSH2 0xF89 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF5A DUP7 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF61 JUMPI INVALID JUMPDEST DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF7C DUP7 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF83 JUMPI INVALID JUMPDEST DIV PUSH2 0x222E JUMP JUMPDEST SWAP9 POP JUMPDEST PUSH1 0x0 DUP10 GT PUSH2 0xFCB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x236B PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFD5 DUP11 DUP11 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xFE1 DUP7 DUP7 DUP11 DUP11 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x1011 JUMPI PUSH1 0x8 SLOAD PUSH2 0x100D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP2 MLOAD CALLER SWAP3 PUSH32 0x4C209B5FC8AD50758F13E2E1088BA56A560DFF690A1C6FEF26394F4C03821C4F SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP SWAP5 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xB SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x10D7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0x10E7 PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP5 SWAP7 POP SWAP3 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP4 SWAP2 AND SWAP2 PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1143 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1157 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x116D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ADDRESS PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0x1204 DUP9 DUP9 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x121B DUP5 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x1222 JUMPI INVALID JUMPDEST DIV SWAP11 POP DUP1 PUSH2 0x1236 DUP5 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x123D JUMPI INVALID JUMPDEST DIV SWAP10 POP PUSH1 0x0 DUP12 GT DUP1 ISZERO PUSH2 0x1250 JUMPI POP PUSH1 0x0 DUP11 GT JUMPDEST PUSH2 0x128B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2401 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1295 ADDRESS DUP5 PUSH2 0x2246 JUMP JUMPDEST PUSH2 0x12A0 DUP8 DUP14 DUP14 PUSH2 0x1A3F JUMP JUMPDEST PUSH2 0x12AB DUP7 DUP14 DUP13 PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1305 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x131B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1367 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x137B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP PUSH2 0x13A1 DUP6 DUP6 DUP12 DUP12 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x13D1 JUMPI PUSH1 0x8 SLOAD PUSH2 0x13CD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP13 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND SWAP3 CALLER SWAP3 PUSH32 0xDCCD412F0B1252819CB1FD330B93224CA42612892BB3F4F789976E6D81936496 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP POP POP POP POP POP PUSH1 0x1 PUSH1 0xD DUP2 SWAP1 SSTORE POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x445853 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST PUSH2 0x3E8 DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x14AD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP5 SWAP1 SWAP4 AND SWAP3 PUSH2 0x155C SWAP3 DUP6 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 DUP6 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1533 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1549 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x15C3 SWAP3 DUP5 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST TIMESTAMP DUP5 LT ISZERO PUSH2 0x1637 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x11161CDDD85C115490CC8C0E8811561412549151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP12 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP6 ADD DUP3 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x102 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH2 0x122 DUP1 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP7 ADD DUP7 MSTORE PUSH2 0x142 DUP5 ADD DUP1 DUP3 MSTORE DUP7 MLOAD SWAP7 DUP4 ADD SWAP7 SWAP1 SWAP7 KECCAK256 SWAP6 DUP4 SWAP1 MSTORE PUSH2 0x162 DUP5 ADD DUP1 DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0xFF DUP10 AND PUSH2 0x182 DUP6 ADD MSTORE PUSH2 0x1A2 DUP5 ADD DUP9 SWAP1 MSTORE PUSH2 0x1C2 DUP5 ADD DUP8 SWAP1 MSTORE MLOAD SWAP2 SWAP4 SWAP3 PUSH2 0x1E2 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1752 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1788 JUMPI POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x17D9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617045524332303A20494E56414C49445F5349474E41545552450000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x17E4 DUP10 DUP10 DUP10 PUSH2 0x1E52 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1846 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3E8 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x18A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A20464F5242494444454E5F46454500000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x1928 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x1A38 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1979 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x198D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x19A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A04 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x1 PUSH1 0xD SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH32 0x7472616E7366657228616464726573732C75696E743235362900000000000000 PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP7 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP5 MSTORE SWAP2 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP2 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1AEC JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1ACD JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1B4E JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1B53 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x1B81 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x1B81 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x1BD2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A205452414E534645525F4641494C45440000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0x1BF4 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0x1BF1 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 GT DUP1 ISZERO SWAP1 PUSH2 0x1CAA JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 GT ISZERO JUMPDEST PUSH2 0x1CF2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x445873776170506169723A204F564552464C4F57 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH4 0xFFFFFFFF TIMESTAMP DUP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV DUP2 AND DUP3 SUB SWAP1 DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1D22 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 AND ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1D36 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1DA7 JUMPI DUP1 PUSH4 0xFFFFFFFF AND PUSH2 0x1D64 DUP6 PUSH2 0x1D4F DUP7 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x22F6 AND JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE PUSH4 0xFFFFFFFF DUP2 AND PUSH2 0x1D8F DUP5 PUSH2 0x1D4F DUP8 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP9 DUP2 AND SWAP2 SWAP1 SWAP2 OR PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x70 SHL NOT AND PUSH1 0x1 PUSH1 0x70 SHL DUP9 DUP4 AND DUP2 MUL SWAP2 SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0xE0 SHL PUSH4 0xFFFFFFFF DUP8 AND MUL OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP4 DIV SWAP1 SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x1C411E9A96E071241C2F21F7726B17AE89E3CAB4C78BE50E062B03A9FFFBBAD1 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1EDD SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x1F12 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17E7E58 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1FE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x17FB8215 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2FF7042A SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2036 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x204A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2060 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO DUP1 ISZERO SWAP6 POP SWAP2 SWAP3 POP SWAP1 PUSH2 0x2131 JUMPI DUP1 ISZERO PUSH2 0x212C JUMPI PUSH1 0x0 PUSH2 0x20A3 PUSH2 0xF24 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 DUP2 AND SWAP1 DUP10 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x20B0 DUP4 PUSH2 0x2146 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x2129 JUMPI PUSH1 0x0 PUSH2 0x20DE PUSH2 0x20CF DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2105 DUP4 PUSH2 0x20F9 DUP7 PUSH1 0xFF DUP11 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0x2112 JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 ISZERO PUSH2 0x2125 JUMPI PUSH2 0x2125 DUP9 DUP3 PUSH2 0x2198 JUMP JUMPDEST POP POP POP JUMPDEST POP POP JUMPDEST PUSH2 0x213D JUMP JUMPDEST DUP1 ISZERO PUSH2 0x213D JUMPI PUSH1 0x0 PUSH1 0xB SSTORE JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 GT ISZERO PUSH2 0x2189 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x2 DUP3 DIV ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2183 JUMPI DUP1 SWAP2 POP PUSH1 0x2 DUP2 DUP3 DUP6 DUP2 PUSH2 0x2172 JUMPI INVALID JUMPDEST DIV ADD DUP2 PUSH2 0x217B JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x215B JUMP JUMPDEST POP PUSH2 0x2193 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2193 JUMPI POP PUSH1 0x1 JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x21AB SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x21D6 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x223D JUMPI DUP2 PUSH2 0x223F JUMP JUMPDEST DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x226F SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SLOAD PUSH2 0x229C SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH1 0x1 PUSH1 0x70 SHL MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP5 AND DUP2 PUSH2 0x2313 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F 0x4D 0x49 0x4E SLOAD GASLIMIT DIFFICULTY DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4F SSTORE SLOAD POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x49 0x4E POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F TIMESTAMP SSTORE MSTORE 0x4E GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 0xBC SWAP15 MSTORE 0xC6 0x22 0xA7 RETURN PUSH25 0xA026EE16432D9BBC35CC0DB3D76CFAFD5D67631F595A9B1864 PUSH20 0x6F6C63430005100032454950373132446F6D6169 PUSH15 0x28737472696E67206E616D652C7374 PUSH19 0x696E672076657273696F6E2C75696E74323536 KECCAK256 PUSH4 0x6861696E 0x49 PUSH5 0x2C61646472 PUSH6 0x737320766572 PUSH10 0x6679696E67436F6E7472 PUSH2 0x6374 0x29 DIFFICULTY PC PUSH20 0x776170466163746F72793A204944454E54494341 0x4C 0x5F COINBASE DIFFICULTY DIFFICULTY MSTORE GASLIMIT MSTORE8 MSTORE8 GASLIMIT MSTORE8 LOG2 PUSH6 0x627A7A723158 KECCAK256 0xC6 STATICCALL PUSH18 0xEFA4F71DF9B005295F714D02CCCF70F7F9C PUSH28 0xC282FCA1F7F11487DA9064736F6C6343000510003260806040523480 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1179 CODESIZE SUB DUP1 PUSH2 0x1179 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x80 SWAP1 SWAP5 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP5 DUP7 AND SWAP5 DUP3 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 DUP6 AND SWAP3 DUP5 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP5 DUP5 AND SWAP5 DUP4 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE PUSH1 0x4 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH2 0x10C0 DUP1 PUSH2 0xB9 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC1F4381D GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xC1F4381D EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0xF2269521 EQ PUSH2 0x1A5 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1BA JUMPI PUSH2 0x7B JUMP JUMPDEST DUP1 PUSH4 0x5CB9C4EC EQ PUSH2 0x7D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0xAD5C4648 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0xB9888472 EQ PUSH2 0x140 JUMPI JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x106 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x511 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x520 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x52F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x53E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x19C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x5CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x5DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5E9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x50C JUMPI PUSH1 0x0 DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0x206 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x262 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x28A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x30C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP7 DUP7 DUP7 DUP2 DUP2 LT PUSH2 0x336 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP8 DUP8 DUP2 DUP2 LT PUSH2 0x352 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x20 SWAP3 DUP4 MUL SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH4 0x70A08231 SWAP4 POP PUSH1 0x24 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x39E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP7 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x419 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x42D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x443 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP1 POP DUP1 DUP7 DUP7 DUP7 DUP2 DUP2 LT PUSH2 0x455 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x226BF2D1 PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 MUL SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH4 0x89AFCB44 SWAP4 POP PUSH1 0x24 DUP1 DUP3 ADD SWAP4 SWAP2 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4B8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP DUP2 ISZERO PUSH2 0x4EC JUMPI PUSH2 0x4EC DUP5 DUP4 PUSH2 0x66A JUMP JUMPDEST DUP1 ISZERO PUSH2 0x4FC JUMPI PUSH2 0x4FC DUP4 DUP3 PUSH2 0x66A JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 POP PUSH2 0x1F0 SWAP1 POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x59D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A20464F5242494444454E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x4 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x648 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A20464F5242494444454E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x701 JUMPI PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2E1A7D4D SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6E1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x3 SLOAD PUSH2 0x6FC SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP3 PUSH2 0x74C JUMP JUMPDEST PUSH2 0x748 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x721 SWAP1 PUSH2 0x71C SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x83F JUMP JUMPDEST PUSH2 0x8FE JUMP JUMPDEST ISZERO PUSH2 0x730 JUMPI PUSH2 0x6FC DUP2 DUP4 PUSH2 0x904 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x748 SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH2 0xCC9 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP4 SWAP1 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x798 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x779 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x7FA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x7FF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x50C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1069 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x84E DUP6 DUP6 PUSH2 0xE33 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH1 0x60 SWAP6 DUP7 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP5 DUP7 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP7 ADD KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT PUSH1 0x68 DUP5 ADD MSTORE SWAP4 SWAP1 SWAP6 SHL SWAP1 SWAP5 AND PUSH1 0x69 DUP6 ADD MSTORE PUSH1 0x7D DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xD306A548755B9295EE49CC729E13CA4A45E00199BBD890FA146DA43A50571776 PUSH1 0x9D DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP4 ADD SWAP1 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x91E SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x83F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x970 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x986 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x2 SLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP5 POP SWAP2 AND SWAP2 POP PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP8 AND LT PUSH2 0x9C9 JUMPI DUP3 DUP5 PUSH2 0x9CC JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 GT DUP1 ISZERO PUSH2 0x9E0 JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST PUSH2 0xA1B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x101A PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAA8 PUSH2 0xA9B DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x54CF2AEB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA70 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x2710 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0xF11 AND JUMP JUMPDEST DUP10 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xABC DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xAE2 DUP4 PUSH2 0xAD6 DUP8 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xFCA AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0xAEF JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0xAFD DUP11 DUP11 DUP14 PUSH2 0xCC9 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP14 AND LT PUSH2 0xB20 JUMPI DUP3 PUSH1 0x0 PUSH2 0xB24 JUMP JUMPDEST PUSH1 0x0 DUP4 JUMPDEST SWAP2 POP SWAP2 POP DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x22C0D9F DUP4 DUP4 ADDRESS PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB66 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xBD7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xBBF JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xC04 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC3A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP4 POP PUSH4 0x2E1A7D4D SWAP3 POP PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC9F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x3 SLOAD PUSH2 0xCBA SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP5 PUSH2 0x74C JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP3 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 SWAP4 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xD46 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xD27 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xDA8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xDAD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0xDDB JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0xDDB JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0xE2C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E7366657248656C7065723A205452414E534645525F4641494C454400 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xE87 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1043 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0xEA7 JUMPI DUP3 DUP5 PUSH2 0xEAA JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xF0A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A205A45524F5F4144445245535300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0xF82 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0xF7F JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID DIFFICULTY PC PUSH20 0x77617046656552656365697665723A20494E5355 CHAINID CHAINID 0x49 NUMBER 0x49 GASLIMIT 0x4E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE DIFFICULTY PC PUSH20 0x77617046656552656365697665723A204944454E SLOAD 0x49 NUMBER COINBASE 0x4C 0x5F COINBASE DIFFICULTY DIFFICULTY MSTORE GASLIMIT MSTORE8 MSTORE8 GASLIMIT MSTORE8 SLOAD PUSH19 0x616E7366657248656C7065723A204554485F54 MSTORE COINBASE 0x4E MSTORE8 CHAINID GASLIMIT MSTORE 0x5F CHAINID COINBASE 0x49 0x4C GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 DIFFICULTY DUP9 0xA5 0xC6 0xD2 GASLIMIT CHAINID PUSH24 0x6395F2D8E5B107B99BB124FD814A71281FC10579AC693688 PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x6A4 CODESIZE SUB DUP1 PUSH2 0x6A4 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP4 SWAP1 SWAP3 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x62A DUP1 PUSH2 0x7A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA2E74AF6 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA2E74AF6 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0xA6DAB93F EQ PUSH2 0x15C JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x18A JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x192 JUMPI DUP1 PUSH4 0xF46901ED EQ PUSH2 0x1B8 JUMPI PUSH2 0x93 JUMP JUMPDEST DUP1 PUSH4 0x17C06B34 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x4E91F811 EQ PUSH2 0xDA JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xFC JUMPI DUP1 PUSH4 0x9E68CEB8 EQ PUSH2 0x104 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xFF AND PUSH2 0x1F9 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xBE PUSH2 0x2B0 JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x11A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x2BF JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A6 JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x172 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x441 JUMP JUMPDEST PUSH2 0xBE PUSH2 0x4BC JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4CB JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x53A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x246 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4E91F811 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x4E91F811 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH2 0x2F1 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND CALLER EQ JUMPDEST PUSH2 0x330 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x13CD19D7 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0x9E68CEB8 SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x38A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x39E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3F3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x5173A57B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xA2E74AF6 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x48E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x518 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x587 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xF46901ED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xF46901ED SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT INVALID DIFFICULTY PC PUSH20 0x7761704665655365747465723A20464F52424944 DIFFICULTY GASLIMIT 0x4E STOP STOP STOP STOP STOP STOP LOG2 PUSH6 0x627A7A723158 KECCAK256 LOG0 0xBE PUSH23 0x3E035529ABB8CC9D7D753668D36FA96DA26D709983F608 DELEGATECALL 0x2E JUMPDEST RETURNDATASIZE PUSH2 0x5964 PUSH20 0x6F6C634300051000324458737761704465706C6F PUSH26 0x65723A2057524F4E475F4445504C4F5945525F53544154454458 PUSH20 0x7761704465706C6F7965723A2043414C4C45525F 0x4E 0x4F SLOAD 0x5F CHAINID GASLIMIT GASLIMIT 0x5F SLOAD 0x4F 0x5F MSTORE8 GASLIMIT SLOAD SLOAD GASLIMIT MSTORE LOG2 PUSH6 0x627A7A723158 KECCAK256 CALLCODE SLT PC COINBASE PUSH15 0xC6A704EB1B3B2327BA2CAD2A5062EE SWAP16 ADD 0x2B 0xD 0xE5 0xC7 PUSH4 0x2A879680 SWAP1 PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ", - "sourceMap": "163:2781:0:-;;;311:22;;;-1:-1:-1;;;;311:22:0;;;780:606;5:2:-1;;;;30:1;27;20:12;5:2;780:606:0;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;780:606:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;780:606:0;;421:4:-1;412:14;;;;780:606:0;;;;;412:14:-1;780:606:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;780:606:0;;;;;;;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;780:606:0;;421:4:-1;412:14;;;;780:606:0;;;;;412:14:-1;780:606:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;780:606:0;;;;;;;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;780:606:0;;421:4:-1;412:14;;;;780:606:0;;;;;412:14:-1;780:606:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;;;780:606:0;;;;;;-1:-1:-1;;1024:11:0;:26;;-1:-1:-1;;;;;1024:26:0;;;-1:-1:-1;;;;;;1024:26:0;;;;;;;1060:4;:12;;;;;;;;;;;1024:11;1082:42;;;;;;;;;;;;;;;1024:11;-1:-1:-1;;1134:246:0;1155:7;:14;1151:1;:18;;;1134:246;;;1191:17;1231:124;;;;;;;;1262:7;1270:1;1262:10;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1231:124:0;;;;;1294:7;1302:1;1294:10;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1231:124:0;;;;;1326:8;1335:1;1326:11;;;;;;;;;;;;;;;;;;;;;1231:124;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;1191:178:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1191:178:0;;;-1:-1:-1;;;;;1191:178:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;1191:178:0;-1:-1:-1;;;1191:178:0;;;;;;;;;;;1171:4;1134:246;;;;780:606;;;;;;163:2781;;;;;;" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "6080604052600436106100555760003560e01c806339a51be5146100fc578063775c300c1461012d578063ad5c464814610144578063c19d93fb14610159578063e07d14b414610184578063e5fdf8de146101de575b600254600160a01b900460ff161561009e5760405162461bcd60e51b8152600401808060200182810382526024815260200180614f7a6024913960400191505060405180910390fd5b6001546001600160a01b031633146100e75760405162461bcd60e51b8152600401808060200182810382526028815260200180614f9e6028913960400191505060405180910390fd5b6002805460ff60a01b1916600160a01b179055005b34801561010857600080fd5b506101116101f3565b604080516001600160a01b039092168252519081900360200190f35b34801561013957600080fd5b50610142610202565b005b34801561015057600080fd5b50610111610725565b34801561016557600080fd5b5061016e610734565b6040805160ff9092168252519081900360200190f35b34801561019057600080fd5b506101ae600480360360208110156101a757600080fd5b5035610744565b604080516001600160a01b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b3480156101ea57600080fd5b5061011161078a565b6000546001600160a01b031681565b600254600160a01b900460ff1660011461024d5760405162461bcd60e51b8152600401808060200182810382526024815260200180614f7a6024913960400191505060405180910390fd5b60003060405161025c90610799565b6001600160a01b03909116815260405190819003602001906000f080158015610289573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507f8eef7239ce5bc4f9918f5584befdc2ee2113478098db0ca89bdf5f0d6ff32a6f919081900360200190a160005b60035460ff821610156104a9576000826001600160a01b031663c9c6539660038460ff16815481106102fb57fe5b6000918252602090912060029091020154600380546001600160a01b039092169160ff871690811061032957fe5b6000918252602080832060016002909302019190910154604080516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909116602485015251604480850194929391928390030190829087803b15801561038f57600080fd5b505af11580156103a3573d6000803e3d6000fd5b505050506040513d60208110156103b957600080fd5b5051600380549192506001600160a01b03851691639e68ceb891849160ff87169081106103e257fe5b60009182526020822060029190910201600101546040805160e086901b6001600160e01b03191681526001600160a01b03949094166004850152600160a01b90910463ffffffff1660248401525160448084019382900301818387803b15801561044b57600080fd5b505af115801561045f573d6000803e3d6000fd5b5050604080516001600160a01b038516815290517f29548d6a519d97e51db535dddb28bc2c7f262348939f8c389a0fe32591848e7d9350908190036020019150a1506001016102cd565b506001546002546000805460405191936001600160a01b03908116938693908216929091169084906104da906107a6565b6001600160a01b039586168152938516602085015291841660408085019190915290841660608401529216608082015290519081900360a001906000f080158015610529573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507f7c450ceeab8451c8a098a92a1867a12d3a3495dafd319c2aece20b2587a50c3c919081900360200190a1816001600160a01b031663f46901ed826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b1580156105c257600080fd5b505af11580156105d6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b03909116915084906105fa906107b3565b6001600160a01b03928316815291166020820152604080519182900301906000f08015801561062d573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507fc8de8af6dbce59b45166a45b74012db8d28162a620199b081b3453c42dcca7ea919081900360200190a1826001600160a01b031663a2e74af6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b1580156106c657600080fd5b505af11580156106da573d6000803e3d6000fd5b505060028054600160a11b60ff60a01b19909116179055505060405133904780156108fc02916000818181858888f1935050505015801561071f573d6000803e3d6000fd5b50505050565b6002546001600160a01b031681565b600254600160a01b900460ff1681565b6003818154811061075157fe5b6000918252602090912060029091020180546001909101546001600160a01b03918216925090811690600160a01b900463ffffffff1683565b6001546001600160a01b031681565b612f9c806107c183390190565b6111798061375d83390190565b6106a4806148d68339019056fe60806040526001805460ff60a01b1916600960a01b17905534801561002357600080fd5b50604051612f9c380380612f9c8339818101604052602081101561004657600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055612f26806100766000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80635855a25a116100715780635855a25a1461015c5780639e68ceb814610164578063a2e74af614610196578063c9c65396146101bc578063e6a43905146101ea578063f46901ed14610218576100b4565b8063017e7e58146100b9578063094b7415146100dd5780631e3dd18b146100e55780632ff7042a146101025780634e91f81114610120578063574f2ba314610142575b600080fd5b6100c161023e565b604080516001600160a01b039092168252519081900360200190f35b6100c161024d565b6100c1600480360360208110156100fb57600080fd5b503561025c565b61010a610283565b6040805160ff9092168252519081900360200190f35b6101406004803603602081101561013657600080fd5b503560ff16610293565b005b61014a610365565b60408051918252519081900360200190f35b61014a61036b565b6101406004803603604081101561017a57600080fd5b5080356001600160a01b0316906020013563ffffffff166103fe565b610140600480360360208110156101ac57600080fd5b50356001600160a01b03166104c1565b6100c1600480360360408110156101d257600080fd5b506001600160a01b038135811691602001351661053d565b6100c16004803603604081101561020057600080fd5b506001600160a01b038135811691602001351661085f565b6101406004803603602081101561022e57600080fd5b50356001600160a01b0316610885565b6000546001600160a01b031681565b6001546001600160a01b031681565b6003818154811061026957fe5b6000918252602090912001546001600160a01b0316905081565b600154600160a01b900460ff1681565b6001546001600160a01b031633146102ed576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b60008160ff1611610345576040805162461bcd60e51b815260206004820152601c60248201527f445873776170466163746f72793a20464f5242494444454e5f46454500000000604482015290519081900360640190fd5b6001805460ff909216600160a01b0260ff60a01b19909216919091179055565b60035490565b60405161037a60208201610901565b6020820181038252601f19601f820116604052506040516020018082805190602001908083835b602083106103c05780518252601f1990920191602091820191016103a1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b6001546001600160a01b03163314610458576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b6040805163d6d788c360e01b815263ffffffff8316600482015290516001600160a01b0384169163d6d788c391602480830192600092919082900301818387803b1580156104a557600080fd5b505af11580156104b9573d6000803e3d6000fd5b505050505050565b6001546001600160a01b0316331461051b576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b031614156105905760405162461bcd60e51b8152600401808060200182810382526022815260200180612ed06022913960400191505060405180910390fd5b600080836001600160a01b0316856001600160a01b0316106105b35783856105b6565b84845b90925090506001600160a01b038216610616576040805162461bcd60e51b815260206004820152601b60248201527f445873776170466163746f72793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615610690576040805162461bcd60e51b815260206004820152601a60248201527f445873776170466163746f72793a20504149525f455849535453000000000000604482015290519081900360640190fd5b6060604051806020016106a290610901565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f56040805163485cc95560e01b81526001600160a01b038781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561077557600080fd5b505af1158015610789573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b031633146108df576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6125c18061090f8339019056fe6080604052600c805463ffffffff191660191790556001600d5534801561002557600080fd5b50604051469080605261256f8239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561245e806101116000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429445873776170466163746f72793a204944454e544943414c5f414444524553534553a265627a7a72315820c6fa710efa4f71df9b005295f714d02cccf70f7f9c7bc282fca1f7f11487da9064736f6c63430005100032608060405234801561001057600080fd5b50604051611179380380611179833981810160405260a081101561003357600080fd5b508051602082015160408301516060840151608090940151600080546001600160a01b039586166001600160a01b031991821617909155600180549486169482169490941790935560028054928516928416929092179091556003805494841694831694909417909355600480549290931691161790556110c0806100b96000396000f3fe60806040526004361061007b5760003560e01c8063c1f4381d1161004e578063c1f4381d14610155578063c45a015514610190578063f2269521146101a5578063f2fde38b146101ba5761007b565b80635cb9c4ec1461007d5780638da5cb5b146100fa578063ad5c46481461012b578063b988847214610140575b005b34801561008957600080fd5b5061007b600480360360208110156100a057600080fd5b8101906020810181356401000000008111156100bb57600080fd5b8201836020820111156100cd57600080fd5b803590602001918460208302840111640100000000831117156100ef57600080fd5b5090925090506101ed565b34801561010657600080fd5b5061010f610511565b604080516001600160a01b039092168252519081900360200190f35b34801561013757600080fd5b5061010f610520565b34801561014c57600080fd5b5061010f61052f565b34801561016157600080fd5b5061007b6004803603604081101561017857600080fd5b506001600160a01b038135811691602001351661053e565b34801561019c57600080fd5b5061010f6105cb565b3480156101b157600080fd5b5061010f6105da565b3480156101c657600080fd5b5061007b600480360360208110156101dd57600080fd5b50356001600160a01b03166105e9565b60005b8181101561050c57600083838381811061020657fe5b905060200201356001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561024e57600080fd5b505afa158015610262573d6000803e3d6000fd5b505050506040513d602081101561027857600080fd5b50519050600084848481811061028a57fe5b905060200201356001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156102d257600080fd5b505afa1580156102e6573d6000803e3d6000fd5b505050506040513d60208110156102fc57600080fd5b5051905084848481811061030c57fe5b905060200201356001600160a01b03166001600160a01b031663a9059cbb86868681811061033657fe5b905060200201356001600160a01b031687878781811061035257fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561039e57600080fd5b505afa1580156103b2573d6000803e3d6000fd5b505050506040513d60208110156103c857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561041957600080fd5b505af115801561042d573d6000803e3d6000fd5b505050506040513d602081101561044357600080fd5b50600090508086868681811061045557fe5b6040805163226bf2d160e21b8152306004820152815160209390930294909401356001600160a01b0316936389afcb449350602480820193918290030181600087803b1580156104a457600080fd5b505af11580156104b8573d6000803e3d6000fd5b505050506040513d60408110156104ce57600080fd5b508051602090910151909250905081156104ec576104ec848361066a565b80156104fc576104fc838261066a565b5050600190920191506101f09050565b505050565b6000546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b031681565b6000546001600160a01b0316331461059d576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6001546001600160a01b031681565b6004546001600160a01b031681565b6000546001600160a01b03163314610648576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03838116911614156107015760025460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b50506003546106fc92506001600160a01b031690508261074c565b610748565b6002546107219061071c9084906001600160a01b031661083f565b6108fe565b15610730576106fc8183610904565b6004546107489083906001600160a01b031683610cc9565b5050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106107985780518252601f199092019160209182019101610779565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146107fa576040519150601f19603f3d011682016040523d82523d6000602084013e6107ff565b606091505b505090508061050c5760405162461bcd60e51b81526004018080602001828103825260238152602001806110696023913960400191505060405180910390fd5b600080600061084e8585610e33565b600154604080516bffffffffffffffffffffffff19606095861b811660208084019190915294861b81166034830152825160288184030181526048830184528051908601206001600160f81b031960688401529390951b9094166069850152607d8401919091527fd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776609d808501919091528151808503909101815260bd9093019052815191012095945050505050565b3b151590565b60025460009061091e9083906001600160a01b031661083f565b9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561095c57600080fd5b505afa158015610970573d6000803e3d6000fd5b505050506040513d606081101561098657600080fd5b5080516020909101516002546dffffffffffffffffffffffffffff92831694509116915060009081906001600160a01b03908116908716106109c95782846109cc565b83835b915091506000821180156109e05750600081115b610a1b5760405162461bcd60e51b815260040180806020018281038252602981526020018061101a6029913960400191505060405180910390fd5b6000610aa8610a9b876001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5c57600080fd5b505afa158015610a70573d6000803e3d6000fd5b505050506040513d6020811015610a8657600080fd5b50516127109063ffffffff90811690610f1116565b899063ffffffff610f6716565b90506000610abc828463ffffffff610f6716565b90506000610ae283610ad68761271063ffffffff610f6716565b9063ffffffff610fca16565b90506000818381610aef57fe5b049050610afd8a8a8d610cc9565b60025460009081906001600160a01b03908116908d1610610b2057826000610b24565b6000835b915091508a6001600160a01b031663022c0d9f83833060006040519080825280601f01601f191660200182016040528015610b66576020820181803883390190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610bd7578181015183820152602001610bbf565b50505050905090810190601f168015610c045780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610c2657600080fd5b505af1158015610c3a573d6000803e3d6000fd5b505060025460408051632e1a7d4d60e01b81526004810188905290516001600160a01b039092169350632e1a7d4d925060248082019260009290919082900301818387803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b5050600354610cba92506001600160a01b031690508461074c565b50505050505050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310610d465780518252601f199092019160209182019101610d27565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610da8576040519150601f19603f3d011682016040523d82523d6000602084013e610dad565b606091505b5091509150818015610ddb575080511580610ddb5750808060200190516020811015610dd857600080fd5b50515b610e2c576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b600080826001600160a01b0316846001600160a01b03161415610e875760405162461bcd60e51b81526004018080602001828103825260268152602001806110436026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610610ea7578284610eaa565b83835b90925090506001600160a01b038216610f0a576040805162461bcd60e51b815260206004820152601f60248201527f44587377617046656552656365697665723a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b80820382811115610f61576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b92915050565b6000811580610f8257505080820282828281610f7f57fe5b04145b610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe44587377617046656552656365697665723a20494e53554646494349454e545f4c495155494449545944587377617046656552656365697665723a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158204488a5c6d24546776395f2d8e5b107b99bb124fd814a71281fc10579ac69368864736f6c63430005100032608060405234801561001057600080fd5b506040516106a43803806106a48339818101604052604081101561003357600080fd5b508051602090910151600080546001600160a01b039384166001600160a01b0319918216179091556002805493909216921691909117905561062a8061007a6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a2e74af611610066578063a2e74af614610136578063a6dab93f1461015c578063c45a01551461018a578063f2fde38b14610192578063f46901ed146101b857610093565b806317c06b34146100985780634e91f811146100da5780638da5cb5b146100fc5780639e68ceb814610104575b600080fd5b6100be600480360360208110156100ae57600080fd5b50356001600160a01b03166101de565b604080516001600160a01b039092168252519081900360200190f35b6100fa600480360360208110156100f057600080fd5b503560ff166101f9565b005b6100be6102b0565b6100fa6004803603604081101561011a57600080fd5b5080356001600160a01b0316906020013563ffffffff166102bf565b6100fa6004803603602081101561014c57600080fd5b50356001600160a01b03166103a6565b6100fa6004803603604081101561017257600080fd5b506001600160a01b0381358116916020013516610441565b6100be6104bc565b6100fa600480360360208110156101a857600080fd5b50356001600160a01b03166104cb565b6100fa600480360360208110156101ce57600080fd5b50356001600160a01b031661053a565b6001602052600090815260409020546001600160a01b031681565b6000546001600160a01b03163314610246576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051634e91f81160e01b815260ff8416600482015290516001600160a01b0390921691634e91f8119160248082019260009290919082900301818387803b15801561029557600080fd5b505af11580156102a9573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031681565b6000546001600160a01b03163314806102f157506001600160a01b038281166000908152600160205260409020541633145b610330576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600254604080516313cd19d760e31b81526001600160a01b03858116600483015263ffffffff8516602483015291519190921691639e68ceb891604480830192600092919082900301818387803b15801561038a57600080fd5b505af115801561039e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146103f3576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051635173a57b60e11b81526001600160a01b0384811660048301529151919092169163a2e74af691602480830192600092919082900301818387803b15801561029557600080fd5b6000546001600160a01b0316331461048e576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6002546001600160a01b031681565b6000546001600160a01b03163314610518576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610587576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6002546040805163f46901ed60e01b81526001600160a01b0384811660048301529151919092169163f46901ed91602480830192600092919082900301818387803b15801561029557600080fdfe4458737761704665655365747465723a20464f5242494444454e000000000000a265627a7a72315820a0be763e035529abb8cc9d7d753668d36fa96da26d709983f608f42e5b3d615964736f6c634300051000324458737761704465706c6f7965723a2057524f4e475f4445504c4f5945525f53544154454458737761704465706c6f7965723a2043414c4c45525f4e4f545f4645455f544f5f534554544552a265627a7a72315820f21258416ec6a704eb1b3b2327ba2cad2a5062ee9f012b0de5c7632a8796809064736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x55 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39A51BE5 EQ PUSH2 0xFC JUMPI DUP1 PUSH4 0x775C300C EQ PUSH2 0x12D JUMPI DUP1 PUSH4 0xAD5C4648 EQ PUSH2 0x144 JUMPI DUP1 PUSH4 0xC19D93FB EQ PUSH2 0x159 JUMPI DUP1 PUSH4 0xE07D14B4 EQ PUSH2 0x184 JUMPI DUP1 PUSH4 0xE5FDF8DE EQ PUSH2 0x1DE JUMPI JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x9E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4F7A PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4F9E PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x108 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x111 PUSH2 0x1F3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x142 PUSH2 0x202 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x150 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x111 PUSH2 0x725 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x165 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x16E PUSH2 0x734 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x190 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x744 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x111 PUSH2 0x78A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH1 0x1 EQ PUSH2 0x24D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4F7A PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x40 MLOAD PUSH2 0x25C SWAP1 PUSH2 0x799 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x289 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH32 0x8EEF7239CE5BC4F9918F5584BEFDC2EE2113478098DB0CA89BDF5F0D6FF32A6F SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 PUSH1 0x0 JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF DUP3 AND LT ISZERO PUSH2 0x4A9 JUMPI PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC9C65396 PUSH1 0x3 DUP5 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2FB JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 PUSH1 0x2 SWAP1 SWAP2 MUL ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH1 0xFF DUP8 AND SWAP1 DUP2 LT PUSH2 0x329 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x2 SWAP1 SWAP4 MUL ADD SWAP2 SWAP1 SWAP2 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP9 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP5 SWAP1 SWAP2 AND PUSH1 0x24 DUP6 ADD MSTORE MLOAD PUSH1 0x44 DUP1 DUP6 ADD SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP1 SUB ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x38F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3A3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x9E68CEB8 SWAP2 DUP5 SWAP2 PUSH1 0xFF DUP8 AND SWAP1 DUP2 LT PUSH2 0x3E2 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 KECCAK256 PUSH1 0x2 SWAP2 SWAP1 SWAP2 MUL ADD PUSH1 0x1 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0xE0 DUP7 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH4 0xFFFFFFFF AND PUSH1 0x24 DUP5 ADD MSTORE MLOAD PUSH1 0x44 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x44B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x45F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x29548D6A519D97E51DB535DDDB28BC2C7F262348939F8C389A0FE32591848E7D SWAP4 POP SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP2 POP LOG1 POP PUSH1 0x1 ADD PUSH2 0x2CD JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x2 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 DUP7 SWAP4 SWAP1 DUP3 AND SWAP3 SWAP1 SWAP2 AND SWAP1 DUP5 SWAP1 PUSH2 0x4DA SWAP1 PUSH2 0x7A6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND DUP2 MSTORE SWAP4 DUP6 AND PUSH1 0x20 DUP6 ADD MSTORE SWAP2 DUP5 AND PUSH1 0x40 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP5 AND PUSH1 0x60 DUP5 ADD MSTORE SWAP3 AND PUSH1 0x80 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x529 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH32 0x7C450CEEAB8451C8A098A92A1867A12D3A3495DAFD319C2AECE20B2587A50C3C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF46901ED DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP5 SWAP1 PUSH2 0x5FA SWAP1 PUSH2 0x7B3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x62D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH32 0xC8DE8AF6DBCE59B45166A45B74012DB8D28162A620199B081B3453C42DCCA7EA SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA2E74AF6 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA1 SHL PUSH1 0xFF PUSH1 0xA0 SHL NOT SWAP1 SWAP2 AND OR SWAP1 SSTORE POP POP PUSH1 0x40 MLOAD CALLER SWAP1 SELFBALANCE DUP1 ISZERO PUSH2 0x8FC MUL SWAP2 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x71F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x751 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 PUSH1 0x2 SWAP1 SWAP2 MUL ADD DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP3 POP SWAP1 DUP2 AND SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP4 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2F9C DUP1 PUSH2 0x7C1 DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH2 0x1179 DUP1 PUSH2 0x375D DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH2 0x6A4 DUP1 PUSH2 0x48D6 DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x9 PUSH1 0xA0 SHL OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x2F9C CODESIZE SUB DUP1 PUSH2 0x2F9C DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2F26 DUP1 PUSH2 0x76 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5855A25A GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x5855A25A EQ PUSH2 0x15C JUMPI DUP1 PUSH4 0x9E68CEB8 EQ PUSH2 0x164 JUMPI DUP1 PUSH4 0xA2E74AF6 EQ PUSH2 0x196 JUMPI DUP1 PUSH4 0xC9C65396 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0xE6A43905 EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0xF46901ED EQ PUSH2 0x218 JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x17E7E58 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x94B7415 EQ PUSH2 0xDD JUMPI DUP1 PUSH4 0x1E3DD18B EQ PUSH2 0xE5 JUMPI DUP1 PUSH4 0x2FF7042A EQ PUSH2 0x102 JUMPI DUP1 PUSH4 0x4E91F811 EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0x574F2BA3 EQ PUSH2 0x142 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0x23E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xC1 PUSH2 0x24D JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x25C JUMP JUMPDEST PUSH2 0x10A PUSH2 0x283 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xFF AND PUSH2 0x293 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x14A PUSH2 0x365 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x14A PUSH2 0x36B JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x17A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x3FE JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4C1 JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x53D JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x200 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x85F JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x885 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x269 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2ED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND GT PUSH2 0x345 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A20464F5242494444454E5F46454500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH1 0xFF PUSH1 0xA0 SHL NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37A PUSH1 0x20 DUP3 ADD PUSH2 0x901 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3C0 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x458 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xD6D788C3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0xD6D788C3 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4B9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x51B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x590 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2ED0 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x5B3 JUMPI DUP4 DUP6 PUSH2 0x5B6 JUMP JUMPDEST DUP5 DUP5 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x616 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A205A45524F5F414444524553530000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD AND ISZERO PUSH2 0x690 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A20504149525F455849535453000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0x6A2 SWAP1 PUSH2 0x901 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP SWAP1 POP PUSH1 0x0 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 DUP3 MLOAD PUSH1 0x20 DUP5 ADD PUSH1 0x0 CREATE2 PUSH1 0x40 DUP1 MLOAD PUSH4 0x485CC955 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP8 POP SWAP1 DUP8 AND SWAP2 PUSH4 0x485CC955 SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x775 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x789 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP10 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP1 SLOAD SWAP8 DUP14 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP9 DUP10 AND DUP2 OR SWAP1 SWAP2 SSTORE SWAP4 DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP7 DUP7 MSTORE DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP1 SLOAD DUP9 AND DUP6 OR SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE SWAP6 DUP2 SWAP1 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 SWAP6 ADD DUP1 SLOAD SWAP1 SWAP8 AND DUP5 OR SWAP1 SWAP7 SSTORE SWAP3 SLOAD DUP4 MLOAD SWAP3 DUP4 MSTORE SWAP1 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0xD3648BD0F6BA80134A33BA9275AC585D9D315F0AD8355CDDEFDE31AFA28D0E9 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x8DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x25C1 DUP1 PUSH2 0x90F DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH1 0x19 OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0xD SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD CHAINID SWAP1 DUP1 PUSH1 0x52 PUSH2 0x256F DUP3 CODECOPY PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB PUSH1 0x52 ADD DUP3 KECCAK256 DUP3 DUP3 ADD DUP3 MSTORE PUSH1 0x6 DUP4 MSTORE PUSH6 0x44587377617 PUSH1 0xD4 SHL PUSH1 0x20 SWAP4 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD DUP4 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL SWAP1 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x3649D708A7ABF9E212D0A587955EAD4123223014B2E46201DFB587457CBD4591 DUP2 DUP4 ADD MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP1 MSTORE DUP3 MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x3 SSTORE POP PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0x245E DUP1 PUSH2 0x111 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1CF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6A627842 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xBA9A7A56 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x583 JUMPI DUP1 PUSH4 0xD6D788C3 EQ PUSH2 0x5D4 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x5F7 JUMPI DUP1 PUSH4 0xFFF6CAE9 EQ PUSH2 0x625 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0xBA9A7A56 EQ PUSH2 0x545 JUMPI DUP1 PUSH4 0xBC25CF77 EQ PUSH2 0x54D JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xD21220A7 EQ PUSH2 0x57B JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0x89AFCB44 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x511 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x519 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x6A627842 EQ PUSH2 0x458 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x47E JUMPI DUP1 PUSH4 0x7464FC3D EQ PUSH2 0x4A4 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x485CC955 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x485CC955 EQ PUSH2 0x3F9 JUMPI DUP1 PUSH4 0x54CF2AEB EQ PUSH2 0x427 JUMPI DUP1 PUSH4 0x5909C0D5 EQ PUSH2 0x448 JUMPI DUP1 PUSH4 0x5A3D5493 EQ PUSH2 0x450 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x3D3 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x3F1 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x1AD JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x317 JUMPI DUP1 PUSH4 0xDFE1681 EQ PUSH2 0x357 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x37B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x395 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x22C0D9F EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x262 JUMPI DUP1 PUSH4 0x902F1AC EQ PUSH2 0x2DF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP4 ADD CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x62D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26A PUSH2 0xB7F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x28C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2D1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2E7 PUSH2 0xBA1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x32D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xBCB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x35F PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xBF1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xBF7 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xC91 JUMP JUMPDEST PUSH2 0x3DB PUSH2 0xCB5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xCBA JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x40F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xCC0 JUMP JUMPDEST PUSH2 0x42F PUSH2 0xD45 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xD51 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xD57 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD5D JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x494 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x105E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1076 JUMP JUMPDEST PUSH2 0x4F8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1088 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x26A PUSH2 0x142F JUMP JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x52F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x144E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x145B JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x563 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1461 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15CD JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15DC JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x17EF JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x60D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x18BF JUMP JUMPDEST PUSH2 0x260 PUSH2 0x18DC JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x679 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE DUP5 ISZERO ISZERO DUP1 PUSH2 0x68C JUMPI POP PUSH1 0x0 DUP5 GT JUMPDEST PUSH2 0x6C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23B6 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6D2 PUSH2 0xBA1 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP8 LT DUP1 ISZERO PUSH2 0x6F7 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP7 LT JUMPDEST PUSH2 0x732 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2394 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 SWAP1 DUP2 AND SWAP1 DUP10 AND DUP3 EQ DUP1 ISZERO SWAP1 PUSH2 0x770 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST PUSH2 0x7BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x445873776170506169723A20494E56414C49445F544F PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP11 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x7CB DUP3 DUP11 DUP14 PUSH2 0x1A3F JUMP JUMPDEST DUP10 ISZERO PUSH2 0x7DC JUMPI PUSH2 0x7DC DUP2 DUP11 DUP13 PUSH2 0x1A3F JUMP JUMPDEST DUP7 ISZERO PUSH2 0x897 JUMPI DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x78B94AE6 CALLER DUP14 DUP14 DUP13 DUP13 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x87E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x892 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8F1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x907 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x953 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x967 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x97D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP PUSH1 0x0 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP6 AND DUP11 SWAP1 SUB DUP4 GT PUSH2 0x9A0 JUMPI PUSH1 0x0 PUSH2 0x9AF JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 GT PUSH2 0x9CC JUMPI PUSH1 0x0 PUSH2 0x9DB JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 GT DUP1 PUSH2 0x9EC JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST PUSH2 0xA27 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23DC PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC SLOAD PUSH1 0x0 SWAP1 PUSH2 0xA64 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xA58 DUP8 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0xC SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0xA86 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH2 0xAB8 PUSH4 0x5F5E100 PUSH2 0xAAC PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP12 DUP2 AND SWAP1 DUP12 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xAC8 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST LT ISZERO PUSH2 0xB0B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x445873776170506169723A204B PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH2 0xB19 DUP5 DUP5 DUP9 DUP9 PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP14 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP13 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND SWAP2 CALLER SWAP2 PUSH32 0xD78AD95FA46C994B6551D0DA85FC275FE613CE37657FB8D5E3D130840159D822 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x44587377617 PUSH1 0xD4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP3 PUSH1 0x1 PUSH1 0x70 SHL DUP4 DIV SWAP1 SWAP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1E52 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x0 NOT EQ PUSH2 0xC7C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xC57 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE JUMPDEST PUSH2 0xC87 DUP5 DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD17 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x7 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xC SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0xDAB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0xDBB PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP4 SWAP6 POP SWAP2 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 PUSH2 0xED5 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xEF2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF00 DUP8 DUP8 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0xF3D JUMPI PUSH2 0xF29 PUSH2 0x3E8 PUSH2 0xA58 PUSH2 0xF24 DUP8 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0x2146 JUMP JUMPDEST SWAP9 POP PUSH2 0xF38 PUSH1 0x0 PUSH2 0x3E8 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xF8C JUMP JUMPDEST PUSH2 0xF89 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF5A DUP7 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF61 JUMPI INVALID JUMPDEST DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF7C DUP7 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF83 JUMPI INVALID JUMPDEST DIV PUSH2 0x222E JUMP JUMPDEST SWAP9 POP JUMPDEST PUSH1 0x0 DUP10 GT PUSH2 0xFCB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x236B PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFD5 DUP11 DUP11 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xFE1 DUP7 DUP7 DUP11 DUP11 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x1011 JUMPI PUSH1 0x8 SLOAD PUSH2 0x100D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP2 MLOAD CALLER SWAP3 PUSH32 0x4C209B5FC8AD50758F13E2E1088BA56A560DFF690A1C6FEF26394F4C03821C4F SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP SWAP5 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xB SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x10D7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0x10E7 PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP5 SWAP7 POP SWAP3 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP4 SWAP2 AND SWAP2 PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1143 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1157 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x116D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ADDRESS PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0x1204 DUP9 DUP9 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x121B DUP5 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x1222 JUMPI INVALID JUMPDEST DIV SWAP11 POP DUP1 PUSH2 0x1236 DUP5 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x123D JUMPI INVALID JUMPDEST DIV SWAP10 POP PUSH1 0x0 DUP12 GT DUP1 ISZERO PUSH2 0x1250 JUMPI POP PUSH1 0x0 DUP11 GT JUMPDEST PUSH2 0x128B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2401 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1295 ADDRESS DUP5 PUSH2 0x2246 JUMP JUMPDEST PUSH2 0x12A0 DUP8 DUP14 DUP14 PUSH2 0x1A3F JUMP JUMPDEST PUSH2 0x12AB DUP7 DUP14 DUP13 PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1305 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x131B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1367 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x137B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP PUSH2 0x13A1 DUP6 DUP6 DUP12 DUP12 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x13D1 JUMPI PUSH1 0x8 SLOAD PUSH2 0x13CD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP13 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND SWAP3 CALLER SWAP3 PUSH32 0xDCCD412F0B1252819CB1FD330B93224CA42612892BB3F4F789976E6D81936496 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP POP POP POP POP POP PUSH1 0x1 PUSH1 0xD DUP2 SWAP1 SSTORE POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x445853 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST PUSH2 0x3E8 DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x14AD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP5 SWAP1 SWAP4 AND SWAP3 PUSH2 0x155C SWAP3 DUP6 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 DUP6 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1533 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1549 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x15C3 SWAP3 DUP5 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST TIMESTAMP DUP5 LT ISZERO PUSH2 0x1637 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x11161CDDD85C115490CC8C0E8811561412549151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP12 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP6 ADD DUP3 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x102 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH2 0x122 DUP1 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP7 ADD DUP7 MSTORE PUSH2 0x142 DUP5 ADD DUP1 DUP3 MSTORE DUP7 MLOAD SWAP7 DUP4 ADD SWAP7 SWAP1 SWAP7 KECCAK256 SWAP6 DUP4 SWAP1 MSTORE PUSH2 0x162 DUP5 ADD DUP1 DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0xFF DUP10 AND PUSH2 0x182 DUP6 ADD MSTORE PUSH2 0x1A2 DUP5 ADD DUP9 SWAP1 MSTORE PUSH2 0x1C2 DUP5 ADD DUP8 SWAP1 MSTORE MLOAD SWAP2 SWAP4 SWAP3 PUSH2 0x1E2 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1752 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1788 JUMPI POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x17D9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617045524332303A20494E56414C49445F5349474E41545552450000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x17E4 DUP10 DUP10 DUP10 PUSH2 0x1E52 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1846 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3E8 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x18A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A20464F5242494444454E5F46454500000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x1928 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x1A38 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1979 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x198D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x19A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A04 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x1 PUSH1 0xD SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH32 0x7472616E7366657228616464726573732C75696E743235362900000000000000 PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP7 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP5 MSTORE SWAP2 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP2 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1AEC JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1ACD JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1B4E JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1B53 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x1B81 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x1B81 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x1BD2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A205452414E534645525F4641494C45440000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0x1BF4 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0x1BF1 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 GT DUP1 ISZERO SWAP1 PUSH2 0x1CAA JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 GT ISZERO JUMPDEST PUSH2 0x1CF2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x445873776170506169723A204F564552464C4F57 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH4 0xFFFFFFFF TIMESTAMP DUP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV DUP2 AND DUP3 SUB SWAP1 DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1D22 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 AND ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1D36 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1DA7 JUMPI DUP1 PUSH4 0xFFFFFFFF AND PUSH2 0x1D64 DUP6 PUSH2 0x1D4F DUP7 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x22F6 AND JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE PUSH4 0xFFFFFFFF DUP2 AND PUSH2 0x1D8F DUP5 PUSH2 0x1D4F DUP8 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP9 DUP2 AND SWAP2 SWAP1 SWAP2 OR PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x70 SHL NOT AND PUSH1 0x1 PUSH1 0x70 SHL DUP9 DUP4 AND DUP2 MUL SWAP2 SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0xE0 SHL PUSH4 0xFFFFFFFF DUP8 AND MUL OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP4 DIV SWAP1 SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x1C411E9A96E071241C2F21F7726B17AE89E3CAB4C78BE50E062B03A9FFFBBAD1 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1EDD SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x1F12 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17E7E58 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1FE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x17FB8215 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2FF7042A SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2036 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x204A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2060 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO DUP1 ISZERO SWAP6 POP SWAP2 SWAP3 POP SWAP1 PUSH2 0x2131 JUMPI DUP1 ISZERO PUSH2 0x212C JUMPI PUSH1 0x0 PUSH2 0x20A3 PUSH2 0xF24 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 DUP2 AND SWAP1 DUP10 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x20B0 DUP4 PUSH2 0x2146 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x2129 JUMPI PUSH1 0x0 PUSH2 0x20DE PUSH2 0x20CF DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2105 DUP4 PUSH2 0x20F9 DUP7 PUSH1 0xFF DUP11 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0x2112 JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 ISZERO PUSH2 0x2125 JUMPI PUSH2 0x2125 DUP9 DUP3 PUSH2 0x2198 JUMP JUMPDEST POP POP POP JUMPDEST POP POP JUMPDEST PUSH2 0x213D JUMP JUMPDEST DUP1 ISZERO PUSH2 0x213D JUMPI PUSH1 0x0 PUSH1 0xB SSTORE JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 GT ISZERO PUSH2 0x2189 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x2 DUP3 DIV ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2183 JUMPI DUP1 SWAP2 POP PUSH1 0x2 DUP2 DUP3 DUP6 DUP2 PUSH2 0x2172 JUMPI INVALID JUMPDEST DIV ADD DUP2 PUSH2 0x217B JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x215B JUMP JUMPDEST POP PUSH2 0x2193 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2193 JUMPI POP PUSH1 0x1 JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x21AB SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x21D6 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x223D JUMPI DUP2 PUSH2 0x223F JUMP JUMPDEST DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x226F SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SLOAD PUSH2 0x229C SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH1 0x1 PUSH1 0x70 SHL MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP5 AND DUP2 PUSH2 0x2313 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F 0x4D 0x49 0x4E SLOAD GASLIMIT DIFFICULTY DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4F SSTORE SLOAD POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x49 0x4E POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F TIMESTAMP SSTORE MSTORE 0x4E GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 0xBC SWAP15 MSTORE 0xC6 0x22 0xA7 RETURN PUSH25 0xA026EE16432D9BBC35CC0DB3D76CFAFD5D67631F595A9B1864 PUSH20 0x6F6C63430005100032454950373132446F6D6169 PUSH15 0x28737472696E67206E616D652C7374 PUSH19 0x696E672076657273696F6E2C75696E74323536 KECCAK256 PUSH4 0x6861696E 0x49 PUSH5 0x2C61646472 PUSH6 0x737320766572 PUSH10 0x6679696E67436F6E7472 PUSH2 0x6374 0x29 DIFFICULTY PC PUSH20 0x776170466163746F72793A204944454E54494341 0x4C 0x5F COINBASE DIFFICULTY DIFFICULTY MSTORE GASLIMIT MSTORE8 MSTORE8 GASLIMIT MSTORE8 LOG2 PUSH6 0x627A7A723158 KECCAK256 0xC6 STATICCALL PUSH18 0xEFA4F71DF9B005295F714D02CCCF70F7F9C PUSH28 0xC282FCA1F7F11487DA9064736F6C6343000510003260806040523480 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1179 CODESIZE SUB DUP1 PUSH2 0x1179 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x80 SWAP1 SWAP5 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP5 DUP7 AND SWAP5 DUP3 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 DUP6 AND SWAP3 DUP5 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP5 DUP5 AND SWAP5 DUP4 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE PUSH1 0x4 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH2 0x10C0 DUP1 PUSH2 0xB9 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC1F4381D GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xC1F4381D EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0xF2269521 EQ PUSH2 0x1A5 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1BA JUMPI PUSH2 0x7B JUMP JUMPDEST DUP1 PUSH4 0x5CB9C4EC EQ PUSH2 0x7D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0xAD5C4648 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0xB9888472 EQ PUSH2 0x140 JUMPI JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x106 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x511 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x520 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x52F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x53E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x19C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x5CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x5DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5E9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x50C JUMPI PUSH1 0x0 DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0x206 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x262 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x28A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x30C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP7 DUP7 DUP7 DUP2 DUP2 LT PUSH2 0x336 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP8 DUP8 DUP2 DUP2 LT PUSH2 0x352 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x20 SWAP3 DUP4 MUL SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH4 0x70A08231 SWAP4 POP PUSH1 0x24 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x39E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP7 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x419 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x42D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x443 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP1 POP DUP1 DUP7 DUP7 DUP7 DUP2 DUP2 LT PUSH2 0x455 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x226BF2D1 PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 MUL SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH4 0x89AFCB44 SWAP4 POP PUSH1 0x24 DUP1 DUP3 ADD SWAP4 SWAP2 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4B8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP DUP2 ISZERO PUSH2 0x4EC JUMPI PUSH2 0x4EC DUP5 DUP4 PUSH2 0x66A JUMP JUMPDEST DUP1 ISZERO PUSH2 0x4FC JUMPI PUSH2 0x4FC DUP4 DUP3 PUSH2 0x66A JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 POP PUSH2 0x1F0 SWAP1 POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x59D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A20464F5242494444454E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x4 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x648 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A20464F5242494444454E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x701 JUMPI PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2E1A7D4D SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6E1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x3 SLOAD PUSH2 0x6FC SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP3 PUSH2 0x74C JUMP JUMPDEST PUSH2 0x748 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x721 SWAP1 PUSH2 0x71C SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x83F JUMP JUMPDEST PUSH2 0x8FE JUMP JUMPDEST ISZERO PUSH2 0x730 JUMPI PUSH2 0x6FC DUP2 DUP4 PUSH2 0x904 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x748 SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH2 0xCC9 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP4 SWAP1 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x798 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x779 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x7FA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x7FF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x50C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1069 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x84E DUP6 DUP6 PUSH2 0xE33 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH1 0x60 SWAP6 DUP7 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP5 DUP7 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP7 ADD KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT PUSH1 0x68 DUP5 ADD MSTORE SWAP4 SWAP1 SWAP6 SHL SWAP1 SWAP5 AND PUSH1 0x69 DUP6 ADD MSTORE PUSH1 0x7D DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xD306A548755B9295EE49CC729E13CA4A45E00199BBD890FA146DA43A50571776 PUSH1 0x9D DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP4 ADD SWAP1 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x91E SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x83F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x970 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x986 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x2 SLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP5 POP SWAP2 AND SWAP2 POP PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP8 AND LT PUSH2 0x9C9 JUMPI DUP3 DUP5 PUSH2 0x9CC JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 GT DUP1 ISZERO PUSH2 0x9E0 JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST PUSH2 0xA1B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x101A PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAA8 PUSH2 0xA9B DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x54CF2AEB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA70 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x2710 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0xF11 AND JUMP JUMPDEST DUP10 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xABC DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xAE2 DUP4 PUSH2 0xAD6 DUP8 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xFCA AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0xAEF JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0xAFD DUP11 DUP11 DUP14 PUSH2 0xCC9 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP14 AND LT PUSH2 0xB20 JUMPI DUP3 PUSH1 0x0 PUSH2 0xB24 JUMP JUMPDEST PUSH1 0x0 DUP4 JUMPDEST SWAP2 POP SWAP2 POP DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x22C0D9F DUP4 DUP4 ADDRESS PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB66 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xBD7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xBBF JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xC04 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC3A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP4 POP PUSH4 0x2E1A7D4D SWAP3 POP PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC9F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x3 SLOAD PUSH2 0xCBA SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP5 PUSH2 0x74C JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP3 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 SWAP4 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xD46 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xD27 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xDA8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xDAD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0xDDB JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0xDDB JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0xE2C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E7366657248656C7065723A205452414E534645525F4641494C454400 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xE87 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1043 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0xEA7 JUMPI DUP3 DUP5 PUSH2 0xEAA JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xF0A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A205A45524F5F4144445245535300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0xF82 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0xF7F JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID DIFFICULTY PC PUSH20 0x77617046656552656365697665723A20494E5355 CHAINID CHAINID 0x49 NUMBER 0x49 GASLIMIT 0x4E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE DIFFICULTY PC PUSH20 0x77617046656552656365697665723A204944454E SLOAD 0x49 NUMBER COINBASE 0x4C 0x5F COINBASE DIFFICULTY DIFFICULTY MSTORE GASLIMIT MSTORE8 MSTORE8 GASLIMIT MSTORE8 SLOAD PUSH19 0x616E7366657248656C7065723A204554485F54 MSTORE COINBASE 0x4E MSTORE8 CHAINID GASLIMIT MSTORE 0x5F CHAINID COINBASE 0x49 0x4C GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 DIFFICULTY DUP9 0xA5 0xC6 0xD2 GASLIMIT CHAINID PUSH24 0x6395F2D8E5B107B99BB124FD814A71281FC10579AC693688 PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x6A4 CODESIZE SUB DUP1 PUSH2 0x6A4 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP4 SWAP1 SWAP3 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x62A DUP1 PUSH2 0x7A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA2E74AF6 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA2E74AF6 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0xA6DAB93F EQ PUSH2 0x15C JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x18A JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x192 JUMPI DUP1 PUSH4 0xF46901ED EQ PUSH2 0x1B8 JUMPI PUSH2 0x93 JUMP JUMPDEST DUP1 PUSH4 0x17C06B34 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x4E91F811 EQ PUSH2 0xDA JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xFC JUMPI DUP1 PUSH4 0x9E68CEB8 EQ PUSH2 0x104 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xFF AND PUSH2 0x1F9 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xBE PUSH2 0x2B0 JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x11A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x2BF JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A6 JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x172 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x441 JUMP JUMPDEST PUSH2 0xBE PUSH2 0x4BC JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4CB JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x53A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x246 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4E91F811 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x4E91F811 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH2 0x2F1 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND CALLER EQ JUMPDEST PUSH2 0x330 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x13CD19D7 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0x9E68CEB8 SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x38A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x39E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3F3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x5173A57B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xA2E74AF6 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x48E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x518 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x587 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xF46901ED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xF46901ED SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT INVALID DIFFICULTY PC PUSH20 0x7761704665655365747465723A20464F52424944 DIFFICULTY GASLIMIT 0x4E STOP STOP STOP STOP STOP STOP LOG2 PUSH6 0x627A7A723158 KECCAK256 LOG0 0xBE PUSH23 0x3E035529ABB8CC9D7D753668D36FA96DA26D709983F608 DELEGATECALL 0x2E JUMPDEST RETURNDATASIZE PUSH2 0x5964 PUSH20 0x6F6C634300051000324458737761704465706C6F PUSH26 0x65723A2057524F4E475F4445504C4F5945525F53544154454458 PUSH20 0x7761704465706C6F7965723A2043414C4C45525F 0x4E 0x4F SLOAD 0x5F CHAINID GASLIMIT GASLIMIT 0x5F SLOAD 0x4F 0x5F MSTORE8 GASLIMIT SLOAD SLOAD GASLIMIT MSTORE LOG2 PUSH6 0x627A7A723158 KECCAK256 CALLCODE SLT PC COINBASE PUSH15 0xC6A704EB1B3B2327BA2CAD2A5062EE SWAP16 ADD 0x2B 0xD 0xE5 0xC7 PUSH4 0x2A879680 SWAP1 PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ", - "sourceMap": "163:2781:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1535:5;;-1:-1:-1;;;1535:5:0;;;;:10;1527:59;;;;-1:-1:-1;;;1527:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1618:11;;-1:-1:-1;;;;;1618:11:0;1604:10;:25;1596:78;;;;-1:-1:-1;;;1596:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1684:5;:9;;-1:-1:-1;;;;1684:9:0;-1:-1:-1;;;1684:9:0;;;163:2781;198:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;198:42:0;;;:::i;:::-;;;;-1:-1:-1;;;;;198:42:0;;;;;;;;;;;;;;1768:1166;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1768:1166:0;;;:::i;:::-;;286:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;286:19:0;;;:::i;311:22::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;311:22:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;446:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;446:36:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;446:36:0;;:::i;:::-;;;;-1:-1:-1;;;;;446:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;246:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;246:34:0;;;:::i;198:42::-;;;-1:-1:-1;;;;;198:42:0;;:::o;1768:1166::-;1811:5;;-1:-1:-1;;;1811:5:0;;;;1820:1;1811:10;1803:59;;;;-1:-1:-1;;;1803:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1872:27;1928:4;1902:32;;;;;:::i;:::-;-1:-1:-1;;;;;1902:32:0;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;1949:43:0;;;-1:-1:-1;;;;;1949:43:0;;;;;;1872:62;;-1:-1:-1;1949:43:0;;;;;;;;;;2006:7;2002:334;2023:17;:24;2019:28;;;;2002:334;;;2069:15;2087:13;-1:-1:-1;;;;;2087:24:0;;2112:17;2130:1;2112:20;;;;;;;;;;;;;;;;;;;;;;;:27;2141:17;:20;;-1:-1:-1;;;;;2112:27:0;;;;2141:20;;;;;;;;;;;;;;;;;;:27;:20;;;;;:27;;;;;2087:82;;;-1:-1:-1;;;;;;2087:82:0;;;;;;;-1:-1:-1;;;;;2087:82:0;;;;;;;2141:27;;;;2087:82;;;;;;;;;;2141:20;;2087:82;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;2087:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2087:82:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2087:82:0;2217:17;:20;;2087:82;;-1:-1:-1;;;;;;2183:24:0;;;;;2087:82;;2217:20;;;;;;;;;;;;;;;;;;;;;;;:28;;;2183:63;;;;;;;-1:-1:-1;;;;;;2183:63:0;;;-1:-1:-1;;;;;2183:63:0;;;;;;;;-1:-1:-1;;;2217:28:0;;;;;2183:63;;;;;;;;;;;;;;;2217:20;2183:63;;;;5:2:-1;;;;30:1;27;20:12;5:2;2183:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;2265:60:0;;;-1:-1:-1;;;;;2265:60:0;;;;;;;;-1:-1:-1;2265:60:0;;;;;;;-1:-1:-1;2265:60:0;-1:-1:-1;2049:4:0;;2002:334;;;-1:-1:-1;2418:11:0;;2455:4;;2345:35;2461:19;;2383:120;;2345:35;;-1:-1:-1;;;;;2418:11:0;;;;2439:13;;2455:4;;;;2461:19;;;;2418:11;;2383:120;;;:::i;:::-;-1:-1:-1;;;;;2383:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2383:120:0;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;2518:47:0;;;-1:-1:-1;;;;;2518:47:0;;;;;;2345:158;;-1:-1:-1;2518:47:0;;;;;;;;;;2575:13;-1:-1:-1;;;;;2575:22:0;;2606:17;2575:50;;;;;;;;;;;;;-1:-1:-1;;;;;2575:50:0;-1:-1:-1;;;;;2575:50:0;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2575:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;2698:11:0;;2678:56;;2644:31;;-1:-1:-1;;;;;;2698:11:0;;;;-1:-1:-1;2719:13:0;;2678:56;;;:::i;:::-;-1:-1:-1;;;;;2678:56:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2678:56:0;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;2749:43:0;;;-1:-1:-1;;;;;2749:43:0;;;;;;2644:90;;-1:-1:-1;2749:43:0;;;;;;;;;;2802:13;-1:-1:-1;;;;;2802:28:0;;2839:15;2802:54;;;;;;;;;;;;;-1:-1:-1;;;;;2802:54:0;-1:-1:-1;;;;;2802:54:0;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2802:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;2874:1:0;2866:9;;-1:-1:-1;;;;;;;2866:9:0;;;;;;-1:-1:-1;;2885:42:0;;:10;;2905:21;2885:42;;;;;-1:-1:-1;2885:42:0;-1:-1:-1;2885:42:0;2905:21;2885:10;:42;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2885:42:0;1768:1166;;;:::o;286:19::-;;;-1:-1:-1;;;;;286:19:0;;:::o;311:22::-;;;-1:-1:-1;;;311:22:0;;;;;:::o;446:36::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;446:36:0;;;;-1:-1:-1;446:36:0;;;;-1:-1:-1;;;446:36:0;;;;;:::o;246:34::-;;;-1:-1:-1;;;;;246:34:0;;:::o;163:2781::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o" - } - }, - "interface": [ - { - "inputs": [ - { - "internalType": "address payable", - "name": "_protocolFeeReceiver", - "type": "address" - }, - { - "internalType": "address payable", - "name": "_dxdaoAvatar", - "type": "address" - }, - { - "internalType": "address", - "name": "_WETH", - "type": "address" - }, - { - "internalType": "address[]", - "name": "tokensA", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "tokensB", - "type": "address[]" - }, - { - "internalType": "uint32[]", - "name": "swapFees", - "type": "uint32[]" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "feeReceiver", - "type": "address" - } - ], - "name": "FeeReceiverDeployed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "feeSetter", - "type": "address" - } - ], - "name": "FeeSetterDeployed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "pair", - "type": "address" - } - ], - "name": "PairDeployed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "factory", - "type": "address" - } - ], - "name": "PairFactoryDeployed", - "type": "event" - }, - { - "payable": true, - "stateMutability": "payable", - "type": "fallback" - }, - { - "constant": true, - "inputs": [], - "name": "WETH", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "deploy", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "dxdaoAvatar", - "outputs": [ - { - "internalType": "address payable", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "initialTokenPairs", - "outputs": [ - { - "internalType": "address", - "name": "tokenA", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenB", - "type": "address" - }, - { - "internalType": "uint32", - "name": "swapFee", - "type": "uint32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "protocolFeeReceiver", - "outputs": [ - { - "internalType": "address payable", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "state", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "60806040526002805460ff60a01b1916905534801561001d57600080fd5b506040516200533838038062005338833981810160405260c081101561004257600080fd5b81516020830151604080850151606086018051925194969395919493918201928464010000000082111561007557600080fd5b90830190602082018581111561008a57600080fd5b82518660208202830111640100000000821117156100a757600080fd5b82525081516020918201928201910280838360005b838110156100d45781810151838201526020016100bc565b50505050905001604052602001805160405193929190846401000000008211156100fd57600080fd5b90830190602082018581111561011257600080fd5b825186602082028301116401000000008211171561012f57600080fd5b82525081516020918201928201910280838360005b8381101561015c578181015183820152602001610144565b505050509050016040526020018051604051939291908464010000000082111561018557600080fd5b90830190602082018581111561019a57600080fd5b82518660208202830111640100000000821117156101b757600080fd5b82525081516020918201928201910280838360005b838110156101e45781810151838201526020016101cc565b50505050919091016040525050600180546001600160a01b03808a166001600160a01b0319928316179092556002805489841690831617905560008054928b16929091169190911781559150505b83518160ff1610156103275760036040518060600160405280868460ff168151811061025a57fe5b60200260200101516001600160a01b03168152602001858460ff168151811061027f57fe5b60200260200101516001600160a01b03168152602001848460ff16815181106102a457fe5b60209081029190910181015163ffffffff908116909252835460018082018655600095865294829020845160029092020180546001600160a01b03199081166001600160a01b039384161782559285015190860180546040909601519590931691161763ffffffff60a01b1916600160a01b939092169290920217905501610232565b50505050505050614ffa806200033e6000396000f3fe6080604052600436106100555760003560e01c806339a51be5146100fc578063775c300c1461012d578063ad5c464814610144578063c19d93fb14610159578063e07d14b414610184578063e5fdf8de146101de575b600254600160a01b900460ff161561009e5760405162461bcd60e51b8152600401808060200182810382526024815260200180614f7a6024913960400191505060405180910390fd5b6001546001600160a01b031633146100e75760405162461bcd60e51b8152600401808060200182810382526028815260200180614f9e6028913960400191505060405180910390fd5b6002805460ff60a01b1916600160a01b179055005b34801561010857600080fd5b506101116101f3565b604080516001600160a01b039092168252519081900360200190f35b34801561013957600080fd5b50610142610202565b005b34801561015057600080fd5b50610111610725565b34801561016557600080fd5b5061016e610734565b6040805160ff9092168252519081900360200190f35b34801561019057600080fd5b506101ae600480360360208110156101a757600080fd5b5035610744565b604080516001600160a01b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b3480156101ea57600080fd5b5061011161078a565b6000546001600160a01b031681565b600254600160a01b900460ff1660011461024d5760405162461bcd60e51b8152600401808060200182810382526024815260200180614f7a6024913960400191505060405180910390fd5b60003060405161025c90610799565b6001600160a01b03909116815260405190819003602001906000f080158015610289573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507f8eef7239ce5bc4f9918f5584befdc2ee2113478098db0ca89bdf5f0d6ff32a6f919081900360200190a160005b60035460ff821610156104a9576000826001600160a01b031663c9c6539660038460ff16815481106102fb57fe5b6000918252602090912060029091020154600380546001600160a01b039092169160ff871690811061032957fe5b6000918252602080832060016002909302019190910154604080516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909116602485015251604480850194929391928390030190829087803b15801561038f57600080fd5b505af11580156103a3573d6000803e3d6000fd5b505050506040513d60208110156103b957600080fd5b5051600380549192506001600160a01b03851691639e68ceb891849160ff87169081106103e257fe5b60009182526020822060029190910201600101546040805160e086901b6001600160e01b03191681526001600160a01b03949094166004850152600160a01b90910463ffffffff1660248401525160448084019382900301818387803b15801561044b57600080fd5b505af115801561045f573d6000803e3d6000fd5b5050604080516001600160a01b038516815290517f29548d6a519d97e51db535dddb28bc2c7f262348939f8c389a0fe32591848e7d9350908190036020019150a1506001016102cd565b506001546002546000805460405191936001600160a01b03908116938693908216929091169084906104da906107a6565b6001600160a01b039586168152938516602085015291841660408085019190915290841660608401529216608082015290519081900360a001906000f080158015610529573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507f7c450ceeab8451c8a098a92a1867a12d3a3495dafd319c2aece20b2587a50c3c919081900360200190a1816001600160a01b031663f46901ed826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b1580156105c257600080fd5b505af11580156105d6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b03909116915084906105fa906107b3565b6001600160a01b03928316815291166020820152604080519182900301906000f08015801561062d573d6000803e3d6000fd5b50604080516001600160a01b038316815290519192507fc8de8af6dbce59b45166a45b74012db8d28162a620199b081b3453c42dcca7ea919081900360200190a1826001600160a01b031663a2e74af6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b1580156106c657600080fd5b505af11580156106da573d6000803e3d6000fd5b505060028054600160a11b60ff60a01b19909116179055505060405133904780156108fc02916000818181858888f1935050505015801561071f573d6000803e3d6000fd5b50505050565b6002546001600160a01b031681565b600254600160a01b900460ff1681565b6003818154811061075157fe5b6000918252602090912060029091020180546001909101546001600160a01b03918216925090811690600160a01b900463ffffffff1683565b6001546001600160a01b031681565b612f9c806107c183390190565b6111798061375d83390190565b6106a4806148d68339019056fe60806040526001805460ff60a01b1916600960a01b17905534801561002357600080fd5b50604051612f9c380380612f9c8339818101604052602081101561004657600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055612f26806100766000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80635855a25a116100715780635855a25a1461015c5780639e68ceb814610164578063a2e74af614610196578063c9c65396146101bc578063e6a43905146101ea578063f46901ed14610218576100b4565b8063017e7e58146100b9578063094b7415146100dd5780631e3dd18b146100e55780632ff7042a146101025780634e91f81114610120578063574f2ba314610142575b600080fd5b6100c161023e565b604080516001600160a01b039092168252519081900360200190f35b6100c161024d565b6100c1600480360360208110156100fb57600080fd5b503561025c565b61010a610283565b6040805160ff9092168252519081900360200190f35b6101406004803603602081101561013657600080fd5b503560ff16610293565b005b61014a610365565b60408051918252519081900360200190f35b61014a61036b565b6101406004803603604081101561017a57600080fd5b5080356001600160a01b0316906020013563ffffffff166103fe565b610140600480360360208110156101ac57600080fd5b50356001600160a01b03166104c1565b6100c1600480360360408110156101d257600080fd5b506001600160a01b038135811691602001351661053d565b6100c16004803603604081101561020057600080fd5b506001600160a01b038135811691602001351661085f565b6101406004803603602081101561022e57600080fd5b50356001600160a01b0316610885565b6000546001600160a01b031681565b6001546001600160a01b031681565b6003818154811061026957fe5b6000918252602090912001546001600160a01b0316905081565b600154600160a01b900460ff1681565b6001546001600160a01b031633146102ed576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b60008160ff1611610345576040805162461bcd60e51b815260206004820152601c60248201527f445873776170466163746f72793a20464f5242494444454e5f46454500000000604482015290519081900360640190fd5b6001805460ff909216600160a01b0260ff60a01b19909216919091179055565b60035490565b60405161037a60208201610901565b6020820181038252601f19601f820116604052506040516020018082805190602001908083835b602083106103c05780518252601f1990920191602091820191016103a1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b6001546001600160a01b03163314610458576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b6040805163d6d788c360e01b815263ffffffff8316600482015290516001600160a01b0384169163d6d788c391602480830192600092919082900301818387803b1580156104a557600080fd5b505af11580156104b9573d6000803e3d6000fd5b505050505050565b6001546001600160a01b0316331461051b576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b031614156105905760405162461bcd60e51b8152600401808060200182810382526022815260200180612ed06022913960400191505060405180910390fd5b600080836001600160a01b0316856001600160a01b0316106105b35783856105b6565b84845b90925090506001600160a01b038216610616576040805162461bcd60e51b815260206004820152601b60248201527f445873776170466163746f72793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615610690576040805162461bcd60e51b815260206004820152601a60248201527f445873776170466163746f72793a20504149525f455849535453000000000000604482015290519081900360640190fd5b6060604051806020016106a290610901565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f56040805163485cc95560e01b81526001600160a01b038781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561077557600080fd5b505af1158015610789573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b031633146108df576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6125c18061090f8339019056fe6080604052600c805463ffffffff191660191790556001600d5534801561002557600080fd5b50604051469080605261256f8239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561245e806101116000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429445873776170466163746f72793a204944454e544943414c5f414444524553534553a265627a7a72315820c6fa710efa4f71df9b005295f714d02cccf70f7f9c7bc282fca1f7f11487da9064736f6c63430005100032608060405234801561001057600080fd5b50604051611179380380611179833981810160405260a081101561003357600080fd5b508051602082015160408301516060840151608090940151600080546001600160a01b039586166001600160a01b031991821617909155600180549486169482169490941790935560028054928516928416929092179091556003805494841694831694909417909355600480549290931691161790556110c0806100b96000396000f3fe60806040526004361061007b5760003560e01c8063c1f4381d1161004e578063c1f4381d14610155578063c45a015514610190578063f2269521146101a5578063f2fde38b146101ba5761007b565b80635cb9c4ec1461007d5780638da5cb5b146100fa578063ad5c46481461012b578063b988847214610140575b005b34801561008957600080fd5b5061007b600480360360208110156100a057600080fd5b8101906020810181356401000000008111156100bb57600080fd5b8201836020820111156100cd57600080fd5b803590602001918460208302840111640100000000831117156100ef57600080fd5b5090925090506101ed565b34801561010657600080fd5b5061010f610511565b604080516001600160a01b039092168252519081900360200190f35b34801561013757600080fd5b5061010f610520565b34801561014c57600080fd5b5061010f61052f565b34801561016157600080fd5b5061007b6004803603604081101561017857600080fd5b506001600160a01b038135811691602001351661053e565b34801561019c57600080fd5b5061010f6105cb565b3480156101b157600080fd5b5061010f6105da565b3480156101c657600080fd5b5061007b600480360360208110156101dd57600080fd5b50356001600160a01b03166105e9565b60005b8181101561050c57600083838381811061020657fe5b905060200201356001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561024e57600080fd5b505afa158015610262573d6000803e3d6000fd5b505050506040513d602081101561027857600080fd5b50519050600084848481811061028a57fe5b905060200201356001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156102d257600080fd5b505afa1580156102e6573d6000803e3d6000fd5b505050506040513d60208110156102fc57600080fd5b5051905084848481811061030c57fe5b905060200201356001600160a01b03166001600160a01b031663a9059cbb86868681811061033657fe5b905060200201356001600160a01b031687878781811061035257fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561039e57600080fd5b505afa1580156103b2573d6000803e3d6000fd5b505050506040513d60208110156103c857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561041957600080fd5b505af115801561042d573d6000803e3d6000fd5b505050506040513d602081101561044357600080fd5b50600090508086868681811061045557fe5b6040805163226bf2d160e21b8152306004820152815160209390930294909401356001600160a01b0316936389afcb449350602480820193918290030181600087803b1580156104a457600080fd5b505af11580156104b8573d6000803e3d6000fd5b505050506040513d60408110156104ce57600080fd5b508051602090910151909250905081156104ec576104ec848361066a565b80156104fc576104fc838261066a565b5050600190920191506101f09050565b505050565b6000546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b031681565b6000546001600160a01b0316331461059d576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6001546001600160a01b031681565b6004546001600160a01b031681565b6000546001600160a01b03163314610648576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03838116911614156107015760025460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b50506003546106fc92506001600160a01b031690508261074c565b610748565b6002546107219061071c9084906001600160a01b031661083f565b6108fe565b15610730576106fc8183610904565b6004546107489083906001600160a01b031683610cc9565b5050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106107985780518252601f199092019160209182019101610779565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146107fa576040519150601f19603f3d011682016040523d82523d6000602084013e6107ff565b606091505b505090508061050c5760405162461bcd60e51b81526004018080602001828103825260238152602001806110696023913960400191505060405180910390fd5b600080600061084e8585610e33565b600154604080516bffffffffffffffffffffffff19606095861b811660208084019190915294861b81166034830152825160288184030181526048830184528051908601206001600160f81b031960688401529390951b9094166069850152607d8401919091527fd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776609d808501919091528151808503909101815260bd9093019052815191012095945050505050565b3b151590565b60025460009061091e9083906001600160a01b031661083f565b9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561095c57600080fd5b505afa158015610970573d6000803e3d6000fd5b505050506040513d606081101561098657600080fd5b5080516020909101516002546dffffffffffffffffffffffffffff92831694509116915060009081906001600160a01b03908116908716106109c95782846109cc565b83835b915091506000821180156109e05750600081115b610a1b5760405162461bcd60e51b815260040180806020018281038252602981526020018061101a6029913960400191505060405180910390fd5b6000610aa8610a9b876001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5c57600080fd5b505afa158015610a70573d6000803e3d6000fd5b505050506040513d6020811015610a8657600080fd5b50516127109063ffffffff90811690610f1116565b899063ffffffff610f6716565b90506000610abc828463ffffffff610f6716565b90506000610ae283610ad68761271063ffffffff610f6716565b9063ffffffff610fca16565b90506000818381610aef57fe5b049050610afd8a8a8d610cc9565b60025460009081906001600160a01b03908116908d1610610b2057826000610b24565b6000835b915091508a6001600160a01b031663022c0d9f83833060006040519080825280601f01601f191660200182016040528015610b66576020820181803883390190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610bd7578181015183820152602001610bbf565b50505050905090810190601f168015610c045780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610c2657600080fd5b505af1158015610c3a573d6000803e3d6000fd5b505060025460408051632e1a7d4d60e01b81526004810188905290516001600160a01b039092169350632e1a7d4d925060248082019260009290919082900301818387803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b5050600354610cba92506001600160a01b031690508461074c565b50505050505050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310610d465780518252601f199092019160209182019101610d27565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610da8576040519150601f19603f3d011682016040523d82523d6000602084013e610dad565b606091505b5091509150818015610ddb575080511580610ddb5750808060200190516020811015610dd857600080fd5b50515b610e2c576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b600080826001600160a01b0316846001600160a01b03161415610e875760405162461bcd60e51b81526004018080602001828103825260268152602001806110436026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610610ea7578284610eaa565b83835b90925090506001600160a01b038216610f0a576040805162461bcd60e51b815260206004820152601f60248201527f44587377617046656552656365697665723a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b80820382811115610f61576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b92915050565b6000811580610f8257505080820282828281610f7f57fe5b04145b610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe44587377617046656552656365697665723a20494e53554646494349454e545f4c495155494449545944587377617046656552656365697665723a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158204488a5c6d24546776395f2d8e5b107b99bb124fd814a71281fc10579ac69368864736f6c63430005100032608060405234801561001057600080fd5b506040516106a43803806106a48339818101604052604081101561003357600080fd5b508051602090910151600080546001600160a01b039384166001600160a01b0319918216179091556002805493909216921691909117905561062a8061007a6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a2e74af611610066578063a2e74af614610136578063a6dab93f1461015c578063c45a01551461018a578063f2fde38b14610192578063f46901ed146101b857610093565b806317c06b34146100985780634e91f811146100da5780638da5cb5b146100fc5780639e68ceb814610104575b600080fd5b6100be600480360360208110156100ae57600080fd5b50356001600160a01b03166101de565b604080516001600160a01b039092168252519081900360200190f35b6100fa600480360360208110156100f057600080fd5b503560ff166101f9565b005b6100be6102b0565b6100fa6004803603604081101561011a57600080fd5b5080356001600160a01b0316906020013563ffffffff166102bf565b6100fa6004803603602081101561014c57600080fd5b50356001600160a01b03166103a6565b6100fa6004803603604081101561017257600080fd5b506001600160a01b0381358116916020013516610441565b6100be6104bc565b6100fa600480360360208110156101a857600080fd5b50356001600160a01b03166104cb565b6100fa600480360360208110156101ce57600080fd5b50356001600160a01b031661053a565b6001602052600090815260409020546001600160a01b031681565b6000546001600160a01b03163314610246576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051634e91f81160e01b815260ff8416600482015290516001600160a01b0390921691634e91f8119160248082019260009290919082900301818387803b15801561029557600080fd5b505af11580156102a9573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031681565b6000546001600160a01b03163314806102f157506001600160a01b038281166000908152600160205260409020541633145b610330576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600254604080516313cd19d760e31b81526001600160a01b03858116600483015263ffffffff8516602483015291519190921691639e68ceb891604480830192600092919082900301818387803b15801561038a57600080fd5b505af115801561039e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146103f3576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051635173a57b60e11b81526001600160a01b0384811660048301529151919092169163a2e74af691602480830192600092919082900301818387803b15801561029557600080fd5b6000546001600160a01b0316331461048e576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6002546001600160a01b031681565b6000546001600160a01b03163314610518576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610587576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6002546040805163f46901ed60e01b81526001600160a01b0384811660048301529151919092169163f46901ed91602480830192600092919082900301818387803b15801561029557600080fdfe4458737761704665655365747465723a20464f5242494444454e000000000000a265627a7a72315820a0be763e035529abb8cc9d7d753668d36fa96da26d709983f608f42e5b3d615964736f6c634300051000324458737761704465706c6f7965723a2057524f4e475f4445504c4f5945525f53544154454458737761704465706c6f7965723a2043414c4c45525f4e4f545f4645455f544f5f534554544552a265627a7a72315820f21258416ec6a704eb1b3b2327ba2cad2a5062ee9f012b0de5c7632a8796809064736f6c63430005100032" -} \ No newline at end of file diff --git a/build/DXswapERC20.json b/build/DXswapERC20.json deleted file mode 100644 index f9de87adc..000000000 --- a/build/DXswapERC20.json +++ /dev/null @@ -1,705 +0,0 @@ -{ - "abi": [ - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b5060405146908060526109638239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550610879806100ea6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633644e5151161008c57806395d89b411161006657806395d89b411461025b578063a9059cbb14610263578063d505accf1461028f578063dd62ed3e146102e2576100cf565b80633644e5151461020757806370a082311461020f5780637ecebe0014610235576100cf565b806306fdde03146100d4578063095ea7b31461015157806318160ddd1461019157806323b872dd146101ab57806330adf81f146101e1578063313ce567146101e9575b600080fd5b6100dc610310565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101165781810151838201526020016100fe565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561016757600080fd5b506001600160a01b038135169060200135610332565b604080519115158252519081900360200190f35b610199610349565b60408051918252519081900360200190f35b61017d600480360360608110156101c157600080fd5b506001600160a01b0381358116916020810135909116906040013561034f565b6101996103e9565b6101f161040d565b6040805160ff9092168252519081900360200190f35b610199610412565b6101996004803603602081101561022557600080fd5b50356001600160a01b0316610418565b6101996004803603602081101561024b57600080fd5b50356001600160a01b031661042a565b6100dc61043c565b61017d6004803603604081101561027957600080fd5b506001600160a01b03813516906020013561045b565b6102e0600480360360e08110156102a557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610468565b005b610199600480360360408110156102f857600080fd5b506001600160a01b038135811691602001351661066c565b6040518060400160405280600681526020016504458737761760d41b81525081565b600061033f338484610689565b5060015b92915050565b60005481565b6001600160a01b0383166000908152600260209081526040808320338452909152812054600019146103d4576001600160a01b03841660009081526002602090815260408083203384529091529020546103af908363ffffffff6106eb16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6103df84848461073b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60016020526000908152604090205481565b60046020526000908152604090205481565b6040518060400160405280600381526020016244585360e81b81525081565b600061033f33848461073b565b428410156104b4576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156105cf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106055750886001600160a01b0316816001600160a01b0316145b610656576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b610661898989610689565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115610343576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054610764908263ffffffff6106eb16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610799908263ffffffff6107f516565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b80820182811015610343576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfea265627a7a72315820992b12356c77aa11ac170c4fe73bc289a989e0c675b6c3300eea2888020a390f64736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD CHAINID SWAP1 DUP1 PUSH1 0x52 PUSH2 0x963 DUP3 CODECOPY PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB PUSH1 0x52 ADD DUP3 KECCAK256 DUP3 DUP3 ADD DUP3 MSTORE PUSH1 0x6 DUP4 MSTORE PUSH6 0x44587377617 PUSH1 0xD4 SHL PUSH1 0x20 SWAP4 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD DUP4 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL SWAP1 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x3649D708A7ABF9E212D0A587955EAD4123223014B2E46201DFB587457CBD4591 DUP2 DUP4 ADD MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP1 MSTORE DUP3 MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x3 SSTORE POP PUSH2 0x879 DUP1 PUSH2 0xEA PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3644E515 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0x95D89B41 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x263 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x28F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2E2 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x3644E515 EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x20F JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x235 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x191 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1AB JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x1E1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1E9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDC PUSH2 0x310 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x116 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xFE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x143 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x332 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x199 PUSH2 0x349 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x34F JUMP JUMPDEST PUSH2 0x199 PUSH2 0x3E9 JUMP JUMPDEST PUSH2 0x1F1 PUSH2 0x40D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x199 PUSH2 0x412 JUMP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x225 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x418 JUMP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x24B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x42A JUMP JUMPDEST PUSH2 0xDC PUSH2 0x43C JUMP JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x45B JUMP JUMPDEST PUSH2 0x2E0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x2A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x468 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x66C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x44587377617 PUSH1 0xD4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F CALLER DUP5 DUP5 PUSH2 0x689 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x3D4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x3AF SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x6EB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE JUMPDEST PUSH2 0x3DF DUP5 DUP5 DUP5 PUSH2 0x73B JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x445853 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F CALLER DUP5 DUP5 PUSH2 0x73B JUMP JUMPDEST TIMESTAMP DUP5 LT ISZERO PUSH2 0x4B4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x11161CDDD85C115490CC8C0E8811561412549151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP12 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP6 ADD DUP3 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x102 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH2 0x122 DUP1 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP7 ADD DUP7 MSTORE PUSH2 0x142 DUP5 ADD DUP1 DUP3 MSTORE DUP7 MLOAD SWAP7 DUP4 ADD SWAP7 SWAP1 SWAP7 KECCAK256 SWAP6 DUP4 SWAP1 MSTORE PUSH2 0x162 DUP5 ADD DUP1 DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0xFF DUP10 AND PUSH2 0x182 DUP6 ADD MSTORE PUSH2 0x1A2 DUP5 ADD DUP9 SWAP1 MSTORE PUSH2 0x1C2 DUP5 ADD DUP8 SWAP1 MSTORE MLOAD SWAP2 SWAP4 SWAP3 PUSH2 0x1E2 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x605 JUMPI POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x656 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617045524332303A20494E56414C49445F5349474E41545552450000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x661 DUP10 DUP10 DUP10 PUSH2 0x689 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x343 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x764 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x6EB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x799 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x7F5 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x343 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 SWAP10 0x2B SLT CALLDATALOAD PUSH13 0x77AA11AC170C4FE73BC289A989 0xE0 0xC6 PUSH22 0xB6C3300EEA2888020A390F64736F6C63430005100032 GASLIMIT 0x49 POP CALLDATACOPY BALANCE ORIGIN DIFFICULTY PUSH16 0x6D61696E28737472696E67206E616D65 0x2C PUSH20 0x7472696E672076657273696F6E2C75696E743235 CALLDATASIZE KECCAK256 PUSH4 0x6861696E 0x49 PUSH5 0x2C61646472 PUSH6 0x737320766572 PUSH10 0x6679696E67436F6E7472 PUSH2 0x6374 0x29 ", - "sourceMap": "102:3320:1:-;;;903:444;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1086:95:1;;990:7;;1086:95;;;;;;;;;;;;;;;;1215:4;;;;;;;;-1:-1:-1;;;1215:4:1;;;;;1249:10;;;;;;;;;;-1:-1:-1;;;1249:10:1;;;;1058:272;;;;;;;;;1199:22;1058:272;;;;1239:21;1058:272;;;;;;;;;;;1311:4;1058:272;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1058:272:1;;;;;;1035:305;;;;;;;;1016:16;:324;-1:-1:-1;102:3320:1;;;;;;" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633644e5151161008c57806395d89b411161006657806395d89b411461025b578063a9059cbb14610263578063d505accf1461028f578063dd62ed3e146102e2576100cf565b80633644e5151461020757806370a082311461020f5780637ecebe0014610235576100cf565b806306fdde03146100d4578063095ea7b31461015157806318160ddd1461019157806323b872dd146101ab57806330adf81f146101e1578063313ce567146101e9575b600080fd5b6100dc610310565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101165781810151838201526020016100fe565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561016757600080fd5b506001600160a01b038135169060200135610332565b604080519115158252519081900360200190f35b610199610349565b60408051918252519081900360200190f35b61017d600480360360608110156101c157600080fd5b506001600160a01b0381358116916020810135909116906040013561034f565b6101996103e9565b6101f161040d565b6040805160ff9092168252519081900360200190f35b610199610412565b6101996004803603602081101561022557600080fd5b50356001600160a01b0316610418565b6101996004803603602081101561024b57600080fd5b50356001600160a01b031661042a565b6100dc61043c565b61017d6004803603604081101561027957600080fd5b506001600160a01b03813516906020013561045b565b6102e0600480360360e08110156102a557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610468565b005b610199600480360360408110156102f857600080fd5b506001600160a01b038135811691602001351661066c565b6040518060400160405280600681526020016504458737761760d41b81525081565b600061033f338484610689565b5060015b92915050565b60005481565b6001600160a01b0383166000908152600260209081526040808320338452909152812054600019146103d4576001600160a01b03841660009081526002602090815260408083203384529091529020546103af908363ffffffff6106eb16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6103df84848461073b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60016020526000908152604090205481565b60046020526000908152604090205481565b6040518060400160405280600381526020016244585360e81b81525081565b600061033f33848461073b565b428410156104b4576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156105cf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106055750886001600160a01b0316816001600160a01b0316145b610656576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b610661898989610689565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115610343576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054610764908263ffffffff6106eb16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610799908263ffffffff6107f516565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b80820182811015610343576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfea265627a7a72315820992b12356c77aa11ac170c4fe73bc289a989e0c675b6c3300eea2888020a390f64736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3644E515 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0x95D89B41 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x263 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x28F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2E2 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x3644E515 EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x20F JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x235 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x191 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1AB JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x1E1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1E9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDC PUSH2 0x310 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x116 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xFE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x143 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x332 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x199 PUSH2 0x349 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x34F JUMP JUMPDEST PUSH2 0x199 PUSH2 0x3E9 JUMP JUMPDEST PUSH2 0x1F1 PUSH2 0x40D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x199 PUSH2 0x412 JUMP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x225 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x418 JUMP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x24B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x42A JUMP JUMPDEST PUSH2 0xDC PUSH2 0x43C JUMP JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x45B JUMP JUMPDEST PUSH2 0x2E0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x2A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x468 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x66C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x44587377617 PUSH1 0xD4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F CALLER DUP5 DUP5 PUSH2 0x689 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x3D4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x3AF SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x6EB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE JUMPDEST PUSH2 0x3DF DUP5 DUP5 DUP5 PUSH2 0x73B JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x445853 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F CALLER DUP5 DUP5 PUSH2 0x73B JUMP JUMPDEST TIMESTAMP DUP5 LT ISZERO PUSH2 0x4B4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x11161CDDD85C115490CC8C0E8811561412549151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP12 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP6 ADD DUP3 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x102 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH2 0x122 DUP1 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP7 ADD DUP7 MSTORE PUSH2 0x142 DUP5 ADD DUP1 DUP3 MSTORE DUP7 MLOAD SWAP7 DUP4 ADD SWAP7 SWAP1 SWAP7 KECCAK256 SWAP6 DUP4 SWAP1 MSTORE PUSH2 0x162 DUP5 ADD DUP1 DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0xFF DUP10 AND PUSH2 0x182 DUP6 ADD MSTORE PUSH2 0x1A2 DUP5 ADD DUP9 SWAP1 MSTORE PUSH2 0x1C2 DUP5 ADD DUP8 SWAP1 MSTORE MLOAD SWAP2 SWAP4 SWAP3 PUSH2 0x1E2 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x605 JUMPI POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x656 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617045524332303A20494E56414C49445F5349474E41545552450000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x661 DUP10 DUP10 DUP10 PUSH2 0x689 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x343 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x764 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x6EB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x799 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x7F5 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x343 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 SWAP10 0x2B SLT CALLDATALOAD PUSH13 0x77AA11AC170C4FE73BC289A989 0xE0 0xC6 PUSH22 0xB6C3300EEA2888020A390F64736F6C63430005100032 ", - "sourceMap": "102:3320:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;102:3320:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;175:38;;;:::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;175:38:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2161:144;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2161:144:1;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;303:24;;;:::i;:::-;;;;;;;;;;;;;;;;2453:295;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2453:295:1;;;;;;;;;;;;;;;;;:::i;589:108::-;;;:::i;262:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;448:31;;;:::i;333:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;333:41:1;-1:-1:-1;;;;;333:41:1;;:::i;703:38::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;703:38:1;-1:-1:-1;;;;;703:38:1;;:::i;219:37::-;;;:::i;2311:136::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2311:136:1;;;;;;;;:::i;2754:666::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;2754:666:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;380:61;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;380:61:1;;;;;;;;;;:::i;175:38::-;;;;;;;;;;;;;;-1:-1:-1;;;175:38:1;;;;:::o;2161:144::-;2225:4;2241:36;2250:10;2262:7;2271:5;2241:8;:36::i;:::-;-1:-1:-1;2294:4:1;2161:144;;;;;:::o;303:24::-;;;;:::o;2453:295::-;-1:-1:-1;;;;;2551:15:1;;2531:4;2551:15;;;:9;:15;;;;;;;;2567:10;2551:27;;;;;;;;-1:-1:-1;;2551:39:1;2547:138;;-1:-1:-1;;;;;2636:15:1;;;;;;:9;:15;;;;;;;;2652:10;2636:27;;;;;;;;:38;;2668:5;2636:38;:31;:38;:::i;:::-;-1:-1:-1;;;;;2606:15:1;;;;;;:9;:15;;;;;;;;2622:10;2606:27;;;;;;;:68;2547:138;2694:26;2704:4;2710:2;2714:5;2694:9;:26::i;:::-;-1:-1:-1;2737:4:1;2453:295;;;;;:::o;589:108::-;631:66;589:108;:::o;262:35::-;295:2;262:35;:::o;448:31::-;;;;:::o;333:41::-;;;;;;;;;;;;;:::o;703:38::-;;;;;;;;;;;;;:::o;219:37::-;;;;;;;;;;;;;;-1:-1:-1;;;219:37:1;;;;:::o;2311:136::-;2371:4;2387:32;2397:10;2409:2;2413:5;2387:9;:32::i;2754:666::-;2899:15;2887:8;:27;;2879:60;;;;;-1:-1:-1;;;2879:60:1;;;;;;;;;;;;-1:-1:-1;;;2879:60:1;;;;;;;;;;;;;;;3051:16;;-1:-1:-1;;;;;3146:13:1;;;2949:14;3146:13;;;:6;:13;;;;;;;;:15;;;;;;;;;3095:77;;631:66;3095:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3095:77:1;;;;;3085:88;;;;;;-1:-1:-1;;;2989:198:1;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2989:198:1;;;;;;2966:231;;;;;;;;;3234:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2949:14;;3146:15;3234:26;;;;;-1:-1:-1;;3234:26:1;;;;;;;;;;3146:15;3234:26;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;3234:26:1;;-1:-1:-1;;3234:26:1;;;-1:-1:-1;;;;;;;3278:30:1;;;;;;:59;;;3332:5;-1:-1:-1;;;;;3312:25:1;:16;-1:-1:-1;;;;;3312:25:1;;3278:59;3270:102;;;;;-1:-1:-1;;;3270:102:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;3382:31;3391:5;3398:7;3407:5;3382:8;:31::i;:::-;2754:666;;;;;;;;;:::o;380:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;1767:166::-;-1:-1:-1;;;;;1847:16:1;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;1895:31;;;;;;;;;;;;;;;;;1767:166;;;:::o;287:127:13:-;370:5;;;365:16;;;;357:50;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;;;1939:216:1;-1:-1:-1;;;;;2032:15:1;;;;;;:9;:15;;;;;;:26;;2052:5;2032:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;2014:15:1;;;;;;;:9;:15;;;;;;:44;;;;2084:13;;;;;;;:24;;2102:5;2084:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;2068:13:1;;;;;;;:9;:13;;;;;;;;;:40;;;;2123:25;;;;;;;2068:13;;2123:25;;;;;;;;;;;;;1939:216;;;:::o;155:126:13:-;238:5;;;233:16;;;;225:49;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;;" - } - }, - "interface": [ - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "608060405234801561001057600080fd5b5060405146908060526109638239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550610879806100ea6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633644e5151161008c57806395d89b411161006657806395d89b411461025b578063a9059cbb14610263578063d505accf1461028f578063dd62ed3e146102e2576100cf565b80633644e5151461020757806370a082311461020f5780637ecebe0014610235576100cf565b806306fdde03146100d4578063095ea7b31461015157806318160ddd1461019157806323b872dd146101ab57806330adf81f146101e1578063313ce567146101e9575b600080fd5b6100dc610310565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101165781810151838201526020016100fe565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561016757600080fd5b506001600160a01b038135169060200135610332565b604080519115158252519081900360200190f35b610199610349565b60408051918252519081900360200190f35b61017d600480360360608110156101c157600080fd5b506001600160a01b0381358116916020810135909116906040013561034f565b6101996103e9565b6101f161040d565b6040805160ff9092168252519081900360200190f35b610199610412565b6101996004803603602081101561022557600080fd5b50356001600160a01b0316610418565b6101996004803603602081101561024b57600080fd5b50356001600160a01b031661042a565b6100dc61043c565b61017d6004803603604081101561027957600080fd5b506001600160a01b03813516906020013561045b565b6102e0600480360360e08110156102a557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610468565b005b610199600480360360408110156102f857600080fd5b506001600160a01b038135811691602001351661066c565b6040518060400160405280600681526020016504458737761760d41b81525081565b600061033f338484610689565b5060015b92915050565b60005481565b6001600160a01b0383166000908152600260209081526040808320338452909152812054600019146103d4576001600160a01b03841660009081526002602090815260408083203384529091529020546103af908363ffffffff6106eb16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6103df84848461073b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60016020526000908152604090205481565b60046020526000908152604090205481565b6040518060400160405280600381526020016244585360e81b81525081565b600061033f33848461073b565b428410156104b4576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156105cf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106055750886001600160a01b0316816001600160a01b0316145b610656576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b610661898989610689565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115610343576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054610764908263ffffffff6106eb16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610799908263ffffffff6107f516565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b80820182811015610343576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfea265627a7a72315820992b12356c77aa11ac170c4fe73bc289a989e0c675b6c3300eea2888020a390f64736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429" -} \ No newline at end of file diff --git a/build/DXswapFactory.json b/build/DXswapFactory.json deleted file mode 100644 index b54335076..000000000 --- a/build/DXswapFactory.json +++ /dev/null @@ -1,533 +0,0 @@ -{ - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_feeToSetter", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token0", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token1", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "pair", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "PairCreated", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "INIT_CODE_PAIR_HASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "allPairs", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "allPairsLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "tokenA", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenB", - "type": "address" - } - ], - "name": "createPair", - "outputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "feeTo", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "feeToSetter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "getPair", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "protocolFeeDenominator", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "_feeTo", - "type": "address" - } - ], - "name": "setFeeTo", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "_feeToSetter", - "type": "address" - } - ], - "name": "setFeeToSetter", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint8", - "name": "_protocolFeeDenominator", - "type": "uint8" - } - ], - "name": "setProtocolFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "_pair", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_swapFee", - "type": "uint32" - } - ], - "name": "setSwapFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "60806040526001805460ff60a01b1916600960a01b17905534801561002357600080fd5b50604051612f9c380380612f9c8339818101604052602081101561004657600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055612f26806100766000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80635855a25a116100715780635855a25a1461015c5780639e68ceb814610164578063a2e74af614610196578063c9c65396146101bc578063e6a43905146101ea578063f46901ed14610218576100b4565b8063017e7e58146100b9578063094b7415146100dd5780631e3dd18b146100e55780632ff7042a146101025780634e91f81114610120578063574f2ba314610142575b600080fd5b6100c161023e565b604080516001600160a01b039092168252519081900360200190f35b6100c161024d565b6100c1600480360360208110156100fb57600080fd5b503561025c565b61010a610283565b6040805160ff9092168252519081900360200190f35b6101406004803603602081101561013657600080fd5b503560ff16610293565b005b61014a610365565b60408051918252519081900360200190f35b61014a61036b565b6101406004803603604081101561017a57600080fd5b5080356001600160a01b0316906020013563ffffffff166103fe565b610140600480360360208110156101ac57600080fd5b50356001600160a01b03166104c1565b6100c1600480360360408110156101d257600080fd5b506001600160a01b038135811691602001351661053d565b6100c16004803603604081101561020057600080fd5b506001600160a01b038135811691602001351661085f565b6101406004803603602081101561022e57600080fd5b50356001600160a01b0316610885565b6000546001600160a01b031681565b6001546001600160a01b031681565b6003818154811061026957fe5b6000918252602090912001546001600160a01b0316905081565b600154600160a01b900460ff1681565b6001546001600160a01b031633146102ed576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b60008160ff1611610345576040805162461bcd60e51b815260206004820152601c60248201527f445873776170466163746f72793a20464f5242494444454e5f46454500000000604482015290519081900360640190fd5b6001805460ff909216600160a01b0260ff60a01b19909216919091179055565b60035490565b60405161037a60208201610901565b6020820181038252601f19601f820116604052506040516020018082805190602001908083835b602083106103c05780518252601f1990920191602091820191016103a1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b6001546001600160a01b03163314610458576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b6040805163d6d788c360e01b815263ffffffff8316600482015290516001600160a01b0384169163d6d788c391602480830192600092919082900301818387803b1580156104a557600080fd5b505af11580156104b9573d6000803e3d6000fd5b505050505050565b6001546001600160a01b0316331461051b576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b031614156105905760405162461bcd60e51b8152600401808060200182810382526022815260200180612ed06022913960400191505060405180910390fd5b600080836001600160a01b0316856001600160a01b0316106105b35783856105b6565b84845b90925090506001600160a01b038216610616576040805162461bcd60e51b815260206004820152601b60248201527f445873776170466163746f72793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615610690576040805162461bcd60e51b815260206004820152601a60248201527f445873776170466163746f72793a20504149525f455849535453000000000000604482015290519081900360640190fd5b6060604051806020016106a290610901565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f56040805163485cc95560e01b81526001600160a01b038781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561077557600080fd5b505af1158015610789573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b031633146108df576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6125c18061090f8339019056fe6080604052600c805463ffffffff191660191790556001600d5534801561002557600080fd5b50604051469080605261256f8239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561245e806101116000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429445873776170466163746f72793a204944454e544943414c5f414444524553534553a265627a7a72315820c6fa710efa4f71df9b005295f714d02cccf70f7f9c7bc282fca1f7f11487da9064736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x9 PUSH1 0xA0 SHL OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x2F9C CODESIZE SUB DUP1 PUSH2 0x2F9C DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2F26 DUP1 PUSH2 0x76 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5855A25A GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x5855A25A EQ PUSH2 0x15C JUMPI DUP1 PUSH4 0x9E68CEB8 EQ PUSH2 0x164 JUMPI DUP1 PUSH4 0xA2E74AF6 EQ PUSH2 0x196 JUMPI DUP1 PUSH4 0xC9C65396 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0xE6A43905 EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0xF46901ED EQ PUSH2 0x218 JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x17E7E58 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x94B7415 EQ PUSH2 0xDD JUMPI DUP1 PUSH4 0x1E3DD18B EQ PUSH2 0xE5 JUMPI DUP1 PUSH4 0x2FF7042A EQ PUSH2 0x102 JUMPI DUP1 PUSH4 0x4E91F811 EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0x574F2BA3 EQ PUSH2 0x142 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0x23E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xC1 PUSH2 0x24D JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x25C JUMP JUMPDEST PUSH2 0x10A PUSH2 0x283 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xFF AND PUSH2 0x293 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x14A PUSH2 0x365 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x14A PUSH2 0x36B JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x17A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x3FE JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4C1 JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x53D JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x200 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x85F JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x885 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x269 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2ED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND GT PUSH2 0x345 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A20464F5242494444454E5F46454500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH1 0xFF PUSH1 0xA0 SHL NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37A PUSH1 0x20 DUP3 ADD PUSH2 0x901 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3C0 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x458 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xD6D788C3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0xD6D788C3 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4B9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x51B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x590 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2ED0 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x5B3 JUMPI DUP4 DUP6 PUSH2 0x5B6 JUMP JUMPDEST DUP5 DUP5 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x616 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A205A45524F5F414444524553530000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD AND ISZERO PUSH2 0x690 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A20504149525F455849535453000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0x6A2 SWAP1 PUSH2 0x901 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP SWAP1 POP PUSH1 0x0 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 DUP3 MLOAD PUSH1 0x20 DUP5 ADD PUSH1 0x0 CREATE2 PUSH1 0x40 DUP1 MLOAD PUSH4 0x485CC955 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP8 POP SWAP1 DUP8 AND SWAP2 PUSH4 0x485CC955 SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x775 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x789 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP10 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP1 SLOAD SWAP8 DUP14 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP9 DUP10 AND DUP2 OR SWAP1 SWAP2 SSTORE SWAP4 DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP7 DUP7 MSTORE DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP1 SLOAD DUP9 AND DUP6 OR SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE SWAP6 DUP2 SWAP1 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 SWAP6 ADD DUP1 SLOAD SWAP1 SWAP8 AND DUP5 OR SWAP1 SWAP7 SSTORE SWAP3 SLOAD DUP4 MLOAD SWAP3 DUP4 MSTORE SWAP1 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0xD3648BD0F6BA80134A33BA9275AC585D9D315F0AD8355CDDEFDE31AFA28D0E9 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x8DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x25C1 DUP1 PUSH2 0x90F DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH1 0x19 OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0xD SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD CHAINID SWAP1 DUP1 PUSH1 0x52 PUSH2 0x256F DUP3 CODECOPY PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB PUSH1 0x52 ADD DUP3 KECCAK256 DUP3 DUP3 ADD DUP3 MSTORE PUSH1 0x6 DUP4 MSTORE PUSH6 0x44587377617 PUSH1 0xD4 SHL PUSH1 0x20 SWAP4 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD DUP4 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL SWAP1 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x3649D708A7ABF9E212D0A587955EAD4123223014B2E46201DFB587457CBD4591 DUP2 DUP4 ADD MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP1 MSTORE DUP3 MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x3 SSTORE POP PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0x245E DUP1 PUSH2 0x111 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1CF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6A627842 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xBA9A7A56 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x583 JUMPI DUP1 PUSH4 0xD6D788C3 EQ PUSH2 0x5D4 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x5F7 JUMPI DUP1 PUSH4 0xFFF6CAE9 EQ PUSH2 0x625 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0xBA9A7A56 EQ PUSH2 0x545 JUMPI DUP1 PUSH4 0xBC25CF77 EQ PUSH2 0x54D JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xD21220A7 EQ PUSH2 0x57B JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0x89AFCB44 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x511 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x519 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x6A627842 EQ PUSH2 0x458 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x47E JUMPI DUP1 PUSH4 0x7464FC3D EQ PUSH2 0x4A4 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x485CC955 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x485CC955 EQ PUSH2 0x3F9 JUMPI DUP1 PUSH4 0x54CF2AEB EQ PUSH2 0x427 JUMPI DUP1 PUSH4 0x5909C0D5 EQ PUSH2 0x448 JUMPI DUP1 PUSH4 0x5A3D5493 EQ PUSH2 0x450 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x3D3 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x3F1 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x1AD JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x317 JUMPI DUP1 PUSH4 0xDFE1681 EQ PUSH2 0x357 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x37B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x395 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x22C0D9F EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x262 JUMPI DUP1 PUSH4 0x902F1AC EQ PUSH2 0x2DF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP4 ADD CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x62D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26A PUSH2 0xB7F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x28C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2D1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2E7 PUSH2 0xBA1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x32D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xBCB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x35F PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xBF1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xBF7 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xC91 JUMP JUMPDEST PUSH2 0x3DB PUSH2 0xCB5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xCBA JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x40F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xCC0 JUMP JUMPDEST PUSH2 0x42F PUSH2 0xD45 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xD51 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xD57 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD5D JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x494 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x105E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1076 JUMP JUMPDEST PUSH2 0x4F8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1088 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x26A PUSH2 0x142F JUMP JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x52F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x144E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x145B JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x563 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1461 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15CD JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15DC JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x17EF JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x60D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x18BF JUMP JUMPDEST PUSH2 0x260 PUSH2 0x18DC JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x679 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE DUP5 ISZERO ISZERO DUP1 PUSH2 0x68C JUMPI POP PUSH1 0x0 DUP5 GT JUMPDEST PUSH2 0x6C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23B6 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6D2 PUSH2 0xBA1 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP8 LT DUP1 ISZERO PUSH2 0x6F7 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP7 LT JUMPDEST PUSH2 0x732 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2394 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 SWAP1 DUP2 AND SWAP1 DUP10 AND DUP3 EQ DUP1 ISZERO SWAP1 PUSH2 0x770 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST PUSH2 0x7BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x445873776170506169723A20494E56414C49445F544F PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP11 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x7CB DUP3 DUP11 DUP14 PUSH2 0x1A3F JUMP JUMPDEST DUP10 ISZERO PUSH2 0x7DC JUMPI PUSH2 0x7DC DUP2 DUP11 DUP13 PUSH2 0x1A3F JUMP JUMPDEST DUP7 ISZERO PUSH2 0x897 JUMPI DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x78B94AE6 CALLER DUP14 DUP14 DUP13 DUP13 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x87E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x892 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8F1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x907 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x953 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x967 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x97D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP PUSH1 0x0 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP6 AND DUP11 SWAP1 SUB DUP4 GT PUSH2 0x9A0 JUMPI PUSH1 0x0 PUSH2 0x9AF JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 GT PUSH2 0x9CC JUMPI PUSH1 0x0 PUSH2 0x9DB JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 GT DUP1 PUSH2 0x9EC JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST PUSH2 0xA27 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23DC PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC SLOAD PUSH1 0x0 SWAP1 PUSH2 0xA64 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xA58 DUP8 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0xC SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0xA86 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH2 0xAB8 PUSH4 0x5F5E100 PUSH2 0xAAC PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP12 DUP2 AND SWAP1 DUP12 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xAC8 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST LT ISZERO PUSH2 0xB0B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x445873776170506169723A204B PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH2 0xB19 DUP5 DUP5 DUP9 DUP9 PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP14 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP13 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND SWAP2 CALLER SWAP2 PUSH32 0xD78AD95FA46C994B6551D0DA85FC275FE613CE37657FB8D5E3D130840159D822 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x44587377617 PUSH1 0xD4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP3 PUSH1 0x1 PUSH1 0x70 SHL DUP4 DIV SWAP1 SWAP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1E52 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x0 NOT EQ PUSH2 0xC7C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xC57 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE JUMPDEST PUSH2 0xC87 DUP5 DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD17 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x7 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xC SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0xDAB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0xDBB PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP4 SWAP6 POP SWAP2 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 PUSH2 0xED5 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xEF2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF00 DUP8 DUP8 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0xF3D JUMPI PUSH2 0xF29 PUSH2 0x3E8 PUSH2 0xA58 PUSH2 0xF24 DUP8 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0x2146 JUMP JUMPDEST SWAP9 POP PUSH2 0xF38 PUSH1 0x0 PUSH2 0x3E8 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xF8C JUMP JUMPDEST PUSH2 0xF89 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF5A DUP7 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF61 JUMPI INVALID JUMPDEST DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF7C DUP7 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF83 JUMPI INVALID JUMPDEST DIV PUSH2 0x222E JUMP JUMPDEST SWAP9 POP JUMPDEST PUSH1 0x0 DUP10 GT PUSH2 0xFCB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x236B PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFD5 DUP11 DUP11 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xFE1 DUP7 DUP7 DUP11 DUP11 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x1011 JUMPI PUSH1 0x8 SLOAD PUSH2 0x100D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP2 MLOAD CALLER SWAP3 PUSH32 0x4C209B5FC8AD50758F13E2E1088BA56A560DFF690A1C6FEF26394F4C03821C4F SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP SWAP5 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xB SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x10D7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0x10E7 PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP5 SWAP7 POP SWAP3 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP4 SWAP2 AND SWAP2 PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1143 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1157 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x116D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ADDRESS PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0x1204 DUP9 DUP9 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x121B DUP5 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x1222 JUMPI INVALID JUMPDEST DIV SWAP11 POP DUP1 PUSH2 0x1236 DUP5 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x123D JUMPI INVALID JUMPDEST DIV SWAP10 POP PUSH1 0x0 DUP12 GT DUP1 ISZERO PUSH2 0x1250 JUMPI POP PUSH1 0x0 DUP11 GT JUMPDEST PUSH2 0x128B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2401 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1295 ADDRESS DUP5 PUSH2 0x2246 JUMP JUMPDEST PUSH2 0x12A0 DUP8 DUP14 DUP14 PUSH2 0x1A3F JUMP JUMPDEST PUSH2 0x12AB DUP7 DUP14 DUP13 PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1305 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x131B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1367 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x137B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP PUSH2 0x13A1 DUP6 DUP6 DUP12 DUP12 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x13D1 JUMPI PUSH1 0x8 SLOAD PUSH2 0x13CD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP13 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND SWAP3 CALLER SWAP3 PUSH32 0xDCCD412F0B1252819CB1FD330B93224CA42612892BB3F4F789976E6D81936496 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP POP POP POP POP POP PUSH1 0x1 PUSH1 0xD DUP2 SWAP1 SSTORE POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x445853 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST PUSH2 0x3E8 DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x14AD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP5 SWAP1 SWAP4 AND SWAP3 PUSH2 0x155C SWAP3 DUP6 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 DUP6 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1533 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1549 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x15C3 SWAP3 DUP5 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST TIMESTAMP DUP5 LT ISZERO PUSH2 0x1637 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x11161CDDD85C115490CC8C0E8811561412549151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP12 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP6 ADD DUP3 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x102 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH2 0x122 DUP1 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP7 ADD DUP7 MSTORE PUSH2 0x142 DUP5 ADD DUP1 DUP3 MSTORE DUP7 MLOAD SWAP7 DUP4 ADD SWAP7 SWAP1 SWAP7 KECCAK256 SWAP6 DUP4 SWAP1 MSTORE PUSH2 0x162 DUP5 ADD DUP1 DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0xFF DUP10 AND PUSH2 0x182 DUP6 ADD MSTORE PUSH2 0x1A2 DUP5 ADD DUP9 SWAP1 MSTORE PUSH2 0x1C2 DUP5 ADD DUP8 SWAP1 MSTORE MLOAD SWAP2 SWAP4 SWAP3 PUSH2 0x1E2 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1752 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1788 JUMPI POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x17D9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617045524332303A20494E56414C49445F5349474E41545552450000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x17E4 DUP10 DUP10 DUP10 PUSH2 0x1E52 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1846 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3E8 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x18A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A20464F5242494444454E5F46454500000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x1928 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x1A38 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1979 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x198D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x19A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A04 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x1 PUSH1 0xD SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH32 0x7472616E7366657228616464726573732C75696E743235362900000000000000 PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP7 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP5 MSTORE SWAP2 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP2 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1AEC JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1ACD JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1B4E JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1B53 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x1B81 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x1B81 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x1BD2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A205452414E534645525F4641494C45440000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0x1BF4 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0x1BF1 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 GT DUP1 ISZERO SWAP1 PUSH2 0x1CAA JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 GT ISZERO JUMPDEST PUSH2 0x1CF2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x445873776170506169723A204F564552464C4F57 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH4 0xFFFFFFFF TIMESTAMP DUP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV DUP2 AND DUP3 SUB SWAP1 DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1D22 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 AND ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1D36 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1DA7 JUMPI DUP1 PUSH4 0xFFFFFFFF AND PUSH2 0x1D64 DUP6 PUSH2 0x1D4F DUP7 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x22F6 AND JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE PUSH4 0xFFFFFFFF DUP2 AND PUSH2 0x1D8F DUP5 PUSH2 0x1D4F DUP8 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP9 DUP2 AND SWAP2 SWAP1 SWAP2 OR PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x70 SHL NOT AND PUSH1 0x1 PUSH1 0x70 SHL DUP9 DUP4 AND DUP2 MUL SWAP2 SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0xE0 SHL PUSH4 0xFFFFFFFF DUP8 AND MUL OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP4 DIV SWAP1 SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x1C411E9A96E071241C2F21F7726B17AE89E3CAB4C78BE50E062B03A9FFFBBAD1 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1EDD SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x1F12 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17E7E58 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1FE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x17FB8215 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2FF7042A SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2036 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x204A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2060 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO DUP1 ISZERO SWAP6 POP SWAP2 SWAP3 POP SWAP1 PUSH2 0x2131 JUMPI DUP1 ISZERO PUSH2 0x212C JUMPI PUSH1 0x0 PUSH2 0x20A3 PUSH2 0xF24 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 DUP2 AND SWAP1 DUP10 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x20B0 DUP4 PUSH2 0x2146 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x2129 JUMPI PUSH1 0x0 PUSH2 0x20DE PUSH2 0x20CF DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2105 DUP4 PUSH2 0x20F9 DUP7 PUSH1 0xFF DUP11 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0x2112 JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 ISZERO PUSH2 0x2125 JUMPI PUSH2 0x2125 DUP9 DUP3 PUSH2 0x2198 JUMP JUMPDEST POP POP POP JUMPDEST POP POP JUMPDEST PUSH2 0x213D JUMP JUMPDEST DUP1 ISZERO PUSH2 0x213D JUMPI PUSH1 0x0 PUSH1 0xB SSTORE JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 GT ISZERO PUSH2 0x2189 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x2 DUP3 DIV ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2183 JUMPI DUP1 SWAP2 POP PUSH1 0x2 DUP2 DUP3 DUP6 DUP2 PUSH2 0x2172 JUMPI INVALID JUMPDEST DIV ADD DUP2 PUSH2 0x217B JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x215B JUMP JUMPDEST POP PUSH2 0x2193 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2193 JUMPI POP PUSH1 0x1 JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x21AB SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x21D6 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x223D JUMPI DUP2 PUSH2 0x223F JUMP JUMPDEST DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x226F SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SLOAD PUSH2 0x229C SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH1 0x1 PUSH1 0x70 SHL MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP5 AND DUP2 PUSH2 0x2313 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F 0x4D 0x49 0x4E SLOAD GASLIMIT DIFFICULTY DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4F SSTORE SLOAD POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x49 0x4E POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F TIMESTAMP SSTORE MSTORE 0x4E GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 0xBC SWAP15 MSTORE 0xC6 0x22 0xA7 RETURN PUSH25 0xA026EE16432D9BBC35CC0DB3D76CFAFD5D67631F595A9B1864 PUSH20 0x6F6C63430005100032454950373132446F6D6169 PUSH15 0x28737472696E67206E616D652C7374 PUSH19 0x696E672076657273696F6E2C75696E74323536 KECCAK256 PUSH4 0x6861696E 0x49 PUSH5 0x2C61646472 PUSH6 0x737320766572 PUSH10 0x6679696E67436F6E7472 PUSH2 0x6374 0x29 DIFFICULTY PC PUSH20 0x776170466163746F72793A204944454E54494341 0x4C 0x5F COINBASE DIFFICULTY DIFFICULTY MSTORE GASLIMIT MSTORE8 MSTORE8 GASLIMIT MSTORE8 LOG2 PUSH6 0x627A7A723158 KECCAK256 0xC6 STATICCALL PUSH18 0xEFA4F71DF9B005295F714D02CCCF70F7F9C PUSH28 0xC282FCA1F7F11487DA9064736F6C6343000510003200000000000000 ", - "sourceMap": "96:2445:2:-;;;201:39;;;-1:-1:-1;;;;201:39:2;-1:-1:-1;;;201:39:2;;;579:84;5:2:-1;;;;30:1;27;20:12;5:2;579:84:2;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;579:84:2;630:11;:26;;-1:-1:-1;;;;;;630:26:2;-1:-1:-1;;;;;630:26:2;;;;;;;;;-1:-1:-1;;96:2445:2;-1:-1:-1;96:2445:2;;" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100b45760003560e01c80635855a25a116100715780635855a25a1461015c5780639e68ceb814610164578063a2e74af614610196578063c9c65396146101bc578063e6a43905146101ea578063f46901ed14610218576100b4565b8063017e7e58146100b9578063094b7415146100dd5780631e3dd18b146100e55780632ff7042a146101025780634e91f81114610120578063574f2ba314610142575b600080fd5b6100c161023e565b604080516001600160a01b039092168252519081900360200190f35b6100c161024d565b6100c1600480360360208110156100fb57600080fd5b503561025c565b61010a610283565b6040805160ff9092168252519081900360200190f35b6101406004803603602081101561013657600080fd5b503560ff16610293565b005b61014a610365565b60408051918252519081900360200190f35b61014a61036b565b6101406004803603604081101561017a57600080fd5b5080356001600160a01b0316906020013563ffffffff166103fe565b610140600480360360208110156101ac57600080fd5b50356001600160a01b03166104c1565b6100c1600480360360408110156101d257600080fd5b506001600160a01b038135811691602001351661053d565b6100c16004803603604081101561020057600080fd5b506001600160a01b038135811691602001351661085f565b6101406004803603602081101561022e57600080fd5b50356001600160a01b0316610885565b6000546001600160a01b031681565b6001546001600160a01b031681565b6003818154811061026957fe5b6000918252602090912001546001600160a01b0316905081565b600154600160a01b900460ff1681565b6001546001600160a01b031633146102ed576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b60008160ff1611610345576040805162461bcd60e51b815260206004820152601c60248201527f445873776170466163746f72793a20464f5242494444454e5f46454500000000604482015290519081900360640190fd5b6001805460ff909216600160a01b0260ff60a01b19909216919091179055565b60035490565b60405161037a60208201610901565b6020820181038252601f19601f820116604052506040516020018082805190602001908083835b602083106103c05780518252601f1990920191602091820191016103a1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b6001546001600160a01b03163314610458576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b6040805163d6d788c360e01b815263ffffffff8316600482015290516001600160a01b0384169163d6d788c391602480830192600092919082900301818387803b1580156104a557600080fd5b505af11580156104b9573d6000803e3d6000fd5b505050505050565b6001546001600160a01b0316331461051b576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b031614156105905760405162461bcd60e51b8152600401808060200182810382526022815260200180612ed06022913960400191505060405180910390fd5b600080836001600160a01b0316856001600160a01b0316106105b35783856105b6565b84845b90925090506001600160a01b038216610616576040805162461bcd60e51b815260206004820152601b60248201527f445873776170466163746f72793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615610690576040805162461bcd60e51b815260206004820152601a60248201527f445873776170466163746f72793a20504149525f455849535453000000000000604482015290519081900360640190fd5b6060604051806020016106a290610901565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f56040805163485cc95560e01b81526001600160a01b038781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561077557600080fd5b505af1158015610789573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b031633146108df576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6125c18061090f8339019056fe6080604052600c805463ffffffff191660191790556001600d5534801561002557600080fd5b50604051469080605261256f8239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561245e806101116000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429445873776170466163746f72793a204944454e544943414c5f414444524553534553a265627a7a72315820c6fa710efa4f71df9b005295f714d02cccf70f7f9c7bc282fca1f7f11487da9064736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5855A25A GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x5855A25A EQ PUSH2 0x15C JUMPI DUP1 PUSH4 0x9E68CEB8 EQ PUSH2 0x164 JUMPI DUP1 PUSH4 0xA2E74AF6 EQ PUSH2 0x196 JUMPI DUP1 PUSH4 0xC9C65396 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0xE6A43905 EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0xF46901ED EQ PUSH2 0x218 JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x17E7E58 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x94B7415 EQ PUSH2 0xDD JUMPI DUP1 PUSH4 0x1E3DD18B EQ PUSH2 0xE5 JUMPI DUP1 PUSH4 0x2FF7042A EQ PUSH2 0x102 JUMPI DUP1 PUSH4 0x4E91F811 EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0x574F2BA3 EQ PUSH2 0x142 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0x23E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xC1 PUSH2 0x24D JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x25C JUMP JUMPDEST PUSH2 0x10A PUSH2 0x283 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xFF AND PUSH2 0x293 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x14A PUSH2 0x365 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x14A PUSH2 0x36B JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x17A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x3FE JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4C1 JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x53D JUMP JUMPDEST PUSH2 0xC1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x200 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x85F JUMP JUMPDEST PUSH2 0x140 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x885 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x269 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2ED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND GT PUSH2 0x345 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A20464F5242494444454E5F46454500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH1 0xFF PUSH1 0xA0 SHL NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37A PUSH1 0x20 DUP3 ADD PUSH2 0x901 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3C0 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3A1 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x458 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xD6D788C3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0xD6D788C3 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4B9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x51B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x590 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2ED0 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0x5B3 JUMPI DUP4 DUP6 PUSH2 0x5B6 JUMP JUMPDEST DUP5 DUP5 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x616 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A205A45524F5F414444524553530000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD AND ISZERO PUSH2 0x690 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170466163746F72793A20504149525F455849535453000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH2 0x6A2 SWAP1 PUSH2 0x901 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD DUP2 SUB DUP3 MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND PUSH1 0x40 MSTORE POP SWAP1 POP PUSH1 0x0 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 DUP3 MLOAD PUSH1 0x20 DUP5 ADD PUSH1 0x0 CREATE2 PUSH1 0x40 DUP1 MLOAD PUSH4 0x485CC955 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP8 POP SWAP1 DUP8 AND SWAP2 PUSH4 0x485CC955 SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x775 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x789 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP10 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP1 SLOAD SWAP8 DUP14 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP9 DUP10 AND DUP2 OR SWAP1 SWAP2 SSTORE SWAP4 DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP7 DUP7 MSTORE DUP4 MSTORE DUP2 DUP6 KECCAK256 DUP1 SLOAD DUP9 AND DUP6 OR SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE SWAP6 DUP2 SWAP1 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 SWAP6 ADD DUP1 SLOAD SWAP1 SWAP8 AND DUP5 OR SWAP1 SWAP7 SSTORE SWAP3 SLOAD DUP4 MLOAD SWAP3 DUP4 MSTORE SWAP1 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0xD3648BD0F6BA80134A33BA9275AC585D9D315F0AD8355CDDEFDE31AFA28D0E9 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x8DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x222C39BBB0B82330B1BA37B93C9D102327A92124A22222A7 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x25C1 DUP1 PUSH2 0x90F DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH1 0x19 OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0xD SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD CHAINID SWAP1 DUP1 PUSH1 0x52 PUSH2 0x256F DUP3 CODECOPY PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB PUSH1 0x52 ADD DUP3 KECCAK256 DUP3 DUP3 ADD DUP3 MSTORE PUSH1 0x6 DUP4 MSTORE PUSH6 0x44587377617 PUSH1 0xD4 SHL PUSH1 0x20 SWAP4 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD DUP4 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL SWAP1 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x3649D708A7ABF9E212D0A587955EAD4123223014B2E46201DFB587457CBD4591 DUP2 DUP4 ADD MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP1 MSTORE DUP3 MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x3 SSTORE POP PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0x245E DUP1 PUSH2 0x111 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1CF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6A627842 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xBA9A7A56 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x583 JUMPI DUP1 PUSH4 0xD6D788C3 EQ PUSH2 0x5D4 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x5F7 JUMPI DUP1 PUSH4 0xFFF6CAE9 EQ PUSH2 0x625 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0xBA9A7A56 EQ PUSH2 0x545 JUMPI DUP1 PUSH4 0xBC25CF77 EQ PUSH2 0x54D JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xD21220A7 EQ PUSH2 0x57B JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0x89AFCB44 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x511 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x519 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x6A627842 EQ PUSH2 0x458 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x47E JUMPI DUP1 PUSH4 0x7464FC3D EQ PUSH2 0x4A4 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x485CC955 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x485CC955 EQ PUSH2 0x3F9 JUMPI DUP1 PUSH4 0x54CF2AEB EQ PUSH2 0x427 JUMPI DUP1 PUSH4 0x5909C0D5 EQ PUSH2 0x448 JUMPI DUP1 PUSH4 0x5A3D5493 EQ PUSH2 0x450 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x3D3 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x3F1 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x1AD JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x317 JUMPI DUP1 PUSH4 0xDFE1681 EQ PUSH2 0x357 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x37B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x395 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x22C0D9F EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x262 JUMPI DUP1 PUSH4 0x902F1AC EQ PUSH2 0x2DF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP4 ADD CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x62D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26A PUSH2 0xB7F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x28C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2D1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2E7 PUSH2 0xBA1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x32D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xBCB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x35F PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xBF1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xBF7 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xC91 JUMP JUMPDEST PUSH2 0x3DB PUSH2 0xCB5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xCBA JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x40F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xCC0 JUMP JUMPDEST PUSH2 0x42F PUSH2 0xD45 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xD51 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xD57 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD5D JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x494 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x105E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1076 JUMP JUMPDEST PUSH2 0x4F8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1088 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x26A PUSH2 0x142F JUMP JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x52F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x144E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x145B JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x563 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1461 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15CD JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15DC JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x17EF JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x60D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x18BF JUMP JUMPDEST PUSH2 0x260 PUSH2 0x18DC JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x679 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE DUP5 ISZERO ISZERO DUP1 PUSH2 0x68C JUMPI POP PUSH1 0x0 DUP5 GT JUMPDEST PUSH2 0x6C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23B6 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6D2 PUSH2 0xBA1 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP8 LT DUP1 ISZERO PUSH2 0x6F7 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP7 LT JUMPDEST PUSH2 0x732 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2394 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 SWAP1 DUP2 AND SWAP1 DUP10 AND DUP3 EQ DUP1 ISZERO SWAP1 PUSH2 0x770 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST PUSH2 0x7BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x445873776170506169723A20494E56414C49445F544F PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP11 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x7CB DUP3 DUP11 DUP14 PUSH2 0x1A3F JUMP JUMPDEST DUP10 ISZERO PUSH2 0x7DC JUMPI PUSH2 0x7DC DUP2 DUP11 DUP13 PUSH2 0x1A3F JUMP JUMPDEST DUP7 ISZERO PUSH2 0x897 JUMPI DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x78B94AE6 CALLER DUP14 DUP14 DUP13 DUP13 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x87E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x892 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8F1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x907 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x953 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x967 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x97D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP PUSH1 0x0 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP6 AND DUP11 SWAP1 SUB DUP4 GT PUSH2 0x9A0 JUMPI PUSH1 0x0 PUSH2 0x9AF JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 GT PUSH2 0x9CC JUMPI PUSH1 0x0 PUSH2 0x9DB JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 GT DUP1 PUSH2 0x9EC JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST PUSH2 0xA27 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23DC PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC SLOAD PUSH1 0x0 SWAP1 PUSH2 0xA64 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xA58 DUP8 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0xC SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0xA86 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH2 0xAB8 PUSH4 0x5F5E100 PUSH2 0xAAC PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP12 DUP2 AND SWAP1 DUP12 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xAC8 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST LT ISZERO PUSH2 0xB0B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x445873776170506169723A204B PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH2 0xB19 DUP5 DUP5 DUP9 DUP9 PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP14 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP13 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND SWAP2 CALLER SWAP2 PUSH32 0xD78AD95FA46C994B6551D0DA85FC275FE613CE37657FB8D5E3D130840159D822 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x44587377617 PUSH1 0xD4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP3 PUSH1 0x1 PUSH1 0x70 SHL DUP4 DIV SWAP1 SWAP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1E52 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x0 NOT EQ PUSH2 0xC7C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xC57 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE JUMPDEST PUSH2 0xC87 DUP5 DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD17 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x7 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xC SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0xDAB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0xDBB PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP4 SWAP6 POP SWAP2 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 PUSH2 0xED5 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xEF2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF00 DUP8 DUP8 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0xF3D JUMPI PUSH2 0xF29 PUSH2 0x3E8 PUSH2 0xA58 PUSH2 0xF24 DUP8 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0x2146 JUMP JUMPDEST SWAP9 POP PUSH2 0xF38 PUSH1 0x0 PUSH2 0x3E8 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xF8C JUMP JUMPDEST PUSH2 0xF89 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF5A DUP7 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF61 JUMPI INVALID JUMPDEST DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF7C DUP7 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF83 JUMPI INVALID JUMPDEST DIV PUSH2 0x222E JUMP JUMPDEST SWAP9 POP JUMPDEST PUSH1 0x0 DUP10 GT PUSH2 0xFCB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x236B PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFD5 DUP11 DUP11 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xFE1 DUP7 DUP7 DUP11 DUP11 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x1011 JUMPI PUSH1 0x8 SLOAD PUSH2 0x100D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP2 MLOAD CALLER SWAP3 PUSH32 0x4C209B5FC8AD50758F13E2E1088BA56A560DFF690A1C6FEF26394F4C03821C4F SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP SWAP5 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xB SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x10D7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0x10E7 PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP5 SWAP7 POP SWAP3 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP4 SWAP2 AND SWAP2 PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1143 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1157 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x116D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ADDRESS PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0x1204 DUP9 DUP9 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x121B DUP5 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x1222 JUMPI INVALID JUMPDEST DIV SWAP11 POP DUP1 PUSH2 0x1236 DUP5 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x123D JUMPI INVALID JUMPDEST DIV SWAP10 POP PUSH1 0x0 DUP12 GT DUP1 ISZERO PUSH2 0x1250 JUMPI POP PUSH1 0x0 DUP11 GT JUMPDEST PUSH2 0x128B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2401 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1295 ADDRESS DUP5 PUSH2 0x2246 JUMP JUMPDEST PUSH2 0x12A0 DUP8 DUP14 DUP14 PUSH2 0x1A3F JUMP JUMPDEST PUSH2 0x12AB DUP7 DUP14 DUP13 PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1305 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x131B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1367 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x137B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP PUSH2 0x13A1 DUP6 DUP6 DUP12 DUP12 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x13D1 JUMPI PUSH1 0x8 SLOAD PUSH2 0x13CD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP13 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND SWAP3 CALLER SWAP3 PUSH32 0xDCCD412F0B1252819CB1FD330B93224CA42612892BB3F4F789976E6D81936496 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP POP POP POP POP POP PUSH1 0x1 PUSH1 0xD DUP2 SWAP1 SSTORE POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x445853 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST PUSH2 0x3E8 DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x14AD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP5 SWAP1 SWAP4 AND SWAP3 PUSH2 0x155C SWAP3 DUP6 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 DUP6 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1533 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1549 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x15C3 SWAP3 DUP5 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST TIMESTAMP DUP5 LT ISZERO PUSH2 0x1637 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x11161CDDD85C115490CC8C0E8811561412549151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP12 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP6 ADD DUP3 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x102 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH2 0x122 DUP1 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP7 ADD DUP7 MSTORE PUSH2 0x142 DUP5 ADD DUP1 DUP3 MSTORE DUP7 MLOAD SWAP7 DUP4 ADD SWAP7 SWAP1 SWAP7 KECCAK256 SWAP6 DUP4 SWAP1 MSTORE PUSH2 0x162 DUP5 ADD DUP1 DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0xFF DUP10 AND PUSH2 0x182 DUP6 ADD MSTORE PUSH2 0x1A2 DUP5 ADD DUP9 SWAP1 MSTORE PUSH2 0x1C2 DUP5 ADD DUP8 SWAP1 MSTORE MLOAD SWAP2 SWAP4 SWAP3 PUSH2 0x1E2 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1752 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1788 JUMPI POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x17D9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617045524332303A20494E56414C49445F5349474E41545552450000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x17E4 DUP10 DUP10 DUP10 PUSH2 0x1E52 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1846 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3E8 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x18A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A20464F5242494444454E5F46454500000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x1928 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x1A38 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1979 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x198D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x19A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A04 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x1 PUSH1 0xD SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH32 0x7472616E7366657228616464726573732C75696E743235362900000000000000 PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP7 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP5 MSTORE SWAP2 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP2 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1AEC JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1ACD JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1B4E JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1B53 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x1B81 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x1B81 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x1BD2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A205452414E534645525F4641494C45440000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0x1BF4 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0x1BF1 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 GT DUP1 ISZERO SWAP1 PUSH2 0x1CAA JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 GT ISZERO JUMPDEST PUSH2 0x1CF2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x445873776170506169723A204F564552464C4F57 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH4 0xFFFFFFFF TIMESTAMP DUP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV DUP2 AND DUP3 SUB SWAP1 DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1D22 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 AND ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1D36 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1DA7 JUMPI DUP1 PUSH4 0xFFFFFFFF AND PUSH2 0x1D64 DUP6 PUSH2 0x1D4F DUP7 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x22F6 AND JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE PUSH4 0xFFFFFFFF DUP2 AND PUSH2 0x1D8F DUP5 PUSH2 0x1D4F DUP8 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP9 DUP2 AND SWAP2 SWAP1 SWAP2 OR PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x70 SHL NOT AND PUSH1 0x1 PUSH1 0x70 SHL DUP9 DUP4 AND DUP2 MUL SWAP2 SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0xE0 SHL PUSH4 0xFFFFFFFF DUP8 AND MUL OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP4 DIV SWAP1 SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x1C411E9A96E071241C2F21F7726B17AE89E3CAB4C78BE50E062B03A9FFFBBAD1 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1EDD SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x1F12 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17E7E58 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1FE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x17FB8215 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2FF7042A SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2036 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x204A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2060 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO DUP1 ISZERO SWAP6 POP SWAP2 SWAP3 POP SWAP1 PUSH2 0x2131 JUMPI DUP1 ISZERO PUSH2 0x212C JUMPI PUSH1 0x0 PUSH2 0x20A3 PUSH2 0xF24 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 DUP2 AND SWAP1 DUP10 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x20B0 DUP4 PUSH2 0x2146 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x2129 JUMPI PUSH1 0x0 PUSH2 0x20DE PUSH2 0x20CF DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2105 DUP4 PUSH2 0x20F9 DUP7 PUSH1 0xFF DUP11 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0x2112 JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 ISZERO PUSH2 0x2125 JUMPI PUSH2 0x2125 DUP9 DUP3 PUSH2 0x2198 JUMP JUMPDEST POP POP POP JUMPDEST POP POP JUMPDEST PUSH2 0x213D JUMP JUMPDEST DUP1 ISZERO PUSH2 0x213D JUMPI PUSH1 0x0 PUSH1 0xB SSTORE JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 GT ISZERO PUSH2 0x2189 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x2 DUP3 DIV ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2183 JUMPI DUP1 SWAP2 POP PUSH1 0x2 DUP2 DUP3 DUP6 DUP2 PUSH2 0x2172 JUMPI INVALID JUMPDEST DIV ADD DUP2 PUSH2 0x217B JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x215B JUMP JUMPDEST POP PUSH2 0x2193 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2193 JUMPI POP PUSH1 0x1 JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x21AB SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x21D6 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x223D JUMPI DUP2 PUSH2 0x223F JUMP JUMPDEST DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x226F SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SLOAD PUSH2 0x229C SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH1 0x1 PUSH1 0x70 SHL MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP5 AND DUP2 PUSH2 0x2313 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F 0x4D 0x49 0x4E SLOAD GASLIMIT DIFFICULTY DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4F SSTORE SLOAD POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x49 0x4E POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F TIMESTAMP SSTORE MSTORE 0x4E GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 0xBC SWAP15 MSTORE 0xC6 0x22 0xA7 RETURN PUSH25 0xA026EE16432D9BBC35CC0DB3D76CFAFD5D67631F595A9B1864 PUSH20 0x6F6C63430005100032454950373132446F6D6169 PUSH15 0x28737472696E67206E616D652C7374 PUSH19 0x696E672076657273696F6E2C75696E74323536 KECCAK256 PUSH4 0x6861696E 0x49 PUSH5 0x2C61646472 PUSH6 0x737320766572 PUSH10 0x6679696E67436F6E7472 PUSH2 0x6374 0x29 DIFFICULTY PC PUSH20 0x776170466163746F72793A204944454E54494341 0x4C 0x5F COINBASE DIFFICULTY DIFFICULTY MSTORE GASLIMIT MSTORE8 MSTORE8 GASLIMIT MSTORE8 LOG2 PUSH6 0x627A7A723158 KECCAK256 0xC6 STATICCALL PUSH18 0xEFA4F71DF9B005295F714D02CCCF70F7F9C PUSH28 0xC282FCA1F7F11487DA9064736F6C6343000510003200000000000000 ", - "sourceMap": "96:2445:2:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;96:2445:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;143:20;;;:::i;:::-;;;;-1:-1:-1;;;;;143:20:2;;;;;;;;;;;;;;169:26;;;:::i;455:25::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;455:25:2;;:::i;201:39::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2061:279;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2061:279:2;;;;:::i;:::-;;669:94;;;:::i;:::-;;;;;;;;;;;;;;;;276:104;;;:::i;2350:189::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2350:189:2;;-1:-1:-1;;;;;2350:189:2;;;;;;;;:::i;1881:170::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1881:170:2;-1:-1:-1;;;;;1881:170:2;;:::i;769:954::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;769:954:2;;;;;;;;;;:::i;387:62::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;387:62:2;;;;;;;;;;:::i;1729:146::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1729:146:2;-1:-1:-1;;;;;1729:146:2;;:::i;143:20::-;;;-1:-1:-1;;;;;143:20:2;;:::o;169:26::-;;;-1:-1:-1;;;;;169:26:2;;:::o;455:25::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;455:25:2;;-1:-1:-1;455:25:2;:::o;201:39::-;;;-1:-1:-1;;;201:39:2;;;;;:::o;2061:279::-;2157:11;;-1:-1:-1;;;;;2157:11:2;2143:10;:25;2135:62;;;;;-1:-1:-1;;;2135:62:2;;;;;;;;;;;;-1:-1:-1;;;2135:62:2;;;;;;;;;;;;;;;2241:1;2215:23;:27;;;2207:68;;;;;-1:-1:-1;;;2207:68:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;2285:22;:48;;;;;;;-1:-1:-1;;;2285:48:2;-1:-1:-1;;;;2285:48:2;;;;;;;;;2061:279::o;669:94::-;741:8;:15;669:94;:::o;276:104::-;349:29;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;87:2;83:7;78:2;73:3;69:12;65:26;61:2;54:38;349:29:2;332:47;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;332:47:2;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;332:47:2;;;322:58;;;;;;276:104;:::o;2350:189::-;2443:11;;-1:-1:-1;;;;;2443:11:2;2429:10;:25;2421:62;;;;;-1:-1:-1;;;2421:62:2;;;;;;;;;;;;-1:-1:-1;;;2421:62:2;;;;;;;;;;;;;;;2493:39;;;-1:-1:-1;;;2493:39:2;;;;;;;;;;;-1:-1:-1;;;;;2493:29:2;;;-1:-1:-1;;2493:39:2;;;;;-1:-1:-1;;2493:39:2;;;;;;;-1:-1:-1;2493:29:2;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;2493:39:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2493:39:2;;;;2350:189;;:::o;1881:170::-;1968:11;;-1:-1:-1;;;;;1968:11:2;1954:10;:25;1946:62;;;;;-1:-1:-1;;;1946:62:2;;;;;;;;;;;;-1:-1:-1;;;1946:62:2;;;;;;;;;;;;;;;2018:11;:26;;-1:-1:-1;;;;;;2018:26:2;-1:-1:-1;;;;;2018:26:2;;;;;;;;;;1881:170::o;769:954::-;839:12;-1:-1:-1;;;;;871:16:2;;;;;;;;863:63;;;;-1:-1:-1;;;863:63:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;937:14;;-1:-1:-1;;;;;971:15:2;;;;;;;:53;;1009:6;1017;971:53;;;990:6;998;971:53;936:88;;-1:-1:-1;936:88:2;-1:-1:-1;;;;;;1042:20:2;;1034:60;;;;;-1:-1:-1;;;1034:60:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1112:15:2;;;1147:1;1112:15;;;:7;:15;;;;;;;;:23;;;;;;;;;;;;:37;1104:76;;;;;-1:-1:-1;;;1104:76:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;1220:21;1244:29;;;;;;;;:::i;:::-;-1:-1:-1;;21:26;;;;;7:41;;87:2;69:12;;;65:26;61:2;54:38;;;-1:-1;;1308:32:2;;;;;;41:4:-1;1308:32:2;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;1308:32:2;;;;;;;1298:43;;;;;;;;;1412:15;;34:5:-1;;-1:-1;1298:43:2;;;30:16:-1;;1283:12:2;1382:52;1453:44;;;-1:-1:-1;;;1453:44:2;;-1:-1:-1;;;;;1453:44:2;;;;;;;;;;;;;;;;1374:60;;-1:-1:-1;1453:28:2;;;;-1:-1:-1;;1453:44:2;;;;;-1:-1:-1;;1453:44:2;;;;;;;;-1:-1:-1;1453:28:2;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;1453:44:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;;;;;;1507:15:2;;;;;;;:7;:15;;;;;;;;:23;;;;;;;;;;;;:30;;;;;-1:-1:-1;;;;;;1507:30:2;;;;;;;;1547:15;;;;;;:23;;;;;;;;:30;;;;;;;;1632:8;27:10:-1;;-1:-1;23:18;;45:23;;1632:19:2;;;;;;;;;;;;;;;;;;1700:15;;1666:50;;;;;;;;;;;;;;;;;;;;;;769:954;;;;;;;;:::o;387:62::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;387:62:2;;:::o;1729:146::-;1804:11;;-1:-1:-1;;;;;1804:11:2;1790:10;:25;1782:62;;;;;-1:-1:-1;;;1782:62:2;;;;;;;;;;;;-1:-1:-1;;;1782:62:2;;;;;;;;;;;;;;;1854:5;:14;;-1:-1:-1;;;;;;1854:14:2;-1:-1:-1;;;;;1854:14:2;;;;;;;;;;1729:146::o;96:2445::-;;;;;;;;:::o" - } - }, - "interface": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_feeToSetter", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token0", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token1", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "pair", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "PairCreated", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "INIT_CODE_PAIR_HASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "allPairs", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "allPairsLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "tokenA", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenB", - "type": "address" - } - ], - "name": "createPair", - "outputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "feeTo", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "feeToSetter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "getPair", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "protocolFeeDenominator", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "_feeTo", - "type": "address" - } - ], - "name": "setFeeTo", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "_feeToSetter", - "type": "address" - } - ], - "name": "setFeeToSetter", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint8", - "name": "_protocolFeeDenominator", - "type": "uint8" - } - ], - "name": "setProtocolFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "_pair", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_swapFee", - "type": "uint32" - } - ], - "name": "setSwapFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "60806040526001805460ff60a01b1916600960a01b17905534801561002357600080fd5b50604051612f9c380380612f9c8339818101604052602081101561004657600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055612f26806100766000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80635855a25a116100715780635855a25a1461015c5780639e68ceb814610164578063a2e74af614610196578063c9c65396146101bc578063e6a43905146101ea578063f46901ed14610218576100b4565b8063017e7e58146100b9578063094b7415146100dd5780631e3dd18b146100e55780632ff7042a146101025780634e91f81114610120578063574f2ba314610142575b600080fd5b6100c161023e565b604080516001600160a01b039092168252519081900360200190f35b6100c161024d565b6100c1600480360360208110156100fb57600080fd5b503561025c565b61010a610283565b6040805160ff9092168252519081900360200190f35b6101406004803603602081101561013657600080fd5b503560ff16610293565b005b61014a610365565b60408051918252519081900360200190f35b61014a61036b565b6101406004803603604081101561017a57600080fd5b5080356001600160a01b0316906020013563ffffffff166103fe565b610140600480360360208110156101ac57600080fd5b50356001600160a01b03166104c1565b6100c1600480360360408110156101d257600080fd5b506001600160a01b038135811691602001351661053d565b6100c16004803603604081101561020057600080fd5b506001600160a01b038135811691602001351661085f565b6101406004803603602081101561022e57600080fd5b50356001600160a01b0316610885565b6000546001600160a01b031681565b6001546001600160a01b031681565b6003818154811061026957fe5b6000918252602090912001546001600160a01b0316905081565b600154600160a01b900460ff1681565b6001546001600160a01b031633146102ed576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b60008160ff1611610345576040805162461bcd60e51b815260206004820152601c60248201527f445873776170466163746f72793a20464f5242494444454e5f46454500000000604482015290519081900360640190fd5b6001805460ff909216600160a01b0260ff60a01b19909216919091179055565b60035490565b60405161037a60208201610901565b6020820181038252601f19601f820116604052506040516020018082805190602001908083835b602083106103c05780518252601f1990920191602091820191016103a1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b6001546001600160a01b03163314610458576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b6040805163d6d788c360e01b815263ffffffff8316600482015290516001600160a01b0384169163d6d788c391602480830192600092919082900301818387803b1580156104a557600080fd5b505af11580156104b9573d6000803e3d6000fd5b505050505050565b6001546001600160a01b0316331461051b576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b031614156105905760405162461bcd60e51b8152600401808060200182810382526022815260200180612ed06022913960400191505060405180910390fd5b600080836001600160a01b0316856001600160a01b0316106105b35783856105b6565b84845b90925090506001600160a01b038216610616576040805162461bcd60e51b815260206004820152601b60248201527f445873776170466163746f72793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615610690576040805162461bcd60e51b815260206004820152601a60248201527f445873776170466163746f72793a20504149525f455849535453000000000000604482015290519081900360640190fd5b6060604051806020016106a290610901565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f56040805163485cc95560e01b81526001600160a01b038781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561077557600080fd5b505af1158015610789573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b031633146108df576040805162461bcd60e51b8152602060048201526018602482015277222c39bbb0b82330b1ba37b93c9d102327a92124a22222a760411b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6125c18061090f8339019056fe6080604052600c805463ffffffff191660191790556001600d5534801561002557600080fd5b50604051469080605261256f8239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561245e806101116000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429445873776170466163746f72793a204944454e544943414c5f414444524553534553a265627a7a72315820c6fa710efa4f71df9b005295f714d02cccf70f7f9c7bc282fca1f7f11487da9064736f6c63430005100032" -} \ No newline at end of file diff --git a/build/DXswapFeeReceiver.json b/build/DXswapFeeReceiver.json deleted file mode 100644 index 3750566f2..000000000 --- a/build/DXswapFeeReceiver.json +++ /dev/null @@ -1,345 +0,0 @@ -{ - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_factory", - "type": "address" - }, - { - "internalType": "address", - "name": "_WETH", - "type": "address" - }, - { - "internalType": "address", - "name": "_ethReceiver", - "type": "address" - }, - { - "internalType": "address", - "name": "_fallbackReceiver", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "payable": true, - "stateMutability": "payable", - "type": "fallback" - }, - { - "constant": true, - "inputs": [], - "name": "WETH", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "_ethReceiver", - "type": "address" - }, - { - "internalType": "address", - "name": "_fallbackReceiver", - "type": "address" - } - ], - "name": "changeReceivers", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "ethReceiver", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "contract IDXswapFactory", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "fallbackReceiver", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "contract IDXswapPair[]", - "name": "pairs", - "type": "address[]" - } - ], - "name": "takeProtocolFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50604051611179380380611179833981810160405260a081101561003357600080fd5b508051602082015160408301516060840151608090940151600080546001600160a01b039586166001600160a01b031991821617909155600180549486169482169490941790935560028054928516928416929092179091556003805494841694831694909417909355600480549290931691161790556110c0806100b96000396000f3fe60806040526004361061007b5760003560e01c8063c1f4381d1161004e578063c1f4381d14610155578063c45a015514610190578063f2269521146101a5578063f2fde38b146101ba5761007b565b80635cb9c4ec1461007d5780638da5cb5b146100fa578063ad5c46481461012b578063b988847214610140575b005b34801561008957600080fd5b5061007b600480360360208110156100a057600080fd5b8101906020810181356401000000008111156100bb57600080fd5b8201836020820111156100cd57600080fd5b803590602001918460208302840111640100000000831117156100ef57600080fd5b5090925090506101ed565b34801561010657600080fd5b5061010f610511565b604080516001600160a01b039092168252519081900360200190f35b34801561013757600080fd5b5061010f610520565b34801561014c57600080fd5b5061010f61052f565b34801561016157600080fd5b5061007b6004803603604081101561017857600080fd5b506001600160a01b038135811691602001351661053e565b34801561019c57600080fd5b5061010f6105cb565b3480156101b157600080fd5b5061010f6105da565b3480156101c657600080fd5b5061007b600480360360208110156101dd57600080fd5b50356001600160a01b03166105e9565b60005b8181101561050c57600083838381811061020657fe5b905060200201356001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561024e57600080fd5b505afa158015610262573d6000803e3d6000fd5b505050506040513d602081101561027857600080fd5b50519050600084848481811061028a57fe5b905060200201356001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156102d257600080fd5b505afa1580156102e6573d6000803e3d6000fd5b505050506040513d60208110156102fc57600080fd5b5051905084848481811061030c57fe5b905060200201356001600160a01b03166001600160a01b031663a9059cbb86868681811061033657fe5b905060200201356001600160a01b031687878781811061035257fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561039e57600080fd5b505afa1580156103b2573d6000803e3d6000fd5b505050506040513d60208110156103c857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561041957600080fd5b505af115801561042d573d6000803e3d6000fd5b505050506040513d602081101561044357600080fd5b50600090508086868681811061045557fe5b6040805163226bf2d160e21b8152306004820152815160209390930294909401356001600160a01b0316936389afcb449350602480820193918290030181600087803b1580156104a457600080fd5b505af11580156104b8573d6000803e3d6000fd5b505050506040513d60408110156104ce57600080fd5b508051602090910151909250905081156104ec576104ec848361066a565b80156104fc576104fc838261066a565b5050600190920191506101f09050565b505050565b6000546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b031681565b6000546001600160a01b0316331461059d576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6001546001600160a01b031681565b6004546001600160a01b031681565b6000546001600160a01b03163314610648576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03838116911614156107015760025460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b50506003546106fc92506001600160a01b031690508261074c565b610748565b6002546107219061071c9084906001600160a01b031661083f565b6108fe565b15610730576106fc8183610904565b6004546107489083906001600160a01b031683610cc9565b5050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106107985780518252601f199092019160209182019101610779565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146107fa576040519150601f19603f3d011682016040523d82523d6000602084013e6107ff565b606091505b505090508061050c5760405162461bcd60e51b81526004018080602001828103825260238152602001806110696023913960400191505060405180910390fd5b600080600061084e8585610e33565b600154604080516bffffffffffffffffffffffff19606095861b811660208084019190915294861b81166034830152825160288184030181526048830184528051908601206001600160f81b031960688401529390951b9094166069850152607d8401919091527fd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776609d808501919091528151808503909101815260bd9093019052815191012095945050505050565b3b151590565b60025460009061091e9083906001600160a01b031661083f565b9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561095c57600080fd5b505afa158015610970573d6000803e3d6000fd5b505050506040513d606081101561098657600080fd5b5080516020909101516002546dffffffffffffffffffffffffffff92831694509116915060009081906001600160a01b03908116908716106109c95782846109cc565b83835b915091506000821180156109e05750600081115b610a1b5760405162461bcd60e51b815260040180806020018281038252602981526020018061101a6029913960400191505060405180910390fd5b6000610aa8610a9b876001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5c57600080fd5b505afa158015610a70573d6000803e3d6000fd5b505050506040513d6020811015610a8657600080fd5b50516127109063ffffffff90811690610f1116565b899063ffffffff610f6716565b90506000610abc828463ffffffff610f6716565b90506000610ae283610ad68761271063ffffffff610f6716565b9063ffffffff610fca16565b90506000818381610aef57fe5b049050610afd8a8a8d610cc9565b60025460009081906001600160a01b03908116908d1610610b2057826000610b24565b6000835b915091508a6001600160a01b031663022c0d9f83833060006040519080825280601f01601f191660200182016040528015610b66576020820181803883390190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610bd7578181015183820152602001610bbf565b50505050905090810190601f168015610c045780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610c2657600080fd5b505af1158015610c3a573d6000803e3d6000fd5b505060025460408051632e1a7d4d60e01b81526004810188905290516001600160a01b039092169350632e1a7d4d925060248082019260009290919082900301818387803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b5050600354610cba92506001600160a01b031690508461074c565b50505050505050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310610d465780518252601f199092019160209182019101610d27565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610da8576040519150601f19603f3d011682016040523d82523d6000602084013e610dad565b606091505b5091509150818015610ddb575080511580610ddb5750808060200190516020811015610dd857600080fd5b50515b610e2c576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b600080826001600160a01b0316846001600160a01b03161415610e875760405162461bcd60e51b81526004018080602001828103825260268152602001806110436026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610610ea7578284610eaa565b83835b90925090506001600160a01b038216610f0a576040805162461bcd60e51b815260206004820152601f60248201527f44587377617046656552656365697665723a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b80820382811115610f61576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b92915050565b6000811580610f8257505080820282828281610f7f57fe5b04145b610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe44587377617046656552656365697665723a20494e53554646494349454e545f4c495155494449545944587377617046656552656365697665723a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158204488a5c6d24546776395f2d8e5b107b99bb124fd814a71281fc10579ac69368864736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1179 CODESIZE SUB DUP1 PUSH2 0x1179 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x80 SWAP1 SWAP5 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP5 DUP7 AND SWAP5 DUP3 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 DUP6 AND SWAP3 DUP5 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP5 DUP5 AND SWAP5 DUP4 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE PUSH1 0x4 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE PUSH2 0x10C0 DUP1 PUSH2 0xB9 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC1F4381D GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xC1F4381D EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0xF2269521 EQ PUSH2 0x1A5 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1BA JUMPI PUSH2 0x7B JUMP JUMPDEST DUP1 PUSH4 0x5CB9C4EC EQ PUSH2 0x7D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0xAD5C4648 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0xB9888472 EQ PUSH2 0x140 JUMPI JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x106 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x511 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x520 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x52F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x53E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x19C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x5CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x5DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5E9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x50C JUMPI PUSH1 0x0 DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0x206 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x262 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x28A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x30C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP7 DUP7 DUP7 DUP2 DUP2 LT PUSH2 0x336 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP8 DUP8 DUP2 DUP2 LT PUSH2 0x352 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x20 SWAP3 DUP4 MUL SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH4 0x70A08231 SWAP4 POP PUSH1 0x24 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x39E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP7 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x419 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x42D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x443 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP1 POP DUP1 DUP7 DUP7 DUP7 DUP2 DUP2 LT PUSH2 0x455 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x226BF2D1 PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 MUL SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH4 0x89AFCB44 SWAP4 POP PUSH1 0x24 DUP1 DUP3 ADD SWAP4 SWAP2 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4B8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP DUP2 ISZERO PUSH2 0x4EC JUMPI PUSH2 0x4EC DUP5 DUP4 PUSH2 0x66A JUMP JUMPDEST DUP1 ISZERO PUSH2 0x4FC JUMPI PUSH2 0x4FC DUP4 DUP3 PUSH2 0x66A JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 POP PUSH2 0x1F0 SWAP1 POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x59D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A20464F5242494444454E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x4 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x648 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A20464F5242494444454E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x701 JUMPI PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2E1A7D4D SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6E1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x3 SLOAD PUSH2 0x6FC SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP3 PUSH2 0x74C JUMP JUMPDEST PUSH2 0x748 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x721 SWAP1 PUSH2 0x71C SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x83F JUMP JUMPDEST PUSH2 0x8FE JUMP JUMPDEST ISZERO PUSH2 0x730 JUMPI PUSH2 0x6FC DUP2 DUP4 PUSH2 0x904 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x748 SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH2 0xCC9 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP4 SWAP1 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x798 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x779 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x7FA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x7FF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x50C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1069 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x84E DUP6 DUP6 PUSH2 0xE33 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH1 0x60 SWAP6 DUP7 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP5 DUP7 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP7 ADD KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT PUSH1 0x68 DUP5 ADD MSTORE SWAP4 SWAP1 SWAP6 SHL SWAP1 SWAP5 AND PUSH1 0x69 DUP6 ADD MSTORE PUSH1 0x7D DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xD306A548755B9295EE49CC729E13CA4A45E00199BBD890FA146DA43A50571776 PUSH1 0x9D DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP4 ADD SWAP1 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x91E SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x83F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x970 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x986 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x2 SLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP5 POP SWAP2 AND SWAP2 POP PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP8 AND LT PUSH2 0x9C9 JUMPI DUP3 DUP5 PUSH2 0x9CC JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 GT DUP1 ISZERO PUSH2 0x9E0 JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST PUSH2 0xA1B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x101A PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAA8 PUSH2 0xA9B DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x54CF2AEB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA70 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x2710 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0xF11 AND JUMP JUMPDEST DUP10 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xABC DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xAE2 DUP4 PUSH2 0xAD6 DUP8 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xFCA AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0xAEF JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0xAFD DUP11 DUP11 DUP14 PUSH2 0xCC9 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP14 AND LT PUSH2 0xB20 JUMPI DUP3 PUSH1 0x0 PUSH2 0xB24 JUMP JUMPDEST PUSH1 0x0 DUP4 JUMPDEST SWAP2 POP SWAP2 POP DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x22C0D9F DUP4 DUP4 ADDRESS PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB66 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xBD7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xBBF JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xC04 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC3A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP4 POP PUSH4 0x2E1A7D4D SWAP3 POP PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC9F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x3 SLOAD PUSH2 0xCBA SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP5 PUSH2 0x74C JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP3 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 SWAP4 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xD46 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xD27 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xDA8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xDAD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0xDDB JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0xDDB JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0xE2C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E7366657248656C7065723A205452414E534645525F4641494C454400 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xE87 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1043 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0xEA7 JUMPI DUP3 DUP5 PUSH2 0xEAA JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xF0A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A205A45524F5F4144445245535300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0xF82 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0xF7F JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID DIFFICULTY PC PUSH20 0x77617046656552656365697665723A20494E5355 CHAINID CHAINID 0x49 NUMBER 0x49 GASLIMIT 0x4E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE DIFFICULTY PC PUSH20 0x77617046656552656365697665723A204944454E SLOAD 0x49 NUMBER COINBASE 0x4C 0x5F COINBASE DIFFICULTY DIFFICULTY MSTORE GASLIMIT MSTORE8 MSTORE8 GASLIMIT MSTORE8 SLOAD PUSH19 0x616E7366657248656C7065723A204554485F54 MSTORE COINBASE 0x4E MSTORE8 CHAINID GASLIMIT MSTORE 0x5F CHAINID COINBASE 0x49 0x4C GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 DIFFICULTY DUP9 0xA5 0xC6 0xD2 GASLIMIT CHAINID PUSH24 0x6395F2D8E5B107B99BB124FD814A71281FC10579AC693688 PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ", - "sourceMap": "218:5003:3:-;;;437:310;8:9:-1;5:2;;;30:1;27;20:12;5:2;437:310:3;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;437:310:3;;;;;;;;;;;;;;;;;;;578:5;:14;;-1:-1:-1;;;;;;578:14:3;;;-1:-1:-1;;;;;578:14:3;;;;;;-1:-1:-1;602:34:3;;;;;;;;;;;;;;646:4;:12;;;;;;;;;;;;;;668:11;:26;;;;;;;;;;;;;;704:16;:36;;;;;;;;;;;;;;;-1:-1:-1;;;;218:5003:3;;;;" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "60806040526004361061007b5760003560e01c8063c1f4381d1161004e578063c1f4381d14610155578063c45a015514610190578063f2269521146101a5578063f2fde38b146101ba5761007b565b80635cb9c4ec1461007d5780638da5cb5b146100fa578063ad5c46481461012b578063b988847214610140575b005b34801561008957600080fd5b5061007b600480360360208110156100a057600080fd5b8101906020810181356401000000008111156100bb57600080fd5b8201836020820111156100cd57600080fd5b803590602001918460208302840111640100000000831117156100ef57600080fd5b5090925090506101ed565b34801561010657600080fd5b5061010f610511565b604080516001600160a01b039092168252519081900360200190f35b34801561013757600080fd5b5061010f610520565b34801561014c57600080fd5b5061010f61052f565b34801561016157600080fd5b5061007b6004803603604081101561017857600080fd5b506001600160a01b038135811691602001351661053e565b34801561019c57600080fd5b5061010f6105cb565b3480156101b157600080fd5b5061010f6105da565b3480156101c657600080fd5b5061007b600480360360208110156101dd57600080fd5b50356001600160a01b03166105e9565b60005b8181101561050c57600083838381811061020657fe5b905060200201356001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561024e57600080fd5b505afa158015610262573d6000803e3d6000fd5b505050506040513d602081101561027857600080fd5b50519050600084848481811061028a57fe5b905060200201356001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156102d257600080fd5b505afa1580156102e6573d6000803e3d6000fd5b505050506040513d60208110156102fc57600080fd5b5051905084848481811061030c57fe5b905060200201356001600160a01b03166001600160a01b031663a9059cbb86868681811061033657fe5b905060200201356001600160a01b031687878781811061035257fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561039e57600080fd5b505afa1580156103b2573d6000803e3d6000fd5b505050506040513d60208110156103c857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561041957600080fd5b505af115801561042d573d6000803e3d6000fd5b505050506040513d602081101561044357600080fd5b50600090508086868681811061045557fe5b6040805163226bf2d160e21b8152306004820152815160209390930294909401356001600160a01b0316936389afcb449350602480820193918290030181600087803b1580156104a457600080fd5b505af11580156104b8573d6000803e3d6000fd5b505050506040513d60408110156104ce57600080fd5b508051602090910151909250905081156104ec576104ec848361066a565b80156104fc576104fc838261066a565b5050600190920191506101f09050565b505050565b6000546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b031681565b6000546001600160a01b0316331461059d576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6001546001600160a01b031681565b6004546001600160a01b031681565b6000546001600160a01b03163314610648576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03838116911614156107015760025460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b50506003546106fc92506001600160a01b031690508261074c565b610748565b6002546107219061071c9084906001600160a01b031661083f565b6108fe565b15610730576106fc8183610904565b6004546107489083906001600160a01b031683610cc9565b5050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106107985780518252601f199092019160209182019101610779565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146107fa576040519150601f19603f3d011682016040523d82523d6000602084013e6107ff565b606091505b505090508061050c5760405162461bcd60e51b81526004018080602001828103825260238152602001806110696023913960400191505060405180910390fd5b600080600061084e8585610e33565b600154604080516bffffffffffffffffffffffff19606095861b811660208084019190915294861b81166034830152825160288184030181526048830184528051908601206001600160f81b031960688401529390951b9094166069850152607d8401919091527fd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776609d808501919091528151808503909101815260bd9093019052815191012095945050505050565b3b151590565b60025460009061091e9083906001600160a01b031661083f565b9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561095c57600080fd5b505afa158015610970573d6000803e3d6000fd5b505050506040513d606081101561098657600080fd5b5080516020909101516002546dffffffffffffffffffffffffffff92831694509116915060009081906001600160a01b03908116908716106109c95782846109cc565b83835b915091506000821180156109e05750600081115b610a1b5760405162461bcd60e51b815260040180806020018281038252602981526020018061101a6029913960400191505060405180910390fd5b6000610aa8610a9b876001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5c57600080fd5b505afa158015610a70573d6000803e3d6000fd5b505050506040513d6020811015610a8657600080fd5b50516127109063ffffffff90811690610f1116565b899063ffffffff610f6716565b90506000610abc828463ffffffff610f6716565b90506000610ae283610ad68761271063ffffffff610f6716565b9063ffffffff610fca16565b90506000818381610aef57fe5b049050610afd8a8a8d610cc9565b60025460009081906001600160a01b03908116908d1610610b2057826000610b24565b6000835b915091508a6001600160a01b031663022c0d9f83833060006040519080825280601f01601f191660200182016040528015610b66576020820181803883390190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610bd7578181015183820152602001610bbf565b50505050905090810190601f168015610c045780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610c2657600080fd5b505af1158015610c3a573d6000803e3d6000fd5b505060025460408051632e1a7d4d60e01b81526004810188905290516001600160a01b039092169350632e1a7d4d925060248082019260009290919082900301818387803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b5050600354610cba92506001600160a01b031690508461074c565b50505050505050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310610d465780518252601f199092019160209182019101610d27565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610da8576040519150601f19603f3d011682016040523d82523d6000602084013e610dad565b606091505b5091509150818015610ddb575080511580610ddb5750808060200190516020811015610dd857600080fd5b50515b610e2c576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b600080826001600160a01b0316846001600160a01b03161415610e875760405162461bcd60e51b81526004018080602001828103825260268152602001806110436026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610610ea7578284610eaa565b83835b90925090506001600160a01b038216610f0a576040805162461bcd60e51b815260206004820152601f60248201527f44587377617046656552656365697665723a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b80820382811115610f61576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b92915050565b6000811580610f8257505080820282828281610f7f57fe5b04145b610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe44587377617046656552656365697665723a20494e53554646494349454e545f4c495155494449545944587377617046656552656365697665723a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158204488a5c6d24546776395f2d8e5b107b99bb124fd814a71281fc10579ac69368864736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC1F4381D GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xC1F4381D EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0xF2269521 EQ PUSH2 0x1A5 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1BA JUMPI PUSH2 0x7B JUMP JUMPDEST DUP1 PUSH4 0x5CB9C4EC EQ PUSH2 0x7D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0xAD5C4648 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0xB9888472 EQ PUSH2 0x140 JUMPI JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x106 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x511 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x520 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x52F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x53E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x19C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x5CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10F PUSH2 0x5DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5E9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x50C JUMPI PUSH1 0x0 DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0x206 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x262 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x28A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x30C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP7 DUP7 DUP7 DUP2 DUP2 LT PUSH2 0x336 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP8 DUP8 DUP2 DUP2 LT PUSH2 0x352 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x20 SWAP3 DUP4 MUL SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH4 0x70A08231 SWAP4 POP PUSH1 0x24 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x39E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP7 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x419 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x42D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x443 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP1 POP DUP1 DUP7 DUP7 DUP7 DUP2 DUP2 LT PUSH2 0x455 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x226BF2D1 PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 MUL SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH4 0x89AFCB44 SWAP4 POP PUSH1 0x24 DUP1 DUP3 ADD SWAP4 SWAP2 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4B8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP DUP2 ISZERO PUSH2 0x4EC JUMPI PUSH2 0x4EC DUP5 DUP4 PUSH2 0x66A JUMP JUMPDEST DUP1 ISZERO PUSH2 0x4FC JUMPI PUSH2 0x4FC DUP4 DUP3 PUSH2 0x66A JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 POP PUSH2 0x1F0 SWAP1 POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x59D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A20464F5242494444454E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x4 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x648 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A20464F5242494444454E00000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x701 JUMPI PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2E1A7D4D SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6E1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x3 SLOAD PUSH2 0x6FC SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP3 PUSH2 0x74C JUMP JUMPDEST PUSH2 0x748 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x721 SWAP1 PUSH2 0x71C SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x83F JUMP JUMPDEST PUSH2 0x8FE JUMP JUMPDEST ISZERO PUSH2 0x730 JUMPI PUSH2 0x6FC DUP2 DUP4 PUSH2 0x904 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x748 SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH2 0xCC9 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP4 SWAP1 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x798 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x779 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x7FA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x7FF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x50C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1069 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x84E DUP6 DUP6 PUSH2 0xE33 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH1 0x60 SWAP6 DUP7 SHL DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP5 DUP7 SHL DUP2 AND PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x28 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x48 DUP4 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP7 ADD KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT PUSH1 0x68 DUP5 ADD MSTORE SWAP4 SWAP1 SWAP6 SHL SWAP1 SWAP5 AND PUSH1 0x69 DUP6 ADD MSTORE PUSH1 0x7D DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xD306A548755B9295EE49CC729E13CA4A45E00199BBD890FA146DA43A50571776 PUSH1 0x9D DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xBD SWAP1 SWAP4 ADD SWAP1 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x91E SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x83F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x902F1AC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x970 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x986 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x2 SLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP5 POP SWAP2 AND SWAP2 POP PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP8 AND LT PUSH2 0x9C9 JUMPI DUP3 DUP5 PUSH2 0x9CC JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 GT DUP1 ISZERO PUSH2 0x9E0 JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST PUSH2 0xA1B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x101A PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAA8 PUSH2 0xA9B DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x54CF2AEB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA70 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x2710 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0xF11 AND JUMP JUMPDEST DUP10 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xABC DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xAE2 DUP4 PUSH2 0xAD6 DUP8 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0xF67 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xFCA AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0xAEF JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0xAFD DUP11 DUP11 DUP14 PUSH2 0xCC9 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP14 AND LT PUSH2 0xB20 JUMPI DUP3 PUSH1 0x0 PUSH2 0xB24 JUMP JUMPDEST PUSH1 0x0 DUP4 JUMPDEST SWAP2 POP SWAP2 POP DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x22C0D9F DUP4 DUP4 ADDRESS PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB66 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xBD7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xBBF JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xC04 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC3A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP4 POP PUSH4 0x2E1A7D4D SWAP3 POP PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC9F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x3 SLOAD PUSH2 0xCBA SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP5 PUSH2 0x74C JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP3 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 SWAP4 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xD46 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xD27 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xDA8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xDAD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0xDDB JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0xDDB JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0xE2C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E7366657248656C7065723A205452414E534645525F4641494C454400 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xE87 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1043 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH2 0xEA7 JUMPI DUP3 DUP5 PUSH2 0xEAA JUMP JUMPDEST DUP4 DUP4 JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xF0A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617046656552656365697665723A205A45524F5F4144445245535300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0xF82 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0xF7F JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0xF61 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID DIFFICULTY PC PUSH20 0x77617046656552656365697665723A20494E5355 CHAINID CHAINID 0x49 NUMBER 0x49 GASLIMIT 0x4E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE DIFFICULTY PC PUSH20 0x77617046656552656365697665723A204944454E SLOAD 0x49 NUMBER COINBASE 0x4C 0x5F COINBASE DIFFICULTY DIFFICULTY MSTORE GASLIMIT MSTORE8 MSTORE8 GASLIMIT MSTORE8 SLOAD PUSH19 0x616E7366657248656C7065723A204554485F54 MSTORE COINBASE 0x4E MSTORE8 CHAINID GASLIMIT MSTORE 0x5F CHAINID COINBASE 0x49 0x4C GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 DIFFICULTY DUP9 0xA5 0xC6 0xD2 GASLIMIT CHAINID PUSH24 0x6395F2D8E5B107B99BB124FD814A71281FC10579AC693688 PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ", - "sourceMap": "218:5003:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4675:543;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4675:543:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4675:543:3;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;4675:543:3;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4675:543:3;;;;;;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;-1:-1;4675:543:3;;-1:-1:-1;4675:543:3;-1:-1:-1;4675:543:3;:::i;281:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;281:20:3;;;:::i;:::-;;;;-1:-1:-1;;;;;281:20:3;;;;;;;;;;;;;;342:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;342:19:3;;;:::i;367:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;367:26:3;;;:::i;960:242::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;960:242:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;960:242:3;;;;;;;;;;:::i;307:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;307:29:3;;;:::i;399:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;399:31:3;;;:::i;793:157::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;793:157:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;793:157:3;-1:-1:-1;;;;;793:157:3;;:::i;4675:543::-;4754:6;4749:463;4766:16;;;4749:463;;;4803:14;4820:5;;4826:1;4820:8;;;;;;;;;;;;;-1:-1:-1;;;;;4820:8:3;-1:-1:-1;;;;;4820:15:3;;:17;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4820:17:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4820:17:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4820:17:3;;-1:-1:-1;4851:14:3;4868:5;;4874:1;4868:8;;;;;;;;;;;;;-1:-1:-1;;;;;4868:8:3;-1:-1:-1;;;;;4868:15:3;;:17;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4868:17:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4868:17:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4868:17:3;;-1:-1:-1;4899:5:3;;4905:1;4899:8;;;;;;;;;;;;;;-1:-1:-1;;;;;4899:8:3;;-1:-1:-1;4899:17:3;4925:5;;4931:1;4925:8;;;;;;;;;;;;;-1:-1:-1;;;;;4925:8:3;4936:5;;4942:1;4936:8;;;;;;;:33;;;-1:-1:-1;;;4936:33:3;;4963:4;4936:33;;;;;;:8;;;;;;;;;-1:-1:-1;;;;;4936:8:3;;-1:-1:-1;;;4936:33:3;;;;;:8;:33;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;4936:33:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4936:33:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4936:33:3;4899:71;;;-1:-1:-1;4899:71:3;;;-1:-1:-1;;;;;;4899:71:3;;;-1:-1:-1;;;;;4899:71:3;;;;;;;;;;;;;;;;;;;;;4936:33;;4899:71;;;;;;;-1:-1:-1;4899:71:3;;;;5:2:-1;;;;30:1;27;20:12;5:2;4899:71:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4899:71:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4985:12:3;;-1:-1:-1;4985:12:3;5015:5;;5021:1;5015:8;;;;;;;:28;;;-1:-1:-1;;;5015:28:3;;5037:4;5015:28;;;;;;:8;;;;;;;;;;-1:-1:-1;;;;;5015:8:3;;:13;;-1:-1:-1;5015:28:3;;;;;;;;;;;-1:-1:-1;5015:8:3;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;5015:28:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5015:28:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5015:28:3;;;;;;;;;-1:-1:-1;5015:28:3;-1:-1:-1;5061:11:3;;5057:65;;5090:32;5106:6;5114:7;5090:15;:32::i;:::-;5140:11;;5136:65;;5169:32;5185:6;5193:7;5169:15;:32::i;:::-;-1:-1:-1;;4784:3:3;;;;;-1:-1:-1;4749:463:3;;-1:-1:-1;4749:463:3;;;4675:543;;:::o;281:20::-;;;-1:-1:-1;;;;;281:20:3;;:::o;342:19::-;;;-1:-1:-1;;;;;342:19:3;;:::o;367:26::-;;;-1:-1:-1;;;;;367:26:3;;:::o;960:242::-;1075:5;;-1:-1:-1;;;;;1075:5:3;1061:10;:19;1053:60;;;;;-1:-1:-1;;;1053:60:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;1123:11;:26;;-1:-1:-1;;;;;1123:26:3;;;-1:-1:-1;;;;;;1123:26:3;;;;;;;1159:16;:36;;;;;;;;;;;960:242::o;307:29::-;;;-1:-1:-1;;;;;307:29:3;;:::o;399:31::-;;;-1:-1:-1;;;;;399:31:3;;:::o;793:157::-;879:5;;-1:-1:-1;;;;;879:5:3;865:10;:19;857:60;;;;;-1:-1:-1;;;857:60:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;927:5;:16;;-1:-1:-1;;;;;;927:16:3;-1:-1:-1;;;;;927:16:3;;;;;;;;;;793:157::o;3927:662::-;4010:4;;-1:-1:-1;;;;;4001:13:3;;;4010:4;;4001:13;3997:586;;;4092:4;;4086:28;;;-1:-1:-1;;;4086:28:3;;;;;;;;;;-1:-1:-1;;;;;4092:4:3;;;;-1:-1:-1;;4086:28:3;;;;;-1:-1:-1;;4086:28:3;;;;;;;;-1:-1:-1;4092:4:3;4086:28;;;5:2:-1;;;;30:1;27;20:12;5:2;4086:28:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;4155:11:3;;4124:51;;-1:-1:-1;;;;;;4155:11:3;;-1:-1:-1;4168:6:3;4124:30;:51::i;:::-;3997:586;;;4220:4;;4194:32;;4205:20;;4213:5;;-1:-1:-1;;;;;4220:4:3;4205:7;:20::i;:::-;4194:10;:32::i;:::-;4190:393;;;4342:32;4360:6;4368:5;4342:17;:32::i;4190:393::-;4549:16;;4514:60;;4542:5;;-1:-1:-1;;;;;4549:16:3;4567:6;4514:27;:60::i;:::-;3927:662;;:::o;1293:192:14:-;1400:12;;;1362;1400;;;;;;;;;;1379:34;;1362:12;;-1:-1:-1;;;;;1379:7:14;;;1393:5;;1400:12;;;;;;;1379:34;1400:12;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1379:34:14;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;1361:52:14;;;1431:7;1423:55;;;;-1:-1:-1;;;1423:55:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2128:433:3;2200:12;2225:14;2241;2259:26;2270:6;2278;2259:10;:26::i;:::-;2376:7;;2407:32;;;-1:-1:-1;;2407:32:3;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;2407:32:3;;;;;2397:43;;;;;;-1:-1:-1;;;;;;2325:226:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2325:226:3;;;;;;2315:237;;;;;;;-1:-1:-1;;;;;2128:433:3:o;1820:156::-;1926:17;1961:8;;;1820:156::o;2660:1150::-;2807:4;;2752:21;;2788:24;;2796:9;;-1:-1:-1;;;;;2807:4:3;2788:7;:24::i;:::-;2752:61;;2833:13;2848;2866:9;-1:-1:-1;;;;;2866:21:3;;:23;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2866:23:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2866:23:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2866:23:3;;;;;;;2947:4;;2832:57;;;;;-1:-1:-1;2832:57:3;;;-1:-1:-1;2900:14:3;;;;-1:-1:-1;;;;;2947:4:3;;;2935:16;;;;:62;;2978:8;2988;2935:62;;;2955:8;2965;2935:62;2899:98;;;;3028:1;3016:9;:13;:31;;;;;3046:1;3033:10;:14;3016:31;3008:85;;;;-1:-1:-1;;;3008:85:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3103:20;3126:50;3139:36;3155:9;-1:-1:-1;;;;;3155:17:3;;:19;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3155:19:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3155:19:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3155:19:3;3144:5;;3139:36;;;;;:15;:36;:::i;:::-;3126:8;;:50;:12;:50;:::i;:::-;3103:73;-1:-1:-1;3186:14:3;3203:31;3103:73;3223:10;3203:31;:19;:31;:::i;:::-;3186:48;-1:-1:-1;3244:16:3;3263:41;3288:15;3263:20;:9;3277:5;3263:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;3244:60;;3314:14;3343:11;3331:9;:23;;;;;;3314:40;;3373:90;3414:9;3433;3445:8;3373:27;:90::i;:::-;3531:4;;3483:15;;;;-1:-1:-1;;;;;3531:4:3;;;3519:16;;;;:62;;3562:9;3578:1;3519:62;;;3544:1;3548:9;3519:62;3667:12;;;3677:1;3667:12;;;;;;;;;3482:99;;-1:-1:-1;3482:99:3;;-1:-1:-1;;;;;;3600:14:3;;;;;3482:99;;;;3660:4;;3667:12;-1:-1:-1;3600:89:3;;-1:-1:-1;;;;;;3600:89:3;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3600:89:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-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;3600:89:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3600:89:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;3714:4:3;;3708:31;;;-1:-1:-1;;;3708:31:3;;;;;;;;;;-1:-1:-1;;;;;3714:4:3;;;;-1:-1:-1;;;;3708:31:3;;;;;-1:-1:-1;;3708:31:3;;;;;;;;-1:-1:-1;3714:4:3;3708:31;;;5:2:-1;;;;30:1;27;20:12;5:2;3708:31:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;3780:11:3;;3749:54;;-1:-1:-1;;;;;;3780:11:3;;-1:-1:-1;3793:9:3;3749:30;:54::i;:::-;2660:1150;;;;;;;;;;;;;:::o;526:357:14:-;719:45;;;-1:-1:-1;;;;;719:45:14;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;719:45:14;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;708:57:14;;;;-1:-1:-1;;687:17:14;;708:10;;;;719:45;708:57;;;25:18:-1;708:57:14;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;708:57:14;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;672:93:14;;;;783:7;:57;;;;-1:-1:-1;795:11:14;;:16;;:44;;;826:4;815:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;815:24:14;795:44;775:101;;;;;-1:-1:-1;;;775:101:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;526:357;;;;;:::o;1312:347:3:-;1387:14;;-1:-1:-1;;;;;1437:16:3;;;;;;;;1429:67;;;;-1:-1:-1;;;1429:67:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1525:15:3;;;;;;;:53;;1563:6;1571;1525:53;;;1544:6;1552;1525:53;1506:72;;-1:-1:-1;1506:72:3;-1:-1:-1;;;;;;1596:20:3;;1588:64;;;;;-1:-1:-1;;;1588:64:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;1312:347;;;;;:::o;287:127:13:-;370:5;;;365:16;;;;357:50;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;;;;287:127;;;;:::o;420:140::-;472:6;498;;;:30;;-1:-1:-1;;513:5:13;;;527:1;522;513:5;522:1;508:15;;;;;:20;498:30;490:63;;;;;-1:-1:-1;;;490:63:13;;;;;;;;;;;;-1:-1:-1;;;490:63:13;;;;;;;;;;;;;;155:126;238:5;;;233:16;;;;225:49;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;;" - } - }, - "interface": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_factory", - "type": "address" - }, - { - "internalType": "address", - "name": "_WETH", - "type": "address" - }, - { - "internalType": "address", - "name": "_ethReceiver", - "type": "address" - }, - { - "internalType": "address", - "name": "_fallbackReceiver", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "payable": true, - "stateMutability": "payable", - "type": "fallback" - }, - { - "constant": true, - "inputs": [], - "name": "WETH", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "_ethReceiver", - "type": "address" - }, - { - "internalType": "address", - "name": "_fallbackReceiver", - "type": "address" - } - ], - "name": "changeReceivers", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "ethReceiver", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "contract IDXswapFactory", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "fallbackReceiver", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "contract IDXswapPair[]", - "name": "pairs", - "type": "address[]" - } - ], - "name": "takeProtocolFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "608060405234801561001057600080fd5b50604051611179380380611179833981810160405260a081101561003357600080fd5b508051602082015160408301516060840151608090940151600080546001600160a01b039586166001600160a01b031991821617909155600180549486169482169490941790935560028054928516928416929092179091556003805494841694831694909417909355600480549290931691161790556110c0806100b96000396000f3fe60806040526004361061007b5760003560e01c8063c1f4381d1161004e578063c1f4381d14610155578063c45a015514610190578063f2269521146101a5578063f2fde38b146101ba5761007b565b80635cb9c4ec1461007d5780638da5cb5b146100fa578063ad5c46481461012b578063b988847214610140575b005b34801561008957600080fd5b5061007b600480360360208110156100a057600080fd5b8101906020810181356401000000008111156100bb57600080fd5b8201836020820111156100cd57600080fd5b803590602001918460208302840111640100000000831117156100ef57600080fd5b5090925090506101ed565b34801561010657600080fd5b5061010f610511565b604080516001600160a01b039092168252519081900360200190f35b34801561013757600080fd5b5061010f610520565b34801561014c57600080fd5b5061010f61052f565b34801561016157600080fd5b5061007b6004803603604081101561017857600080fd5b506001600160a01b038135811691602001351661053e565b34801561019c57600080fd5b5061010f6105cb565b3480156101b157600080fd5b5061010f6105da565b3480156101c657600080fd5b5061007b600480360360208110156101dd57600080fd5b50356001600160a01b03166105e9565b60005b8181101561050c57600083838381811061020657fe5b905060200201356001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561024e57600080fd5b505afa158015610262573d6000803e3d6000fd5b505050506040513d602081101561027857600080fd5b50519050600084848481811061028a57fe5b905060200201356001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156102d257600080fd5b505afa1580156102e6573d6000803e3d6000fd5b505050506040513d60208110156102fc57600080fd5b5051905084848481811061030c57fe5b905060200201356001600160a01b03166001600160a01b031663a9059cbb86868681811061033657fe5b905060200201356001600160a01b031687878781811061035257fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561039e57600080fd5b505afa1580156103b2573d6000803e3d6000fd5b505050506040513d60208110156103c857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561041957600080fd5b505af115801561042d573d6000803e3d6000fd5b505050506040513d602081101561044357600080fd5b50600090508086868681811061045557fe5b6040805163226bf2d160e21b8152306004820152815160209390930294909401356001600160a01b0316936389afcb449350602480820193918290030181600087803b1580156104a457600080fd5b505af11580156104b8573d6000803e3d6000fd5b505050506040513d60408110156104ce57600080fd5b508051602090910151909250905081156104ec576104ec848361066a565b80156104fc576104fc838261066a565b5050600190920191506101f09050565b505050565b6000546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b031681565b6000546001600160a01b0316331461059d576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6001546001600160a01b031681565b6004546001600160a01b031681565b6000546001600160a01b03163314610648576040805162461bcd60e51b815260206004820152601c60248201527f44587377617046656552656365697665723a20464f5242494444454e00000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03838116911614156107015760025460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b50506003546106fc92506001600160a01b031690508261074c565b610748565b6002546107219061071c9084906001600160a01b031661083f565b6108fe565b15610730576106fc8183610904565b6004546107489083906001600160a01b031683610cc9565b5050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106107985780518252601f199092019160209182019101610779565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146107fa576040519150601f19603f3d011682016040523d82523d6000602084013e6107ff565b606091505b505090508061050c5760405162461bcd60e51b81526004018080602001828103825260238152602001806110696023913960400191505060405180910390fd5b600080600061084e8585610e33565b600154604080516bffffffffffffffffffffffff19606095861b811660208084019190915294861b81166034830152825160288184030181526048830184528051908601206001600160f81b031960688401529390951b9094166069850152607d8401919091527fd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776609d808501919091528151808503909101815260bd9093019052815191012095945050505050565b3b151590565b60025460009061091e9083906001600160a01b031661083f565b9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561095c57600080fd5b505afa158015610970573d6000803e3d6000fd5b505050506040513d606081101561098657600080fd5b5080516020909101516002546dffffffffffffffffffffffffffff92831694509116915060009081906001600160a01b03908116908716106109c95782846109cc565b83835b915091506000821180156109e05750600081115b610a1b5760405162461bcd60e51b815260040180806020018281038252602981526020018061101a6029913960400191505060405180910390fd5b6000610aa8610a9b876001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5c57600080fd5b505afa158015610a70573d6000803e3d6000fd5b505050506040513d6020811015610a8657600080fd5b50516127109063ffffffff90811690610f1116565b899063ffffffff610f6716565b90506000610abc828463ffffffff610f6716565b90506000610ae283610ad68761271063ffffffff610f6716565b9063ffffffff610fca16565b90506000818381610aef57fe5b049050610afd8a8a8d610cc9565b60025460009081906001600160a01b03908116908d1610610b2057826000610b24565b6000835b915091508a6001600160a01b031663022c0d9f83833060006040519080825280601f01601f191660200182016040528015610b66576020820181803883390190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610bd7578181015183820152602001610bbf565b50505050905090810190601f168015610c045780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610c2657600080fd5b505af1158015610c3a573d6000803e3d6000fd5b505060025460408051632e1a7d4d60e01b81526004810188905290516001600160a01b039092169350632e1a7d4d925060248082019260009290919082900301818387803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b5050600354610cba92506001600160a01b031690508461074c565b50505050505050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310610d465780518252601f199092019160209182019101610d27565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610da8576040519150601f19603f3d011682016040523d82523d6000602084013e610dad565b606091505b5091509150818015610ddb575080511580610ddb5750808060200190516020811015610dd857600080fd5b50515b610e2c576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b600080826001600160a01b0316846001600160a01b03161415610e875760405162461bcd60e51b81526004018080602001828103825260268152602001806110436026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610610ea7578284610eaa565b83835b90925090506001600160a01b038216610f0a576040805162461bcd60e51b815260206004820152601f60248201527f44587377617046656552656365697665723a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b80820382811115610f61576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b92915050565b6000811580610f8257505080820282828281610f7f57fe5b04145b610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610f61576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe44587377617046656552656365697665723a20494e53554646494349454e545f4c495155494449545944587377617046656552656365697665723a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544a265627a7a723158204488a5c6d24546776395f2d8e5b107b99bb124fd814a71281fc10579ac69368864736f6c63430005100032" -} \ No newline at end of file diff --git a/build/DXswapFeeSetter.json b/build/DXswapFeeSetter.json deleted file mode 100644 index dce86a2a4..000000000 --- a/build/DXswapFeeSetter.json +++ /dev/null @@ -1,357 +0,0 @@ -{ - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_factory", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "constant": true, - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "contract IDXswapFactory", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "pairOwners", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "feeTo", - "type": "address" - } - ], - "name": "setFeeTo", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "feeToSetter", - "type": "address" - } - ], - "name": "setFeeToSetter", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint8", - "name": "protocolFeeDenominator", - "type": "uint8" - } - ], - "name": "setProtocolFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - }, - { - "internalType": "uint32", - "name": "swapFee", - "type": "uint32" - } - ], - "name": "setSwapFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferPairOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506040516106a43803806106a48339818101604052604081101561003357600080fd5b508051602090910151600080546001600160a01b039384166001600160a01b0319918216179091556002805493909216921691909117905561062a8061007a6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a2e74af611610066578063a2e74af614610136578063a6dab93f1461015c578063c45a01551461018a578063f2fde38b14610192578063f46901ed146101b857610093565b806317c06b34146100985780634e91f811146100da5780638da5cb5b146100fc5780639e68ceb814610104575b600080fd5b6100be600480360360208110156100ae57600080fd5b50356001600160a01b03166101de565b604080516001600160a01b039092168252519081900360200190f35b6100fa600480360360208110156100f057600080fd5b503560ff166101f9565b005b6100be6102b0565b6100fa6004803603604081101561011a57600080fd5b5080356001600160a01b0316906020013563ffffffff166102bf565b6100fa6004803603602081101561014c57600080fd5b50356001600160a01b03166103a6565b6100fa6004803603604081101561017257600080fd5b506001600160a01b0381358116916020013516610441565b6100be6104bc565b6100fa600480360360208110156101a857600080fd5b50356001600160a01b03166104cb565b6100fa600480360360208110156101ce57600080fd5b50356001600160a01b031661053a565b6001602052600090815260409020546001600160a01b031681565b6000546001600160a01b03163314610246576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051634e91f81160e01b815260ff8416600482015290516001600160a01b0390921691634e91f8119160248082019260009290919082900301818387803b15801561029557600080fd5b505af11580156102a9573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031681565b6000546001600160a01b03163314806102f157506001600160a01b038281166000908152600160205260409020541633145b610330576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600254604080516313cd19d760e31b81526001600160a01b03858116600483015263ffffffff8516602483015291519190921691639e68ceb891604480830192600092919082900301818387803b15801561038a57600080fd5b505af115801561039e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146103f3576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051635173a57b60e11b81526001600160a01b0384811660048301529151919092169163a2e74af691602480830192600092919082900301818387803b15801561029557600080fd5b6000546001600160a01b0316331461048e576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6002546001600160a01b031681565b6000546001600160a01b03163314610518576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610587576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6002546040805163f46901ed60e01b81526001600160a01b0384811660048301529151919092169163f46901ed91602480830192600092919082900301818387803b15801561029557600080fdfe4458737761704665655365747465723a20464f5242494444454e000000000000a265627a7a72315820a0be763e035529abb8cc9d7d753668d36fa96da26d709983f608f42e5b3d615964736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x6A4 CODESIZE SUB DUP1 PUSH2 0x6A4 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP4 SWAP1 SWAP3 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x62A DUP1 PUSH2 0x7A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA2E74AF6 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA2E74AF6 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0xA6DAB93F EQ PUSH2 0x15C JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x18A JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x192 JUMPI DUP1 PUSH4 0xF46901ED EQ PUSH2 0x1B8 JUMPI PUSH2 0x93 JUMP JUMPDEST DUP1 PUSH4 0x17C06B34 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x4E91F811 EQ PUSH2 0xDA JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xFC JUMPI DUP1 PUSH4 0x9E68CEB8 EQ PUSH2 0x104 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xFF AND PUSH2 0x1F9 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xBE PUSH2 0x2B0 JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x11A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x2BF JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A6 JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x172 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x441 JUMP JUMPDEST PUSH2 0xBE PUSH2 0x4BC JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4CB JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x53A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x246 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4E91F811 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x4E91F811 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH2 0x2F1 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND CALLER EQ JUMPDEST PUSH2 0x330 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x13CD19D7 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0x9E68CEB8 SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x38A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x39E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3F3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x5173A57B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xA2E74AF6 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x48E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x518 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x587 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xF46901ED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xF46901ED SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT INVALID DIFFICULTY PC PUSH20 0x7761704665655365747465723A20464F52424944 DIFFICULTY GASLIMIT 0x4E STOP STOP STOP STOP STOP STOP LOG2 PUSH6 0x627A7A723158 KECCAK256 LOG0 0xBE PUSH23 0x3E035529ABB8CC9D7D753668D36FA96DA26D709983F608 DELEGATECALL 0x2E JUMPDEST RETURNDATASIZE PUSH2 0x5964 PUSH20 0x6F6C634300051000320000000000000000000000 ", - "sourceMap": "69:1398:4:-;;;215:128;8:9:-1;5:2;;;30:1;27;20:12;5:2;215:128:4;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;215:128:4;;;;;;;278:5;:14;;-1:-1:-1;;;;;278:14:4;;;-1:-1:-1;;;;;;278:14:4;;;;;;302:7;:34;;;;;;;;;;;;;;-1:-1:-1;;;;69:1398:4;;;;" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100935760003560e01c8063a2e74af611610066578063a2e74af614610136578063a6dab93f1461015c578063c45a01551461018a578063f2fde38b14610192578063f46901ed146101b857610093565b806317c06b34146100985780634e91f811146100da5780638da5cb5b146100fc5780639e68ceb814610104575b600080fd5b6100be600480360360208110156100ae57600080fd5b50356001600160a01b03166101de565b604080516001600160a01b039092168252519081900360200190f35b6100fa600480360360208110156100f057600080fd5b503560ff166101f9565b005b6100be6102b0565b6100fa6004803603604081101561011a57600080fd5b5080356001600160a01b0316906020013563ffffffff166102bf565b6100fa6004803603602081101561014c57600080fd5b50356001600160a01b03166103a6565b6100fa6004803603604081101561017257600080fd5b506001600160a01b0381358116916020013516610441565b6100be6104bc565b6100fa600480360360208110156101a857600080fd5b50356001600160a01b03166104cb565b6100fa600480360360208110156101ce57600080fd5b50356001600160a01b031661053a565b6001602052600090815260409020546001600160a01b031681565b6000546001600160a01b03163314610246576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051634e91f81160e01b815260ff8416600482015290516001600160a01b0390921691634e91f8119160248082019260009290919082900301818387803b15801561029557600080fd5b505af11580156102a9573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031681565b6000546001600160a01b03163314806102f157506001600160a01b038281166000908152600160205260409020541633145b610330576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600254604080516313cd19d760e31b81526001600160a01b03858116600483015263ffffffff8516602483015291519190921691639e68ceb891604480830192600092919082900301818387803b15801561038a57600080fd5b505af115801561039e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146103f3576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051635173a57b60e11b81526001600160a01b0384811660048301529151919092169163a2e74af691602480830192600092919082900301818387803b15801561029557600080fd5b6000546001600160a01b0316331461048e576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6002546001600160a01b031681565b6000546001600160a01b03163314610518576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610587576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6002546040805163f46901ed60e01b81526001600160a01b0384811660048301529151919092169163f46901ed91602480830192600092919082900301818387803b15801561029557600080fdfe4458737761704665655365747465723a20464f5242494444454e000000000000a265627a7a72315820a0be763e035529abb8cc9d7d753668d36fa96da26d709983f608f42e5b3d615964736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA2E74AF6 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA2E74AF6 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0xA6DAB93F EQ PUSH2 0x15C JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x18A JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x192 JUMPI DUP1 PUSH4 0xF46901ED EQ PUSH2 0x1B8 JUMPI PUSH2 0x93 JUMP JUMPDEST DUP1 PUSH4 0x17C06B34 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x4E91F811 EQ PUSH2 0xDA JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xFC JUMPI DUP1 PUSH4 0x9E68CEB8 EQ PUSH2 0x104 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xFF AND PUSH2 0x1F9 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xBE PUSH2 0x2B0 JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x11A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x2BF JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A6 JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x172 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x441 JUMP JUMPDEST PUSH2 0xBE PUSH2 0x4BC JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4CB JUMP JUMPDEST PUSH2 0xFA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x53A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x246 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4E91F811 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x4E91F811 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH2 0x2F1 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND CALLER EQ JUMPDEST PUSH2 0x330 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x13CD19D7 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0x9E68CEB8 SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x38A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x39E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3F3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x5173A57B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xA2E74AF6 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x48E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x518 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x587 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5D6 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xF46901ED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xF46901ED SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT INVALID DIFFICULTY PC PUSH20 0x7761704665655365747465723A20464F52424944 DIFFICULTY GASLIMIT 0x4E STOP STOP STOP STOP STOP STOP LOG2 PUSH6 0x627A7A723158 KECCAK256 LOG0 0xBE PUSH23 0x3E035529ABB8CC9D7D753668D36FA96DA26D709983F608 DELEGATECALL 0x2E JUMPDEST RETURNDATASIZE PUSH2 0x5964 PUSH20 0x6F6C634300051000320000000000000000000000 ", - "sourceMap": "69:1398:4:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;69:1398:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;126:45;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;126:45:4;-1:-1:-1;;;;;126:45:4;;:::i;:::-;;;;-1:-1:-1;;;;;126:45:4;;;;;;;;;;;;;;1044:194;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1044:194:4;;;;:::i;:::-;;100:20;;;:::i;1248:217::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1248:217:4;;-1:-1:-1;;;;;1248:217:4;;;;;;;;:::i;860:174::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;860:174:4;-1:-1:-1;;;;;860:174:4;;:::i;514:184::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;514:184:4;;;;;;;;;;:::i;177:29::-;;;:::i;349:155::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;349:155:4;-1:-1:-1;;;;;349:155:4;;:::i;704:150::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;704:150:4;-1:-1:-1;;;;;704:150:4;;:::i;126:45::-;;;;;;;;;;;;-1:-1:-1;;;;;126:45:4;;:::o;1044:194::-;1139:5;;-1:-1:-1;;;;;1139:5:4;1125:10;:19;1117:58;;;;;-1:-1:-1;;;1117:58:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1117:58:4;;;;;;;;;;;;;;;1185:7;;:46;;;-1:-1:-1;;;1185:46:4;;;;;;;;;;;-1:-1:-1;;;;;1185:7:4;;;;-1:-1:-1;;1185:46:4;;;;;-1:-1:-1;;1185:46:4;;;;;;;;-1:-1:-1;1185:7:4;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;1185:46:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1185:46:4;;;;1044:194;:::o;100:20::-;;;-1:-1:-1;;;;;100:20:4;;:::o;1248:217::-;1340:5;;-1:-1:-1;;;;;1340:5:4;1326:10;:19;;1325:59;;-1:-1:-1;;;;;;1366:16:4;;;;;;;-1:-1:-1;1366:16:4;;;;;;;1352:10;:30;1325:59;1317:98;;;;;-1:-1:-1;;;1317:98:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1317:98:4;;;;;;;;;;;;;;;1425:7;;:33;;;-1:-1:-1;;;1425:33:4;;-1:-1:-1;;;;;1425:33:4;;;;;;;;;;;;;;;;:7;;;;;:18;;:33;;;;;-1:-1:-1;;1425:33:4;;;;;;;-1:-1:-1;1425:7:4;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;1425:33:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1425:33:4;;;;1248:217;;:::o;860:174::-;946:5;;-1:-1:-1;;;;;946:5:4;932:10;:19;924:58;;;;;-1:-1:-1;;;924:58:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;924:58:4;;;;;;;;;;;;;;;992:7;;:35;;;-1:-1:-1;;;992:35:4;;-1:-1:-1;;;;;992:35:4;;;;;;;;;:7;;;;;:22;;:35;;;;;-1:-1:-1;;992:35:4;;;;;;;-1:-1:-1;992:7:4;:35;;;5:2:-1;;;;30:1;27;20:12;514:184:4;618:5;;-1:-1:-1;;;;;618:5:4;604:10;:19;596:58;;;;;-1:-1:-1;;;596:58:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;596:58:4;;;;;;;;;;;;;;;-1:-1:-1;;;;;664:16:4;;;;;;;-1:-1:-1;664:16:4;;;;;:27;;-1:-1:-1;;;;;;664:27:4;;;;;;;;514:184::o;177:29::-;;;-1:-1:-1;;;;;177:29:4;;:::o;349:155::-;435:5;;-1:-1:-1;;;;;435:5:4;421:10;:19;413:58;;;;;-1:-1:-1;;;413:58:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;413:58:4;;;;;;;;;;;;;;;481:5;:16;;-1:-1:-1;;;;;;481:16:4;-1:-1:-1;;;;;481:16:4;;;;;;;;;;349:155::o;704:150::-;778:5;;-1:-1:-1;;;;;778:5:4;764:10;:19;756:58;;;;;-1:-1:-1;;;756:58:4;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;756:58:4;;;;;;;;;;;;;;;824:7;;:23;;;-1:-1:-1;;;824:23:4;;-1:-1:-1;;;;;824:23:4;;;;;;;;;:7;;;;;-1:-1:-1;;824:23:4;;;;;-1:-1:-1;;824:23:4;;;;;;;-1:-1:-1;824:7:4;:23;;;5:2:-1;;;;30:1;27;20:12" - } - }, - "interface": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_factory", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "constant": true, - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "contract IDXswapFactory", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "pairOwners", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "feeTo", - "type": "address" - } - ], - "name": "setFeeTo", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "feeToSetter", - "type": "address" - } - ], - "name": "setFeeToSetter", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint8", - "name": "protocolFeeDenominator", - "type": "uint8" - } - ], - "name": "setProtocolFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - }, - { - "internalType": "uint32", - "name": "swapFee", - "type": "uint32" - } - ], - "name": "setSwapFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferPairOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "608060405234801561001057600080fd5b506040516106a43803806106a48339818101604052604081101561003357600080fd5b508051602090910151600080546001600160a01b039384166001600160a01b0319918216179091556002805493909216921691909117905561062a8061007a6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a2e74af611610066578063a2e74af614610136578063a6dab93f1461015c578063c45a01551461018a578063f2fde38b14610192578063f46901ed146101b857610093565b806317c06b34146100985780634e91f811146100da5780638da5cb5b146100fc5780639e68ceb814610104575b600080fd5b6100be600480360360208110156100ae57600080fd5b50356001600160a01b03166101de565b604080516001600160a01b039092168252519081900360200190f35b6100fa600480360360208110156100f057600080fd5b503560ff166101f9565b005b6100be6102b0565b6100fa6004803603604081101561011a57600080fd5b5080356001600160a01b0316906020013563ffffffff166102bf565b6100fa6004803603602081101561014c57600080fd5b50356001600160a01b03166103a6565b6100fa6004803603604081101561017257600080fd5b506001600160a01b0381358116916020013516610441565b6100be6104bc565b6100fa600480360360208110156101a857600080fd5b50356001600160a01b03166104cb565b6100fa600480360360208110156101ce57600080fd5b50356001600160a01b031661053a565b6001602052600090815260409020546001600160a01b031681565b6000546001600160a01b03163314610246576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051634e91f81160e01b815260ff8416600482015290516001600160a01b0390921691634e91f8119160248082019260009290919082900301818387803b15801561029557600080fd5b505af11580156102a9573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031681565b6000546001600160a01b03163314806102f157506001600160a01b038281166000908152600160205260409020541633145b610330576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600254604080516313cd19d760e31b81526001600160a01b03858116600483015263ffffffff8516602483015291519190921691639e68ceb891604480830192600092919082900301818387803b15801561038a57600080fd5b505af115801561039e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146103f3576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b60025460408051635173a57b60e11b81526001600160a01b0384811660048301529151919092169163a2e74af691602480830192600092919082900301818387803b15801561029557600080fd5b6000546001600160a01b0316331461048e576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6002546001600160a01b031681565b6000546001600160a01b03163314610518576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610587576040805162461bcd60e51b815260206004820152601a60248201526000805160206105d6833981519152604482015290519081900360640190fd5b6002546040805163f46901ed60e01b81526001600160a01b0384811660048301529151919092169163f46901ed91602480830192600092919082900301818387803b15801561029557600080fdfe4458737761704665655365747465723a20464f5242494444454e000000000000a265627a7a72315820a0be763e035529abb8cc9d7d753668d36fa96da26d709983f608f42e5b3d615964736f6c63430005100032" -} \ No newline at end of file diff --git a/build/DXswapPair.json b/build/DXswapPair.json deleted file mode 100644 index 8f53f03a9..000000000 --- a/build/DXswapPair.json +++ /dev/null @@ -1,1503 +0,0 @@ -{ - "abi": [ - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Burn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "name": "Mint", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Swap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint112", - "name": "reserve0", - "type": "uint112" - }, - { - "indexed": false, - "internalType": "uint112", - "name": "reserve1", - "type": "uint112" - } - ], - "name": "Sync", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "MINIMUM_LIQUIDITY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "burn", - "outputs": [ - { - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getReserves", - "outputs": [ - { - "internalType": "uint112", - "name": "_reserve0", - "type": "uint112" - }, - { - "internalType": "uint112", - "name": "_reserve1", - "type": "uint112" - }, - { - "internalType": "uint32", - "name": "_blockTimestampLast", - "type": "uint32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "_token0", - "type": "address" - }, - { - "internalType": "address", - "name": "_token1", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "kLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "liquidity", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "price0CumulativeLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "price1CumulativeLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint32", - "name": "_swapFee", - "type": "uint32" - } - ], - "name": "setSwapFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "skim", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "swap", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "swapFee", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "sync", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "token0", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "token1", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "6080604052600c805463ffffffff191660191790556001600d5534801561002557600080fd5b50604051469080605261256f8239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561245e806101116000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH1 0x19 OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0xD SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD CHAINID SWAP1 DUP1 PUSH1 0x52 PUSH2 0x256F DUP3 CODECOPY PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB PUSH1 0x52 ADD DUP3 KECCAK256 DUP3 DUP3 ADD DUP3 MSTORE PUSH1 0x6 DUP4 MSTORE PUSH6 0x44587377617 PUSH1 0xD4 SHL PUSH1 0x20 SWAP4 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD DUP4 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL SWAP1 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x3649D708A7ABF9E212D0A587955EAD4123223014B2E46201DFB587457CBD4591 DUP2 DUP4 ADD MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP1 MSTORE DUP3 MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x3 SSTORE POP PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0x245E DUP1 PUSH2 0x111 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1CF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6A627842 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xBA9A7A56 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x583 JUMPI DUP1 PUSH4 0xD6D788C3 EQ PUSH2 0x5D4 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x5F7 JUMPI DUP1 PUSH4 0xFFF6CAE9 EQ PUSH2 0x625 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0xBA9A7A56 EQ PUSH2 0x545 JUMPI DUP1 PUSH4 0xBC25CF77 EQ PUSH2 0x54D JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xD21220A7 EQ PUSH2 0x57B JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0x89AFCB44 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x511 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x519 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x6A627842 EQ PUSH2 0x458 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x47E JUMPI DUP1 PUSH4 0x7464FC3D EQ PUSH2 0x4A4 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x485CC955 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x485CC955 EQ PUSH2 0x3F9 JUMPI DUP1 PUSH4 0x54CF2AEB EQ PUSH2 0x427 JUMPI DUP1 PUSH4 0x5909C0D5 EQ PUSH2 0x448 JUMPI DUP1 PUSH4 0x5A3D5493 EQ PUSH2 0x450 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x3D3 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x3F1 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x1AD JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x317 JUMPI DUP1 PUSH4 0xDFE1681 EQ PUSH2 0x357 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x37B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x395 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x22C0D9F EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x262 JUMPI DUP1 PUSH4 0x902F1AC EQ PUSH2 0x2DF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP4 ADD CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x62D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26A PUSH2 0xB7F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x28C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2D1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2E7 PUSH2 0xBA1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x32D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xBCB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x35F PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xBF1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xBF7 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xC91 JUMP JUMPDEST PUSH2 0x3DB PUSH2 0xCB5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xCBA JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x40F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xCC0 JUMP JUMPDEST PUSH2 0x42F PUSH2 0xD45 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xD51 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xD57 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD5D JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x494 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x105E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1076 JUMP JUMPDEST PUSH2 0x4F8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1088 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x26A PUSH2 0x142F JUMP JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x52F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x144E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x145B JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x563 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1461 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15CD JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15DC JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x17EF JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x60D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x18BF JUMP JUMPDEST PUSH2 0x260 PUSH2 0x18DC JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x679 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE DUP5 ISZERO ISZERO DUP1 PUSH2 0x68C JUMPI POP PUSH1 0x0 DUP5 GT JUMPDEST PUSH2 0x6C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23B6 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6D2 PUSH2 0xBA1 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP8 LT DUP1 ISZERO PUSH2 0x6F7 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP7 LT JUMPDEST PUSH2 0x732 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2394 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 SWAP1 DUP2 AND SWAP1 DUP10 AND DUP3 EQ DUP1 ISZERO SWAP1 PUSH2 0x770 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST PUSH2 0x7BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x445873776170506169723A20494E56414C49445F544F PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP11 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x7CB DUP3 DUP11 DUP14 PUSH2 0x1A3F JUMP JUMPDEST DUP10 ISZERO PUSH2 0x7DC JUMPI PUSH2 0x7DC DUP2 DUP11 DUP13 PUSH2 0x1A3F JUMP JUMPDEST DUP7 ISZERO PUSH2 0x897 JUMPI DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x78B94AE6 CALLER DUP14 DUP14 DUP13 DUP13 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x87E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x892 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8F1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x907 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x953 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x967 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x97D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP PUSH1 0x0 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP6 AND DUP11 SWAP1 SUB DUP4 GT PUSH2 0x9A0 JUMPI PUSH1 0x0 PUSH2 0x9AF JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 GT PUSH2 0x9CC JUMPI PUSH1 0x0 PUSH2 0x9DB JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 GT DUP1 PUSH2 0x9EC JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST PUSH2 0xA27 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23DC PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC SLOAD PUSH1 0x0 SWAP1 PUSH2 0xA64 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xA58 DUP8 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0xC SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0xA86 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH2 0xAB8 PUSH4 0x5F5E100 PUSH2 0xAAC PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP12 DUP2 AND SWAP1 DUP12 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xAC8 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST LT ISZERO PUSH2 0xB0B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x445873776170506169723A204B PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH2 0xB19 DUP5 DUP5 DUP9 DUP9 PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP14 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP13 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND SWAP2 CALLER SWAP2 PUSH32 0xD78AD95FA46C994B6551D0DA85FC275FE613CE37657FB8D5E3D130840159D822 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x44587377617 PUSH1 0xD4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP3 PUSH1 0x1 PUSH1 0x70 SHL DUP4 DIV SWAP1 SWAP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1E52 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x0 NOT EQ PUSH2 0xC7C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xC57 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE JUMPDEST PUSH2 0xC87 DUP5 DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD17 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x7 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xC SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0xDAB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0xDBB PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP4 SWAP6 POP SWAP2 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 PUSH2 0xED5 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xEF2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF00 DUP8 DUP8 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0xF3D JUMPI PUSH2 0xF29 PUSH2 0x3E8 PUSH2 0xA58 PUSH2 0xF24 DUP8 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0x2146 JUMP JUMPDEST SWAP9 POP PUSH2 0xF38 PUSH1 0x0 PUSH2 0x3E8 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xF8C JUMP JUMPDEST PUSH2 0xF89 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF5A DUP7 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF61 JUMPI INVALID JUMPDEST DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF7C DUP7 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF83 JUMPI INVALID JUMPDEST DIV PUSH2 0x222E JUMP JUMPDEST SWAP9 POP JUMPDEST PUSH1 0x0 DUP10 GT PUSH2 0xFCB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x236B PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFD5 DUP11 DUP11 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xFE1 DUP7 DUP7 DUP11 DUP11 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x1011 JUMPI PUSH1 0x8 SLOAD PUSH2 0x100D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP2 MLOAD CALLER SWAP3 PUSH32 0x4C209B5FC8AD50758F13E2E1088BA56A560DFF690A1C6FEF26394F4C03821C4F SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP SWAP5 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xB SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x10D7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0x10E7 PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP5 SWAP7 POP SWAP3 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP4 SWAP2 AND SWAP2 PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1143 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1157 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x116D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ADDRESS PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0x1204 DUP9 DUP9 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x121B DUP5 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x1222 JUMPI INVALID JUMPDEST DIV SWAP11 POP DUP1 PUSH2 0x1236 DUP5 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x123D JUMPI INVALID JUMPDEST DIV SWAP10 POP PUSH1 0x0 DUP12 GT DUP1 ISZERO PUSH2 0x1250 JUMPI POP PUSH1 0x0 DUP11 GT JUMPDEST PUSH2 0x128B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2401 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1295 ADDRESS DUP5 PUSH2 0x2246 JUMP JUMPDEST PUSH2 0x12A0 DUP8 DUP14 DUP14 PUSH2 0x1A3F JUMP JUMPDEST PUSH2 0x12AB DUP7 DUP14 DUP13 PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1305 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x131B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1367 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x137B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP PUSH2 0x13A1 DUP6 DUP6 DUP12 DUP12 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x13D1 JUMPI PUSH1 0x8 SLOAD PUSH2 0x13CD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP13 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND SWAP3 CALLER SWAP3 PUSH32 0xDCCD412F0B1252819CB1FD330B93224CA42612892BB3F4F789976E6D81936496 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP POP POP POP POP POP PUSH1 0x1 PUSH1 0xD DUP2 SWAP1 SSTORE POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x445853 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST PUSH2 0x3E8 DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x14AD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP5 SWAP1 SWAP4 AND SWAP3 PUSH2 0x155C SWAP3 DUP6 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 DUP6 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1533 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1549 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x15C3 SWAP3 DUP5 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST TIMESTAMP DUP5 LT ISZERO PUSH2 0x1637 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x11161CDDD85C115490CC8C0E8811561412549151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP12 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP6 ADD DUP3 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x102 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH2 0x122 DUP1 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP7 ADD DUP7 MSTORE PUSH2 0x142 DUP5 ADD DUP1 DUP3 MSTORE DUP7 MLOAD SWAP7 DUP4 ADD SWAP7 SWAP1 SWAP7 KECCAK256 SWAP6 DUP4 SWAP1 MSTORE PUSH2 0x162 DUP5 ADD DUP1 DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0xFF DUP10 AND PUSH2 0x182 DUP6 ADD MSTORE PUSH2 0x1A2 DUP5 ADD DUP9 SWAP1 MSTORE PUSH2 0x1C2 DUP5 ADD DUP8 SWAP1 MSTORE MLOAD SWAP2 SWAP4 SWAP3 PUSH2 0x1E2 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1752 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1788 JUMPI POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x17D9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617045524332303A20494E56414C49445F5349474E41545552450000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x17E4 DUP10 DUP10 DUP10 PUSH2 0x1E52 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1846 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3E8 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x18A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A20464F5242494444454E5F46454500000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x1928 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x1A38 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1979 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x198D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x19A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A04 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x1 PUSH1 0xD SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH32 0x7472616E7366657228616464726573732C75696E743235362900000000000000 PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP7 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP5 MSTORE SWAP2 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP2 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1AEC JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1ACD JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1B4E JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1B53 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x1B81 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x1B81 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x1BD2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A205452414E534645525F4641494C45440000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0x1BF4 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0x1BF1 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 GT DUP1 ISZERO SWAP1 PUSH2 0x1CAA JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 GT ISZERO JUMPDEST PUSH2 0x1CF2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x445873776170506169723A204F564552464C4F57 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH4 0xFFFFFFFF TIMESTAMP DUP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV DUP2 AND DUP3 SUB SWAP1 DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1D22 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 AND ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1D36 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1DA7 JUMPI DUP1 PUSH4 0xFFFFFFFF AND PUSH2 0x1D64 DUP6 PUSH2 0x1D4F DUP7 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x22F6 AND JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE PUSH4 0xFFFFFFFF DUP2 AND PUSH2 0x1D8F DUP5 PUSH2 0x1D4F DUP8 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP9 DUP2 AND SWAP2 SWAP1 SWAP2 OR PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x70 SHL NOT AND PUSH1 0x1 PUSH1 0x70 SHL DUP9 DUP4 AND DUP2 MUL SWAP2 SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0xE0 SHL PUSH4 0xFFFFFFFF DUP8 AND MUL OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP4 DIV SWAP1 SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x1C411E9A96E071241C2F21F7726B17AE89E3CAB4C78BE50E062B03A9FFFBBAD1 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1EDD SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x1F12 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17E7E58 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1FE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x17FB8215 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2FF7042A SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2036 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x204A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2060 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO DUP1 ISZERO SWAP6 POP SWAP2 SWAP3 POP SWAP1 PUSH2 0x2131 JUMPI DUP1 ISZERO PUSH2 0x212C JUMPI PUSH1 0x0 PUSH2 0x20A3 PUSH2 0xF24 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 DUP2 AND SWAP1 DUP10 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x20B0 DUP4 PUSH2 0x2146 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x2129 JUMPI PUSH1 0x0 PUSH2 0x20DE PUSH2 0x20CF DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2105 DUP4 PUSH2 0x20F9 DUP7 PUSH1 0xFF DUP11 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0x2112 JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 ISZERO PUSH2 0x2125 JUMPI PUSH2 0x2125 DUP9 DUP3 PUSH2 0x2198 JUMP JUMPDEST POP POP POP JUMPDEST POP POP JUMPDEST PUSH2 0x213D JUMP JUMPDEST DUP1 ISZERO PUSH2 0x213D JUMPI PUSH1 0x0 PUSH1 0xB SSTORE JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 GT ISZERO PUSH2 0x2189 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x2 DUP3 DIV ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2183 JUMPI DUP1 SWAP2 POP PUSH1 0x2 DUP2 DUP3 DUP6 DUP2 PUSH2 0x2172 JUMPI INVALID JUMPDEST DIV ADD DUP2 PUSH2 0x217B JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x215B JUMP JUMPDEST POP PUSH2 0x2193 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2193 JUMPI POP PUSH1 0x1 JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x21AB SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x21D6 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x223D JUMPI DUP2 PUSH2 0x223F JUMP JUMPDEST DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x226F SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SLOAD PUSH2 0x229C SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH1 0x1 PUSH1 0x70 SHL MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP5 AND DUP2 PUSH2 0x2313 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F 0x4D 0x49 0x4E SLOAD GASLIMIT DIFFICULTY DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4F SSTORE SLOAD POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x49 0x4E POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F TIMESTAMP SSTORE MSTORE 0x4E GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 0xBC SWAP15 MSTORE 0xC6 0x22 0xA7 RETURN PUSH25 0xA026EE16432D9BBC35CC0DB3D76CFAFD5D67631F595A9B1864 PUSH20 0x6F6C63430005100032454950373132446F6D6169 PUSH15 0x28737472696E67206E616D652C7374 PUSH19 0x696E672076657273696F6E2C75696E74323536 KECCAK256 PUSH4 0x6861696E 0x49 PUSH5 0x2C61646472 PUSH6 0x737320766572 PUSH10 0x6679696E67436F6E7472 PUSH2 0x6374 0x29 ", - "sourceMap": "278:10031:5:-;;;1094:26;;;-1:-1:-1;;1094:26:5;1118:2;1094:26;;;;1160:25;;2242:58;5:2:-1;;;;30:1;27;20:12;5:2;-1:-1;1086:95:1;;990:7;;1086:95;;;;;;;;;;;;;;;;1215:4;;;;;;;;-1:-1:-1;;;1215:4:1;;;;;1249:10;;;;;;;;;;-1:-1:-1;;;1249:10:1;;;;1058:272;;;;;;;;;1199:22;1058:272;;;;1239:21;1058:272;;;;;;;;;;;1311:4;1058:272;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1058:272:1;;;;;;1035:305;;;;;;;;1016:16;:324;-1:-1:-1;2273:7:5;:20;;-1:-1:-1;;;;;;2273:20:5;2283:10;2273:20;;;-1:-1:-1;;278:10031:5;-1:-1:-1;278:10031:5;;" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1CF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6A627842 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xBA9A7A56 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x583 JUMPI DUP1 PUSH4 0xD6D788C3 EQ PUSH2 0x5D4 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x5F7 JUMPI DUP1 PUSH4 0xFFF6CAE9 EQ PUSH2 0x625 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0xBA9A7A56 EQ PUSH2 0x545 JUMPI DUP1 PUSH4 0xBC25CF77 EQ PUSH2 0x54D JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xD21220A7 EQ PUSH2 0x57B JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0x89AFCB44 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x511 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x519 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x6A627842 EQ PUSH2 0x458 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x47E JUMPI DUP1 PUSH4 0x7464FC3D EQ PUSH2 0x4A4 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x485CC955 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x485CC955 EQ PUSH2 0x3F9 JUMPI DUP1 PUSH4 0x54CF2AEB EQ PUSH2 0x427 JUMPI DUP1 PUSH4 0x5909C0D5 EQ PUSH2 0x448 JUMPI DUP1 PUSH4 0x5A3D5493 EQ PUSH2 0x450 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x3D3 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x3F1 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x1AD JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x317 JUMPI DUP1 PUSH4 0xDFE1681 EQ PUSH2 0x357 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x37B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x395 JUMPI PUSH2 0x1CF JUMP JUMPDEST DUP1 PUSH4 0x22C0D9F EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x262 JUMPI DUP1 PUSH4 0x902F1AC EQ PUSH2 0x2DF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP4 ADD CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x62D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26A PUSH2 0xB7F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x28C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2D1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2E7 PUSH2 0xBA1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x32D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xBCB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x35F PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xBF1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xBF7 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xC91 JUMP JUMPDEST PUSH2 0x3DB PUSH2 0xCB5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xCBA JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x40F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xCC0 JUMP JUMPDEST PUSH2 0x42F PUSH2 0xD45 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x383 PUSH2 0xD51 JUMP JUMPDEST PUSH2 0x383 PUSH2 0xD57 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD5D JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x494 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x105E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1076 JUMP JUMPDEST PUSH2 0x4F8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1088 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x26A PUSH2 0x142F JUMP JUMPDEST PUSH2 0x343 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x52F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x144E JUMP JUMPDEST PUSH2 0x383 PUSH2 0x145B JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x563 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1461 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15CD JUMP JUMPDEST PUSH2 0x35F PUSH2 0x15DC JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x260 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH4 0xFFFFFFFF AND PUSH2 0x17EF JUMP JUMPDEST PUSH2 0x383 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x60D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x18BF JUMP JUMPDEST PUSH2 0x260 PUSH2 0x18DC JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x679 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE DUP5 ISZERO ISZERO DUP1 PUSH2 0x68C JUMPI POP PUSH1 0x0 DUP5 GT JUMPDEST PUSH2 0x6C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23B6 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6D2 PUSH2 0xBA1 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP8 LT DUP1 ISZERO PUSH2 0x6F7 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND DUP7 LT JUMPDEST PUSH2 0x732 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2394 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 SWAP1 DUP2 AND SWAP1 DUP10 AND DUP3 EQ DUP1 ISZERO SWAP1 PUSH2 0x770 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST PUSH2 0x7BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x445873776170506169723A20494E56414C49445F544F PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP11 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x7CB DUP3 DUP11 DUP14 PUSH2 0x1A3F JUMP JUMPDEST DUP10 ISZERO PUSH2 0x7DC JUMPI PUSH2 0x7DC DUP2 DUP11 DUP13 PUSH2 0x1A3F JUMP JUMPDEST DUP7 ISZERO PUSH2 0x897 JUMPI DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x78B94AE6 CALLER DUP14 DUP14 DUP13 DUP13 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x87E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x892 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8F1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x907 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x953 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x967 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x97D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 POP PUSH1 0x0 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP6 AND DUP11 SWAP1 SUB DUP4 GT PUSH2 0x9A0 JUMPI PUSH1 0x0 PUSH2 0x9AF JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 GT PUSH2 0x9CC JUMPI PUSH1 0x0 PUSH2 0x9DB JUMP JUMPDEST DUP10 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SUB DUP4 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 GT DUP1 PUSH2 0x9EC JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST PUSH2 0xA27 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x23DC PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC SLOAD PUSH1 0x0 SWAP1 PUSH2 0xA64 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xA58 DUP8 PUSH2 0x2710 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0xC SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0xA86 SWAP1 PUSH2 0xA46 SWAP1 DUP6 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH2 0xAB8 PUSH4 0x5F5E100 PUSH2 0xAAC PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP12 DUP2 AND SWAP1 DUP12 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0xAC8 DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST LT ISZERO PUSH2 0xB0B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x445873776170506169723A204B PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH2 0xB19 DUP5 DUP5 DUP9 DUP9 PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP14 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP13 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND SWAP2 CALLER SWAP2 PUSH32 0xD78AD95FA46C994B6551D0DA85FC275FE613CE37657FB8D5E3D130840159D822 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x44587377617 PUSH1 0xD4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP3 PUSH1 0x1 PUSH1 0x70 SHL DUP4 DIV SWAP1 SWAP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH4 0xFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1E52 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x0 NOT EQ PUSH2 0xC7C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xC57 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE JUMPDEST PUSH2 0xC87 DUP5 DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD17 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x7 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xC SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0xDAB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0xDBB PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP4 SWAP6 POP SWAP2 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 PUSH2 0xED5 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xEF2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP8 AND PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF00 DUP8 DUP8 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0xF3D JUMPI PUSH2 0xF29 PUSH2 0x3E8 PUSH2 0xA58 PUSH2 0xF24 DUP8 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH2 0x2146 JUMP JUMPDEST SWAP9 POP PUSH2 0xF38 PUSH1 0x0 PUSH2 0x3E8 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xF8C JUMP JUMPDEST PUSH2 0xF89 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF5A DUP7 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF61 JUMPI INVALID JUMPDEST DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 AND PUSH2 0xF7C DUP7 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0xF83 JUMPI INVALID JUMPDEST DIV PUSH2 0x222E JUMP JUMPDEST SWAP9 POP JUMPDEST PUSH1 0x0 DUP10 GT PUSH2 0xFCB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x236B PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFD5 DUP11 DUP11 PUSH2 0x2198 JUMP JUMPDEST PUSH2 0xFE1 DUP7 DUP7 DUP11 DUP11 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x1011 JUMPI PUSH1 0x8 SLOAD PUSH2 0x100D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP2 MLOAD CALLER SWAP3 PUSH32 0x4C209B5FC8AD50758F13E2E1088BA56A560DFF690A1C6FEF26394F4C03821C4F SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP SWAP5 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xB SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x10D7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD DUP2 SWAP1 SSTORE DUP1 PUSH2 0x10E7 PUSH2 0xBA1 JUMP JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP5 SWAP7 POP SWAP3 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP4 SWAP2 AND SWAP2 PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1143 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1157 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x116D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ADDRESS PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0x1204 DUP9 DUP9 PUSH2 0x1F6E JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP DUP1 PUSH2 0x121B DUP5 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x1222 JUMPI INVALID JUMPDEST DIV SWAP11 POP DUP1 PUSH2 0x1236 DUP5 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST DUP2 PUSH2 0x123D JUMPI INVALID JUMPDEST DIV SWAP10 POP PUSH1 0x0 DUP12 GT DUP1 ISZERO PUSH2 0x1250 JUMPI POP PUSH1 0x0 DUP11 GT JUMPDEST PUSH2 0x128B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2401 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1295 ADDRESS DUP5 PUSH2 0x2246 JUMP JUMPDEST PUSH2 0x12A0 DUP8 DUP14 DUP14 PUSH2 0x1A3F JUMP JUMPDEST PUSH2 0x12AB DUP7 DUP14 DUP13 PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1305 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x131B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1367 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x137B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 POP PUSH2 0x13A1 DUP6 DUP6 DUP12 DUP12 PUSH2 0x1C8C JUMP JUMPDEST DUP2 ISZERO PUSH2 0x13D1 JUMPI PUSH1 0x8 SLOAD PUSH2 0x13CD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST PUSH1 0xB SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP13 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND SWAP3 CALLER SWAP3 PUSH32 0xDCCD412F0B1252819CB1FD330B93224CA42612892BB3F4F789976E6D81936496 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP POP POP POP POP POP PUSH1 0x1 PUSH1 0xD DUP2 SWAP1 SSTORE POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x445853 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBD8 CALLER DUP5 DUP5 PUSH2 0x1EB4 JUMP JUMPDEST PUSH2 0x3E8 DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x14AD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP5 SWAP1 SWAP4 AND SWAP3 PUSH2 0x155C SWAP3 DUP6 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 DUP6 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1533 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1549 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH2 0x1A3F JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x15C3 SWAP3 DUP5 SWAP3 DUP8 SWAP3 PUSH2 0x1557 SWAP3 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x1 PUSH1 0xD SSTORE POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST TIMESTAMP DUP5 LT ISZERO PUSH2 0x1637 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x11161CDDD85C115490CC8C0E8811561412549151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP12 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP6 ADD DUP3 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x102 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH2 0x122 DUP1 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP7 ADD DUP7 MSTORE PUSH2 0x142 DUP5 ADD DUP1 DUP3 MSTORE DUP7 MLOAD SWAP7 DUP4 ADD SWAP7 SWAP1 SWAP7 KECCAK256 SWAP6 DUP4 SWAP1 MSTORE PUSH2 0x162 DUP5 ADD DUP1 DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0xFF DUP10 AND PUSH2 0x182 DUP6 ADD MSTORE PUSH2 0x1A2 DUP5 ADD DUP9 SWAP1 MSTORE PUSH2 0x1C2 DUP5 ADD DUP8 SWAP1 MSTORE MLOAD SWAP2 SWAP4 SWAP3 PUSH2 0x1E2 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1752 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1788 JUMPI POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x17D9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617045524332303A20494E56414C49445F5349474E41545552450000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x17E4 DUP10 DUP10 DUP10 PUSH2 0x1E52 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1846 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x222C39BBB0B82830B4B91D102327A92124A22222A7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3E8 DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0x18A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A20464F5242494444454E5F46454500000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0xC DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 EQ PUSH2 0x1928 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x11161CDDD85C14185A5C8E881313D0D2D151 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xD SSTORE PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x1A38 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1979 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x198D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x19A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A04 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x70 SHL SWAP1 DIV AND PUSH2 0x1C8C JUMP JUMPDEST PUSH1 0x1 PUSH1 0xD SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH32 0x7472616E7366657228616464726573732C75696E743235362900000000000000 PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP7 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP5 MSTORE SWAP2 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR DUP2 MSTORE SWAP3 MLOAD DUP2 MLOAD PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP5 DUP10 AND SWAP4 SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1AEC JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1ACD JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1B4E JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1B53 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x1B81 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x1B81 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x1BD2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x445873776170506169723A205452414E534645525F4641494C45440000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0x1BF4 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0x1BF1 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6D756C2D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 GT DUP1 ISZERO SWAP1 PUSH2 0x1CAA JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 GT ISZERO JUMPDEST PUSH2 0x1CF2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x445873776170506169723A204F564552464C4F57 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH4 0xFFFFFFFF TIMESTAMP DUP2 AND SWAP2 PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV DUP2 AND DUP3 SUB SWAP1 DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1D22 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP5 AND ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1D36 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP4 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1DA7 JUMPI DUP1 PUSH4 0xFFFFFFFF AND PUSH2 0x1D64 DUP6 PUSH2 0x1D4F DUP7 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x22F6 AND JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE PUSH4 0xFFFFFFFF DUP2 AND PUSH2 0x1D8F DUP5 PUSH2 0x1D4F DUP8 PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL ADD SWAP1 SSTORE JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP9 DUP2 AND SWAP2 SWAP1 SWAP2 OR PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x70 SHL NOT AND PUSH1 0x1 PUSH1 0x70 SHL DUP9 DUP4 AND DUP2 MUL SWAP2 SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0xE0 SHL PUSH4 0xFFFFFFFF DUP8 AND MUL OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP4 DIV SWAP1 SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x1C411E9A96E071241C2F21F7726B17AE89E3CAB4C78BE50E062B03A9FFFBBAD1 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1EDD SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x1F12 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x5 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17E7E58 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1FE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x17FB8215 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x2FF7042A SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2036 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x204A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2060 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xB SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO DUP1 ISZERO SWAP6 POP SWAP2 SWAP3 POP SWAP1 PUSH2 0x2131 JUMPI DUP1 ISZERO PUSH2 0x212C JUMPI PUSH1 0x0 PUSH2 0x20A3 PUSH2 0xF24 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP10 DUP2 AND SWAP1 DUP10 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x20B0 DUP4 PUSH2 0x2146 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x2129 JUMPI PUSH1 0x0 PUSH2 0x20DE PUSH2 0x20CF DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2105 DUP4 PUSH2 0x20F9 DUP7 PUSH1 0xFF DUP11 AND PUSH4 0xFFFFFFFF PUSH2 0x1BD9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 DUP2 PUSH2 0x2112 JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 ISZERO PUSH2 0x2125 JUMPI PUSH2 0x2125 DUP9 DUP3 PUSH2 0x2198 JUMP JUMPDEST POP POP POP JUMPDEST POP POP JUMPDEST PUSH2 0x213D JUMP JUMPDEST DUP1 ISZERO PUSH2 0x213D JUMPI PUSH1 0x0 PUSH1 0xB SSTORE JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 GT ISZERO PUSH2 0x2189 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x2 DUP3 DIV ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2183 JUMPI DUP1 SWAP2 POP PUSH1 0x2 DUP2 DUP3 DUP6 DUP2 PUSH2 0x2172 JUMPI INVALID JUMPDEST DIV ADD DUP2 PUSH2 0x217B JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x215B JUMP JUMPDEST POP PUSH2 0x2193 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2193 JUMPI POP PUSH1 0x1 JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x21AB SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x21D6 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x231B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x223D JUMPI DUP2 PUSH2 0x223F JUMP JUMPDEST DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x226F SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SLOAD PUSH2 0x229C SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1C3C AND JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB AND PUSH1 0x1 PUSH1 0x70 SHL MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP5 AND DUP2 PUSH2 0x2313 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0xBDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F 0x4D 0x49 0x4E SLOAD GASLIMIT DIFFICULTY DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4F SSTORE SLOAD POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x49 0x4E POP SSTORE SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD DIFFICULTY PC PUSH20 0x776170506169723A20494E53554646494349454E SLOAD 0x5F 0x4C 0x49 MLOAD SSTORE 0x49 DIFFICULTY 0x49 SLOAD MSIZE 0x5F TIMESTAMP SSTORE MSTORE 0x4E GASLIMIT DIFFICULTY LOG2 PUSH6 0x627A7A723158 KECCAK256 0xBC SWAP15 MSTORE 0xC6 0x22 0xA7 RETURN PUSH25 0xA026EE16432D9BBC35CC0DB3D76CFAFD5D67631F595A9B1864 PUSH20 0x6F6C634300051000320000000000000000000000 ", - "sourceMap": "278:10031:5:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;278:10031:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7849:1881;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;7849:1881:5;;;;;;;;-1:-1:-1;;;;;7849:1881:5;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;7849:1881:5;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7849:1881:5;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;7849:1881:5;;-1:-1:-1;7849:1881:5;-1:-1:-1;7849:1881:5;:::i;:::-;;175:38:1;;;:::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;175:38:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1329:227:5;;;:::i;:::-;;;;-1:-1:-1;;;;;1329:227:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2161:144:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2161:144:1;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;571:21:5;;;:::i;:::-;;;;-1:-1:-1;;;;;571:21:5;;;;;;;;;;;;;;303:24:1;;;:::i;:::-;;;;;;;;;;;;;;;;2453:295;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2453:295:1;;;;;;;;;;;;;;;;;:::i;589:108::-;;;:::i;262:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;448:31;;;:::i;2362:207:5:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2362:207:5;;;;;;;;;;:::i;1094:26::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;915:32;;;:::i;953:::-;;;:::i;4966:1220::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4966:1220:5;-1:-1:-1;;;;;4966:1220:5;;:::i;333:41:1:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;333:41:1;-1:-1:-1;;;;;333:41:1;;:::i;991:17:5:-;;;:::i;703:38:1:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;703:38:1;-1:-1:-1;;;;;703:38:1;;:::i;6295:1445:5:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6295:1445:5;-1:-1:-1;;;;;6295:1445:5;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;219:37:1;;;:::i;2311:136::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2311:136:1;;;;;;;;:::i;396:46:5:-;;;:::i;9776:329::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9776:329:5;-1:-1:-1;;;;;9776:329:5;;:::i;543:22::-;;;:::i;598:21::-;;;:::i;2754:666:1:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;2754:666:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2754:666:1;;;;;;;;:::i;2627:254:5:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2627:254:5;;;;:::i;380:61:1:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;380:61:1;;;;;;;;;;:::i;10151:156:5:-;;;:::i;7849:1881::-;1225:8;;1237:1;1225:13;1217:44;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;;;;1282:1;1271:8;:12;7962:14;;;;:32;;;7993:1;7980:10;:14;7962:32;7954:83;;;;-1:-1:-1;;;7954:83:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8048:17;8067;8089:13;:11;:13::i;:::-;-1:-1:-1;8047:55:5;;-1:-1:-1;8047:55:5;-1:-1:-1;;;;;;8135:22:5;;;;:48;;;;-1:-1:-1;;;;;;8161:22:5;;;;8135:48;8127:95;;;;-1:-1:-1;;;8127:95:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8362:6;;8396;;8233:13;;;;-1:-1:-1;;;;;8362:6:5;;;;8396;;;;8420:13;;;;;;;:30;;-1:-1:-1;;;;;;8437:13:5;;;;;;;;8420:30;8412:65;;;;;-1:-1:-1;;;8412:65:5;;;;;;;;;;;;-1:-1:-1;;;8412:65:5;;;;;;;;;;;;;;;8491:14;;8487:58;;8507:38;8521:7;8530:2;8534:10;8507:13;:38::i;:::-;8593:14;;8589:58;;8609:38;8623:7;8632:2;8636:10;8609:13;:38::i;:::-;8695:15;;8691:91;;8726:2;-1:-1:-1;;;;;8712:28:5;;8741:10;8753;8765;8777:4;;8712:70;;;;;;;;;;;;;-1:-1:-1;;;;;8712:70:5;-1:-1:-1;;;;;8712:70:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;8712:70:5;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8712:70:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8712:70:5;;;;8691:91;8803:40;;;-1:-1:-1;;;8803:40:5;;8837:4;8803:40;;;;;;-1:-1:-1;;;;;8803:25:5;;;-1:-1:-1;;8803:40:5;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;8803:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8803:40:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8803:40:5;8864;;;-1:-1:-1;;;8864:40:5;;8898:4;8864:40;;;;;;8803;;-1:-1:-1;;;;;;8864:25:5;;;-1:-1:-1;;8864:40:5;;;;;8803;;8864;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;8864:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8864:40:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8864:40:5;;-1:-1:-1;8924:14:5;;-1:-1:-1;;;;;;;8952:22:5;;;;;8941:33;;:75;;9015:1;8941:75;;;-1:-1:-1;;;;;8989:22:5;;;;;8977:35;;8941:75;8924:92;-1:-1:-1;9026:14:5;-1:-1:-1;;;;;9054:22:5;;;;;9043:33;;:75;;9117:1;9043:75;;;-1:-1:-1;;;;;9091:22:5;;;;;9079:35;;9043:75;9026:92;;9148:1;9136:9;:13;:30;;;;9165:1;9153:9;:13;9136:30;9128:80;;;;-1:-1:-1;;;9128:80:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9356:7;;9294:21;;9318:47;;9342:22;;:9;;9356:7;;;;;9342:13;:22;:::i;:::-;9318:19;:8;9331:5;9318:19;:12;:19;:::i;:::-;:23;:47;:23;:47;:::i;:::-;9439:7;;9294:71;;-1:-1:-1;9377:21:5;;9401:47;;9425:22;;:9;;9439:7;;;;;9425:13;:22;:::i;9401:47::-;9377:71;-1:-1:-1;9510:44:5;9545:8;9510:30;-1:-1:-1;;;;;9510:15:5;;;;:30;;:19;:30::i;:::-;:34;:44;:34;:44;:::i;:::-;9468:38;:16;9489;9468:38;:20;:38;:::i;:::-;:86;;9460:112;;;;;-1:-1:-1;;;9460:112:5;;;;;;;;;;;;-1:-1:-1;;;9460:112:5;;;;;;;;;;;;;;;1293:1;;9593:49;9601:8;9611;9621:9;9632;9593:7;:49::i;:::-;9657:66;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9657:66:5;;;9662:10;;9657:66;;;;;;;;;-1:-1:-1;;1315:1:5;1304:8;:12;-1:-1:-1;;;;;;;;;7849:1881:5:o;175:38:1:-;;;;;;;;;;;;;-1:-1:-1;;;175:38:1;;;;;:::o;1329:227:5:-;1461:8;;-1:-1:-1;;;;;1461:8:5;;;;-1:-1:-1;;;1491:8:5;;;;;;-1:-1:-1;;;1531:18:5;;;;;1329:227::o;2161:144:1:-;2225:4;2241:36;2250:10;2262:7;2271:5;2241:8;:36::i;:::-;-1:-1:-1;2294:4:1;2161:144;;;;;:::o;571:21:5:-;;;-1:-1:-1;;;;;571:21:5;;:::o;303:24:1:-;;;;:::o;2453:295::-;-1:-1:-1;;;;;2551:15:1;;2531:4;2551:15;;;:9;:15;;;;;;;;2567:10;2551:27;;;;;;;;-1:-1:-1;;2551:39:1;2547:138;;-1:-1:-1;;;;;2636:15:1;;;;;;:9;:15;;;;;;;;2652:10;2636:27;;;;;;;;:38;;2668:5;2636:31;:38::i;:::-;-1:-1:-1;;;;;2606:15:1;;;;;;:9;:15;;;;;;;;2622:10;2606:27;;;;;;;:68;2547:138;2694:26;2704:4;2710:2;2714:5;2694:9;:26::i;:::-;-1:-1:-1;2737:4:1;2453:295;;;;;:::o;589:108::-;631:66;589:108;:::o;262:35::-;295:2;262:35;:::o;448:31::-;;;;:::o;2362:207:5:-;2457:7;;-1:-1:-1;;;;;2457:7:5;2443:10;:21;2435:55;;;;;-1:-1:-1;;;2435:55:5;;;;;;;;;;;;-1:-1:-1;;;2435:55:5;;;;;;;;;;;;;;;2520:6;:16;;-1:-1:-1;;;;;2520:16:5;;;-1:-1:-1;;;;;;2520:16:5;;;;;;;2546:6;:16;;;;;;;;;;;2362:207::o;1094:26::-;;;;;;:::o;915:32::-;;;;:::o;953:::-;;;;:::o;4966:1220::-;5015:14;1225:8;;1237:1;1225:13;1217:44;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;;;;1282:1;1271:8;:12;;;1282:1;5083:13;:11;:13::i;:::-;-1:-1:-1;5144:6:5;;5137:39;;;-1:-1:-1;;;5137:39:5;;5170:4;5137:39;;;;;;5041:55;;-1:-1:-1;5041:55:5;;-1:-1:-1;;;;;;;;5144:6:5;;;;-1:-1:-1;;5137:39:5;;;;;;;;;;;;;;5144:6;5137:39;;;5:2:-1;;;;30:1;27;20:12;5:2;5137:39:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5137:39:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5137:39:5;5209:6;;5202:39;;;-1:-1:-1;;;5202:39:5;;5235:4;5202:39;;;;;;5137;;-1:-1:-1;;;;;;;;5209:6:5;;;;-1:-1:-1;;5202:39:5;;;;;5137;;5202;;;;;;;;5209:6;5202:39;;;5:2:-1;;;;30:1;27;20:12;5:2;5202:39:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5202:39:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5202:39:5;;-1:-1:-1;5251:12:5;5266:23;:8;-1:-1:-1;;;;;5266:23:5;;:12;:23::i;:::-;5251:38;-1:-1:-1;5299:12:5;5314:23;:8;-1:-1:-1;;;;;5314:23:5;;:12;:23::i;:::-;5299:38;;5348:10;5361:30;5370:9;5381;5361:8;:30::i;:::-;5401:17;5421:11;5348:43;;-1:-1:-1;5524:17:5;5520:347;;5569:54;437:5;5569:31;5579:20;:7;5591;5579:20;:11;:20;:::i;:::-;5569:9;:31::i;:54::-;5557:66;;5636:36;5650:1;437:5;5636;:36::i;:::-;5520:347;;;5770:86;-1:-1:-1;;;;;5779:37:5;;:25;:7;5791:12;5779:11;:25::i;:::-;:37;;;;;;-1:-1:-1;;;;;5818:37:5;;:25;:7;5830:12;5818:11;:25::i;:::-;:37;;;;;;5770:8;:86::i;:::-;5758:98;;5520:347;5896:1;5884:9;:13;5876:67;;;;-1:-1:-1;;;5876:67:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5953:20;5959:2;5963:9;5953:5;:20::i;:::-;5984:49;5992:8;6002;6012:9;6023;5984:7;:49::i;:::-;6047:5;6043:47;;;6081:8;;6062:28;;-1:-1:-1;;;;;6067:8:5;;;;-1:-1:-1;;;6081:8:5;;;6062:18;:28::i;:::-;6054:5;:36;6043:47;6145:34;;;;;;;;;;;;;;6150:10;;6145:34;;;;;;;;-1:-1:-1;;1315:1:5;1304:8;:12;-1:-1:-1;4966:1220:5;;;-1:-1:-1;;;;;;4966:1220:5:o;333:41:1:-;;;;;;;;;;;;;:::o;991:17:5:-;;;;:::o;703:38:1:-;;;;;;;;;;;;;:::o;6295:1445:5:-;6344:12;6358;1225:8;;1237:1;1225:13;1217:44;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;;;;1282:1;1271:8;:12;;;1282:1;6424:13;:11;:13::i;:::-;-1:-1:-1;6480:6:5;;6560;;6638:40;;;-1:-1:-1;;;6638:40:5;;6672:4;6638:40;;;;;;6382:55;;-1:-1:-1;6382:55:5;;-1:-1:-1;;;;;;6480:6:5;;;;6560;;;-1:-1:-1;;6480:6:5;;-1:-1:-1;;6638:40:5;;;;;;;;;;;;;;6480:6;6638:40;;;5:2:-1;;;;30:1;27;20:12;5:2;6638:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6638:40:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6638:40:5;6704;;;-1:-1:-1;;;6704:40:5;;6738:4;6704:40;;;;;;6638;;-1:-1:-1;;;;;;;;6704:25:5;;;-1:-1:-1;;6704:40:5;;;;;6638;;6704;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;6704:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6704:40:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6704:40:5;6789:4;6754:14;6771:24;;;:9;6704:40;6771:24;;;;;6704:40;;-1:-1:-1;6819:30:5;6828:9;6839;6819:8;:30::i;:::-;6859:17;6879:11;6806:43;;-1:-1:-1;6879:11:5;6988:23;:9;7002:8;6988:23;:13;:23;:::i;:::-;:38;;;;;;;-1:-1:-1;7120:12:5;7094:23;:9;7108:8;7094:23;:13;:23;:::i;:::-;:38;;;;;;7084:48;;7208:1;7198:7;:11;:26;;;;;7223:1;7213:7;:11;7198:26;7190:80;;;;-1:-1:-1;;;7190:80:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7280:31;7294:4;7301:9;7280:5;:31::i;:::-;7321:35;7335:7;7344:2;7348:7;7321:13;:35::i;:::-;7366;7380:7;7389:2;7393:7;7366:13;:35::i;:::-;7422:40;;;-1:-1:-1;;;7422:40:5;;7456:4;7422:40;;;;;;-1:-1:-1;;;;;7422:25:5;;;-1:-1:-1;;7422:40:5;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;7422:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7422:40:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7422:40:5;7483;;;-1:-1:-1;;;7483:40:5;;7517:4;7483:40;;;;;;7422;;-1:-1:-1;;;;;;7483:25:5;;;-1:-1:-1;;7483:40:5;;;;;7422;;7483;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;7483:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7483:40:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7483:40:5;;-1:-1:-1;7534:49:5;7542:8;7483:40;7562:9;7573;7534:7;:49::i;:::-;7597:5;7593:47;;;7631:8;;7612:28;;-1:-1:-1;;;;;7617:8:5;;;;-1:-1:-1;;;7631:8:5;;;7612:18;:28::i;:::-;7604:5;:36;7593:47;7695:38;;;;;;;;;;;;;;-1:-1:-1;;;;;7695:38:5;;;7700:10;;7695:38;;;;;;;;;;;1293:1;;;;;;;;;1315;1304:8;:12;;;;6295:1445;;;:::o;219:37:1:-;;;;;;;;;;;;;-1:-1:-1;;;219:37:1;;;;;:::o;2311:136::-;2371:4;2387:32;2397:10;2409:2;2413:5;2387:9;:32::i;396:46:5:-;437:5;396:46;:::o;9776:329::-;1225:8;;1237:1;1225:13;1217:44;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;;;;1282:1;1271:8;:12;9844:6;;9893;;9996:8;;9951:40;;;-1:-1:-1;;;9951:40:5;;9985:4;9951:40;;;;;;-1:-1:-1;;;;;9844:6:5;;;;9893;;;;9924:82;;9844:6;;9947:2;;9951:54;;-1:-1:-1;;;;;9996:8:5;;9844:6;;-1:-1:-1;;9951:40:5;;;;;;;;;;;;;;;9844:6;9951:40;;;5:2:-1;;;;30:1;27;20:12;5:2;9951:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9951:40:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9951:40:5;;:54;:44;:54;:::i;:::-;9924:13;:82::i;:::-;10088:8;;10043:40;;;-1:-1:-1;;;10043:40:5;;10077:4;10043:40;;;;;;10016:82;;10030:7;;10039:2;;10043:54;;-1:-1:-1;;;10088:8:5;;-1:-1:-1;;;;;10088:8:5;;-1:-1:-1;;;;;10043:25:5;;;-1:-1:-1;;10043:40:5;;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;10016:82:5;-1:-1:-1;;1315:1:5;1304:8;:12;-1:-1:-1;9776:329:5:o;543:22::-;;;-1:-1:-1;;;;;543:22:5;;:::o;598:21::-;;;-1:-1:-1;;;;;598:21:5;;:::o;2754:666:1:-;2899:15;2887:8;:27;;2879:60;;;;;-1:-1:-1;;;2879:60:1;;;;;;;;;;;;-1:-1:-1;;;2879:60:1;;;;;;;;;;;;;;;3051:16;;-1:-1:-1;;;;;3146:13:1;;;2949:14;3146:13;;;:6;:13;;;;;;;;:15;;-1:-1:-1;3146:15:1;;;;;;3095:77;;631:66;3095:77;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3095:77:1;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3095:77:1;;;;;3085:88;;;;;;-1:-1:-1;;;2989:198:1;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2989:198:1;;;;;;2966:231;;;;;;;;;3234:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2949:14;;-1:-1:-1;3234:26:1;;;;;-1:-1:-1;;3234:26:1;;;;;;;;;;-1:-1:-1;3234:26:1;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;3234:26:1;;-1:-1:-1;;3234:26:1;;;-1:-1:-1;;;;;;;3278:30:1;;;;;;:59;;-1:-1:-1;;;;;;3312:25:1;;;;;;;3278:59;3270:102;;;;;-1:-1:-1;;;3270:102:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;3382:31;3391:5;3398:7;3407:5;3382:8;:31::i;:::-;2754:666;;;;;;;;;:::o;2627:254:5:-;2705:7;;-1:-1:-1;;;;;2705:7:5;2691:10;:21;2683:55;;;;;-1:-1:-1;;;2683:55:5;;;;;;;;;;;;-1:-1:-1;;;2683:55:5;;;;;;;;;;;;;;;2788:4;2776:8;:16;;;;2768:54;;;;;-1:-1:-1;;;2768:54:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;2856:7;:18;;-1:-1:-1;;2856:18:5;;;;;;;;;;;;2627:254::o;380:61:1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;10151:156:5:-;1225:8;;1237:1;1225:13;1217:44;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;-1:-1:-1;;;1217:44:5;;;;;;;;;;;;;;;1282:1;1271:8;:12;10206:6;;10199:39;;;-1:-1:-1;;;10199:39:5;;10232:4;10199:39;;;;;;10191:109;;-1:-1:-1;;;;;10206:6:5;;-1:-1:-1;;10199:39:5;;;;;;;;;;;;;;10206:6;10199:39;;;5:2:-1;;;;30:1;27;20:12;5:2;10199:39:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10199:39:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10199:39:5;10247:6;;10240:39;;;-1:-1:-1;;;10240:39:5;;10273:4;10240:39;;;;;;-1:-1:-1;;;;;10247:6:5;;;;-1:-1:-1;;10240:39:5;;;;;10199;;10240;;;;;;;;10247:6;10240:39;;;5:2:-1;;;;30:1;27;20:12;5:2;10240:39:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10240:39:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10240:39:5;10281:8;;-1:-1:-1;;;;;10281:8:5;;;;-1:-1:-1;;;10291:8:5;;;10191:7;:109::i;:::-;1315:1;1304:8;:12;10151:156::o;1562:285::-;500:34;;;;;;;;;;;;;;;;;1689:43;;-1:-1:-1;;;;;1689:43:5;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1689:43:5;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1678:55:5;;;;-1:-1:-1;;1657:17:5;;1678:10;;;1689:43;1678:55;;;25:18:-1;1678:55:5;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1678:55:5;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;1642:91:5;;;;1751:7;:57;;;;-1:-1:-1;1763:11:5;;:16;;:44;;;1794:4;1783:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1783:24:5;1763:44;1743:97;;;;;-1:-1:-1;;;1743:97:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;1562:285;;;;;:::o;420:140:13:-;472:6;498;;;:30;;-1:-1:-1;;513:5:13;;;527:1;522;513:5;522:1;508:15;;;;;:20;498:30;490:63;;;;;-1:-1:-1;;;490:63:13;;;;;;;;;;;;-1:-1:-1;;;490:63:13;;;;;;;;;;;;;;287:127;370:5;;;365:16;;;;357:50;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;;;2963:848:5;-1:-1:-1;;;;;3074:23:5;;;;;:50;;-1:-1:-1;;;;;;3101:23:5;;;3074:50;3066:83;;;;;-1:-1:-1;;;3066:83:5;;;;;;;;;;;;-1:-1:-1;;;3066:83:5;;;;;;;;;;;;;;;3262:18;;3190:23;:15;:23;;;-1:-1:-1;;;3262:18:5;;;;3245:35;;;3317:15;;;;;;:33;;-1:-1:-1;;;;;;3336:14:5;;;;3317:33;:51;;;;-1:-1:-1;;;;;;3354:14:5;;;;3317:51;3313:332;;;3521:11;3468:64;;3473:44;3507:9;3473:27;3490:9;3473:16;:27::i;:::-;-1:-1:-1;;;;;3473:33:5;;;:44::i;:::-;3444:20;:88;;-1:-1:-1;;;;;3468:50:5;;;;:64;;;;3444:88;;;3570:64;;;3575:44;3609:9;3575:27;3592:9;3575:16;:27::i;:44::-;3546:20;:88;;-1:-1:-1;;;;;3570:50:5;;;;:64;;;;3546:88;;;3313:332;3654:8;:28;;-1:-1:-1;;3654:28:5;-1:-1:-1;;;;;3654:28:5;;;;;;;-1:-1:-1;;;;3692:28:5;-1:-1:-1;;;3692:28:5;;;;;;;;;-1:-1:-1;;;;;3730:35:5;-1:-1:-1;;;3730:35:5;;;;;;;;;3780:24;;;3785:8;;;3780:24;;3795:8;;;;;;;3780:24;;;;;;;;;;;;;;;;;2963:848;;;;;;:::o;1767:166:1:-;-1:-1:-1;;;;;1847:16:1;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;1895:31;;;;;;;;;;;;;;;;;1767:166;;;:::o;1939:216::-;-1:-1:-1;;;;;2032:15:1;;;;;;-1:-1:-1;2032:15:1;;;;;;:26;;2052:5;2032:19;:26::i;:::-;-1:-1:-1;;;;;2014:15:1;;;;;;;-1:-1:-1;2014:15:1;;;;;;:44;;;;2084:13;;;;;;;:24;;2102:5;2084:17;:24::i;:::-;-1:-1:-1;;;;;2068:13:1;;;;;;;-1:-1:-1;2068:13:1;;;;;;;;;:40;;;;2123:25;;;;;;;2068:13;;2123:25;;;;;;;;;;;;;1939:216;;;:::o;3931:926:5:-;4057:7;;4042:31;;;-1:-1:-1;;;4042:31:5;;;;4004:10;;;;-1:-1:-1;;;;;4057:7:5;;;;4042:29;;:31;;;;;;;;;;;;;;;4057:7;4042:31;;;5:2:-1;;;;30:1;27;20:12;5:2;4042:31:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4042:31:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4042:31:5;4129:7;;4114:48;;;-1:-1:-1;;;4114:48:5;;;;4042:31;;-1:-1:-1;4083:28:5;;-1:-1:-1;;;;;4129:7:5;;;;4114:46;;:48;;;;;4042:31;;4114:48;;;;;;;;4129:7;4114:48;;;5:2:-1;;;;30:1;27;20:12;5:2;4114:48:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4114:48:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4114:48:5;4223:5;;-1:-1:-1;;;;;4180:19:5;;;;;;-1:-1:-1;4114:48:5;;-1:-1:-1;4223:5:5;4253:598;;4282:11;;4278:506;;4313:10;4326:41;4336:30;-1:-1:-1;;;;;4336:15:5;;;;:30;;:19;:30::i;4326:41::-;4313:54;;4385:14;4402:17;4412:6;4402:9;:17::i;:::-;4385:34;;4449:9;4441:5;:17;4437:333;;;4482:14;4499:37;4515:20;:5;4525:9;4515:20;:9;:20;:::i;:::-;4499:11;;;:37;:15;:37;:::i;:::-;4482:54;-1:-1:-1;4558:16:5;4577:48;4615:9;4577:33;:5;:33;;;;:9;:33;:::i;:::-;:37;:48;:37;:48;:::i;:::-;4558:67;;4647:14;4676:11;4664:9;:23;;;;;;;-1:-1:-1;4713:13:5;;4709:42;;4728:23;4734:5;4741:9;4728:5;:23::i;:::-;4437:333;;;;4278:506;;;4253:598;;;4804:11;;4800:51;;4839:1;4831:5;:9;4800:51;3931:926;;;;;;;:::o;307:292:12:-;352:6;378:1;374;:5;370:223;;;-1:-1:-1;399:1:12;431;427;423:5;;:9;446:89;457:1;453;:5;446:89;;;482:1;478:5;;519:1;514;510;506;:5;;;;;;:9;505:15;;;;;;501:19;;446:89;;;370:223;;;;555:6;;551:42;;-1:-1:-1;581:1:12;551:42;307:292;;;:::o;1353:197:1:-;1425:11;;:22;;1441:5;1425:22;:15;:22;:::i;:::-;1411:11;:36;;;-1:-1:-1;;;;;1473:13:1;;;;-1:-1:-1;1473:13:1;;;;;;:24;;1491:5;1473:17;:24::i;:::-;-1:-1:-1;;;;;1457:13:1;;;;;;-1:-1:-1;1457:13:1;;;;;;;;:40;;;;1512:31;;;;;;;1457:13;;;;1512:31;;;;;;;;;;1353:197;;:::o;98:94:12:-;150:6;176:1;172;:5;:13;;184:1;172:13;;;180:1;172:13;168:17;98:94;-1:-1:-1;;;98:94:12:o;1556:205:1:-;-1:-1:-1;;;;;1634:15:1;;;;;;-1:-1:-1;1634:15:1;;;;;;:26;;1654:5;1634:19;:26::i;:::-;-1:-1:-1;;;;;1616:15:1;;;;;;-1:-1:-1;1616:15:1;;;;;:44;;;;1684:11;:22;;1700:5;1684:15;:22::i;:::-;1670:11;:36;;;1721:33;;;;;;;;-1:-1:-1;;;;;1721:33:1;;;;;;;;;;;;;1556:205;;:::o;283:118:15:-;-1:-1:-1;;;;;358:10:15;-1:-1:-1;;;358:17:15;;283:118::o;469:106::-;529:9;-1:-1:-1;;;;;558:10:15;;-1:-1:-1;;;;;554:14:15;;558:10;554:14;;;;;;469:106;-1:-1:-1;;;469:106:15:o;155:126:13:-;238:5;;;233:16;;;;225:49;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;;" - } - }, - "interface": [ - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Burn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "name": "Mint", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Swap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint112", - "name": "reserve0", - "type": "uint112" - }, - { - "indexed": false, - "internalType": "uint112", - "name": "reserve1", - "type": "uint112" - } - ], - "name": "Sync", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "MINIMUM_LIQUIDITY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "burn", - "outputs": [ - { - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getReserves", - "outputs": [ - { - "internalType": "uint112", - "name": "_reserve0", - "type": "uint112" - }, - { - "internalType": "uint112", - "name": "_reserve1", - "type": "uint112" - }, - { - "internalType": "uint32", - "name": "_blockTimestampLast", - "type": "uint32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "_token0", - "type": "address" - }, - { - "internalType": "address", - "name": "_token1", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "kLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "liquidity", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "price0CumulativeLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "price1CumulativeLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint32", - "name": "_swapFee", - "type": "uint32" - } - ], - "name": "setSwapFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "skim", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "swap", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "swapFee", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "sync", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "token0", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "token1", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "6080604052600c805463ffffffff191660191790556001600d5534801561002557600080fd5b50604051469080605261256f8239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561245e806101116000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b7f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610ba1565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bcb565b604080519115158252519081900360200190f35b61035f610be2565b604080516001600160a01b039092168252519081900360200190f35b610383610bf1565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610bf7565b610383610c91565b6103db610cb5565b6040805160ff9092168252519081900360200190f35b610383610cba565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cc0565b61042f610d45565b6040805163ffffffff9092168252519081900360200190f35b610383610d51565b610383610d57565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d5d565b6103836004803603602081101561049457600080fd5b50356001600160a01b031661105e565b610383611070565b610383600480360360208110156104c257600080fd5b50356001600160a01b0316611076565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b0316611088565b6040805192835260208301919091528051918290030190f35b61026a61142f565b6103436004803603604081101561052f57600080fd5b506001600160a01b03813516906020013561144e565b61038361145b565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611461565b61035f6115cd565b61035f6115dc565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115eb565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117ef565b6103836004803603604081101561060d57600080fd5b506001600160a01b03813581169160200135166118bf565b6102606118dc565b600d54600114610679576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d558415158061068c5750600084115b6106c75760405162461bcd60e51b81526004018080602001828103825260268152602001806123b66026913960400191505060405180910390fd5b6000806106d2610ba1565b5091509150816001600160701b0316871080156106f75750806001600160701b031686105b6107325760405162461bcd60e51b81526004018080602001828103825260228152602001806123946022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107705750806001600160a01b0316896001600160a01b031614155b6107ba576040805162461bcd60e51b8152602060048201526016602482015275445873776170506169723a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156107cb576107cb828a8d611a3f565b89156107dc576107dc818a8c611a3f565b861561089757886001600160a01b03166378b94ae6338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561087e57600080fd5b505af1158015610892573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dd57600080fd5b505afa1580156108f1573d6000803e3d6000fd5b505050506040513d602081101561090757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561095357600080fd5b505afa158015610967573d6000803e3d6000fd5b505050506040513d602081101561097d57600080fd5b5051925060009150506001600160701b0385168a900383116109a05760006109af565b89856001600160701b03160383035b9050600089856001600160701b03160383116109cc5760006109db565b89856001600160701b03160383035b905060008211806109ec5750600081115b610a275760405162461bcd60e51b81526004018080602001828103825260258152602001806123dc6025913960400191505060405180910390fd5b600c54600090610a6490610a4690859063ffffffff90811690611bd916565b610a588761271063ffffffff611bd916565b9063ffffffff611c3c16565b600c54909150600090610a8690610a4690859063ffffffff90811690611bd916565b9050610ab86305f5e100610aac6001600160701b038b8116908b1663ffffffff611bd916565b9063ffffffff611bd916565b610ac8838363ffffffff611bd916565b1015610b0b576040805162461bcd60e51b815260206004820152600d60248201526c445873776170506169723a204b60981b604482015290519081900360640190fd5b5050610b1984848888611c8c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600681526020016504458737761760d41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610bd8338484611e52565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c7c576001600160a01b0384166000908152600260209081526040808320338452909152902054610c57908363ffffffff611c3c16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c87848484611eb4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d17576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610dab576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d81905580610dbb610ba1565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d6020811015610e3957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000610ed5836001600160701b03871663ffffffff611c3c16565b90506000610ef2836001600160701b03871663ffffffff611c3c16565b90506000610f008787611f6e565b60005490915080610f3d57610f296103e8610a58610f24878763ffffffff611bd916565b612146565b9850610f3860006103e8612198565b610f8c565b610f896001600160701b038916610f5a868463ffffffff611bd916565b81610f6157fe5b046001600160701b038916610f7c868563ffffffff611bd916565b81610f8357fe5b0461222e565b98505b60008911610fcb5760405162461bcd60e51b815260040180806020018281038252602981526020018061236b6029913960400191505060405180910390fd5b610fd58a8a612198565b610fe186868a8a611c8c565b81156110115760085461100d906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d7576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d819055806110e7610ba1565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114357600080fd5b505afa158015611157573d6000803e3d6000fd5b505050506040513d602081101561116d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051306000908152600160205260408120549192506112048888611f6e565b6000549091508061121b848763ffffffff611bd916565b8161122257fe5b049a5080611236848663ffffffff611bd916565b8161123d57fe5b04995060008b118015611250575060008a115b61128b5760405162461bcd60e51b81526004018080602001828103825260298152602001806124016029913960400191505060405180910390fd5b6112953084612246565b6112a0878d8d611a3f565b6112ab868d8c611a3f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f157600080fd5b505afa158015611305573d6000803e3d6000fd5b505050506040513d602081101561131b57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b505193506113a185858b8b611c8c565b81156113d1576008546113cd906001600160701b0380821691600160701b90041663ffffffff611bd916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020016244585360e81b81525081565b6000610bd8338484611eb4565b6103e881565b600d546001146114ad576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261155c9285928792611557926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d602081101561154957600080fd5b50519063ffffffff611c3c16565b611a3f565b600854604080516370a0823160e01b815230600482015290516115c3928492879261155792600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561151f57600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611637576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611752573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117885750886001600160a01b0316816001600160a01b0316145b6117d9576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b6117e4898989611e52565b505050505050505050565b6005546001600160a01b03163314611846576040805162461bcd60e51b8152602060048201526015602482015274222c39bbb0b82830b4b91d102327a92124a22222a760591b604482015290519081900360640190fd5b6103e88163ffffffff1611156118a3576040805162461bcd60e51b815260206004820152601960248201527f445873776170506169723a20464f5242494444454e5f46454500000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611928576040805162461bcd60e51b815260206004820152601260248201527111161cddd85c14185a5c8e881313d0d2d15160721b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a38926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d60208110156119a357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516008546001600160701b0380821691600160701b900416611c8c565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aec5780518252601f199092019160209182019101611acd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5091509150818015611b81575080511580611b815750808060200190516020811015611b7e57600080fd5b50515b611bd2576040805162461bcd60e51b815260206004820152601b60248201527f445873776170506169723a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611bf457505080820282828281611bf157fe5b04145b610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610bdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611caa57506001600160701b038311155b611cf2576040805162461bcd60e51b8152602060048201526014602482015273445873776170506169723a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2257506001600160701b03841615155b8015611d3657506001600160701b03831615155b15611da7578063ffffffff16611d6485611d4f866122e4565b6001600160e01b03169063ffffffff6122f616565b600980546001600160e01b03929092169290920201905563ffffffff8116611d8f84611d4f876122e4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611edd908263ffffffff611c3c16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f12908263ffffffff61231b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbf57600080fd5b505afa158015611fd3573d6000803e3d6000fd5b505050506040513d6020811015611fe957600080fd5b5051600554604080516317fb821560e11b815290519293506000926001600160a01b0390921691632ff7042a91600480820192602092909190829003018186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d602081101561206057600080fd5b5051600b546001600160a01b03841615801595509192509061213157801561212c5760006120a3610f246001600160701b0389811690891663ffffffff611bd916565b905060006120b083612146565b9050808211156121295760006120de6120cf848463ffffffff611c3c16565b6000549063ffffffff611bd916565b90506000612105836120f98660ff8a1663ffffffff611bd916565b9063ffffffff61231b16565b9050600081838161211257fe5b0490508015612125576121258882612198565b5050505b50505b61213d565b801561213d576000600b555b50505092915050565b60006003821115612189575080600160028204015b818110156121835780915060028182858161217257fe5b04018161217b57fe5b04905061215b565b50612193565b8115612193575060015b919050565b6000546121ab908263ffffffff61231b16565b60009081556001600160a01b0383168152600160205260409020546121d6908263ffffffff61231b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061223d578161223f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461226f908263ffffffff611c3c16565b6001600160a01b0383166000908152600160205260408120919091555461229c908263ffffffff611c3c16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161231357fe5b049392505050565b80820182811015610bdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544445873776170506169723a20494e53554646494349454e545f4c4951554944495459445873776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e54445873776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bc9e52c622a7f378a026ee16432d9bbc35cc0db3d76cfafd5d67631f595a9b1864736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429" -} \ No newline at end of file diff --git a/build/ERC20.json b/build/ERC20.json deleted file mode 100644 index 33fe6e078..000000000 --- a/build/ERC20.json +++ /dev/null @@ -1,717 +0,0 @@ -{ - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "_totalSupply", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50604051610af2380380610af28339818101604052602081101561003357600080fd5b50516040514690806052610aa08239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c0909401905282519201919091206003555061011233826001600160e01b0361011816565b50610218565b610131816000546101ba60201b6107f51790919060201c565b60009081556001600160a01b0383168152600160209081526040909120546101629183906107f56101ba821b17901c565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b80820182811015610212576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b92915050565b610879806102276000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633644e5151161008c57806395d89b411161006657806395d89b411461025b578063a9059cbb14610263578063d505accf1461028f578063dd62ed3e146102e2576100cf565b80633644e5151461020757806370a082311461020f5780637ecebe0014610235576100cf565b806306fdde03146100d4578063095ea7b31461015157806318160ddd1461019157806323b872dd146101ab57806330adf81f146101e1578063313ce567146101e9575b600080fd5b6100dc610310565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101165781810151838201526020016100fe565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561016757600080fd5b506001600160a01b038135169060200135610332565b604080519115158252519081900360200190f35b610199610349565b60408051918252519081900360200190f35b61017d600480360360608110156101c157600080fd5b506001600160a01b0381358116916020810135909116906040013561034f565b6101996103e9565b6101f161040d565b6040805160ff9092168252519081900360200190f35b610199610412565b6101996004803603602081101561022557600080fd5b50356001600160a01b0316610418565b6101996004803603602081101561024b57600080fd5b50356001600160a01b031661042a565b6100dc61043c565b61017d6004803603604081101561027957600080fd5b506001600160a01b03813516906020013561045b565b6102e0600480360360e08110156102a557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610468565b005b610199600480360360408110156102f857600080fd5b506001600160a01b038135811691602001351661066c565b6040518060400160405280600681526020016504458737761760d41b81525081565b600061033f338484610689565b5060015b92915050565b60005481565b6001600160a01b0383166000908152600260209081526040808320338452909152812054600019146103d4576001600160a01b03841660009081526002602090815260408083203384529091529020546103af908363ffffffff6106eb16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6103df84848461073b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60016020526000908152604090205481565b60046020526000908152604090205481565b6040518060400160405280600381526020016244585360e81b81525081565b600061033f33848461073b565b428410156104b4576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156105cf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106055750886001600160a01b0316816001600160a01b0316145b610656576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b610661898989610689565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115610343576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054610764908263ffffffff6106eb16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610799908263ffffffff6107f516565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b80820182811015610343576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfea265627a7a72315820acc66d605ef803800bc0ad824de198572eb947847195b71e3f6678566aff2be064736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xAF2 CODESIZE SUB DUP1 PUSH2 0xAF2 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 MLOAD CHAINID SWAP1 DUP1 PUSH1 0x52 PUSH2 0xAA0 DUP3 CODECOPY PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB PUSH1 0x52 ADD DUP3 KECCAK256 DUP3 DUP3 ADD DUP3 MSTORE PUSH1 0x6 DUP4 MSTORE PUSH6 0x44587377617 PUSH1 0xD4 SHL PUSH1 0x20 SWAP4 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD DUP4 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL SWAP1 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x3649D708A7ABF9E212D0A587955EAD4123223014B2E46201DFB587457CBD4591 DUP2 DUP4 ADD MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP1 MSTORE DUP3 MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x3 SSTORE POP PUSH2 0x112 CALLER DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH2 0x118 AND JUMP JUMPDEST POP PUSH2 0x218 JUMP JUMPDEST PUSH2 0x131 DUP2 PUSH1 0x0 SLOAD PUSH2 0x1BA PUSH1 0x20 SHL PUSH2 0x7F5 OR SWAP1 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x162 SWAP2 DUP4 SWAP1 PUSH2 0x7F5 PUSH2 0x1BA DUP3 SHL OR SWAP1 SHR JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x212 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x64732D6D6174682D6164642D6F766572666C6F77000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x879 DUP1 PUSH2 0x227 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3644E515 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0x95D89B41 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x263 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x28F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2E2 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x3644E515 EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x20F JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x235 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x191 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1AB JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x1E1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1E9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDC PUSH2 0x310 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x116 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xFE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x143 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x332 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x199 PUSH2 0x349 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x34F JUMP JUMPDEST PUSH2 0x199 PUSH2 0x3E9 JUMP JUMPDEST PUSH2 0x1F1 PUSH2 0x40D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x199 PUSH2 0x412 JUMP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x225 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x418 JUMP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x24B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x42A JUMP JUMPDEST PUSH2 0xDC PUSH2 0x43C JUMP JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x45B JUMP JUMPDEST PUSH2 0x2E0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x2A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x468 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x66C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x44587377617 PUSH1 0xD4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F CALLER DUP5 DUP5 PUSH2 0x689 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x3D4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x3AF SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x6EB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE JUMPDEST PUSH2 0x3DF DUP5 DUP5 DUP5 PUSH2 0x73B JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x445853 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F CALLER DUP5 DUP5 PUSH2 0x73B JUMP JUMPDEST TIMESTAMP DUP5 LT ISZERO PUSH2 0x4B4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x11161CDDD85C115490CC8C0E8811561412549151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP12 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP6 ADD DUP3 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x102 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH2 0x122 DUP1 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP7 ADD DUP7 MSTORE PUSH2 0x142 DUP5 ADD DUP1 DUP3 MSTORE DUP7 MLOAD SWAP7 DUP4 ADD SWAP7 SWAP1 SWAP7 KECCAK256 SWAP6 DUP4 SWAP1 MSTORE PUSH2 0x162 DUP5 ADD DUP1 DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0xFF DUP10 AND PUSH2 0x182 DUP6 ADD MSTORE PUSH2 0x1A2 DUP5 ADD DUP9 SWAP1 MSTORE PUSH2 0x1C2 DUP5 ADD DUP8 SWAP1 MSTORE MLOAD SWAP2 SWAP4 SWAP3 PUSH2 0x1E2 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x605 JUMPI POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x656 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617045524332303A20494E56414C49445F5349474E41545552450000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x661 DUP10 DUP10 DUP10 PUSH2 0x689 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x343 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x764 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x6EB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x799 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x7F5 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x343 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xAC 0xC6 PUSH14 0x605EF803800BC0AD824DE198572E 0xB9 SELFBALANCE DUP5 PUSH18 0x95B71E3F6678566AFF2BE064736F6C634300 SDIV LT STOP ORIGIN GASLIMIT 0x49 POP CALLDATACOPY BALANCE ORIGIN DIFFICULTY PUSH16 0x6D61696E28737472696E67206E616D65 0x2C PUSH20 0x7472696E672076657273696F6E2C75696E743235 CALLDATASIZE KECCAK256 PUSH4 0x6861696E 0x49 PUSH5 0x2C61646472 PUSH6 0x737320766572 PUSH10 0x6679696E67436F6E7472 PUSH2 0x6374 0x29 ", - "sourceMap": "56:124:16:-;;;92:86;8:9:-1;5:2;;;30:1;27;20:12;5:2;92:86:16;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;92:86:16;1086:95:1;;990:7;;1086:95;;;;;;;;;;;;;;;;1215:4;;;;;;;;-1:-1:-1;;;1215:4:1;;;;;1249:10;;;;;;;;;;-1:-1:-1;;;1249:10:1;;;;1058:272;;;;;;;;;1199:22;1058:272;;;;1239:21;1058:272;;;;;;;;;;;1311:4;1058:272;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1058:272:1;;;;;;1035:305;;;;;;;;1016:16;:324;-1:-1:-1;140:31:16;146:10;158:12;-1:-1:-1;;;;;140:5:16;:31;:::i;:::-;92:86;56:124;;1353:197:1;1425:22;1441:5;1425:11;;:15;;;;;;:22;;;;:::i;:::-;1411:11;:36;;;-1:-1:-1;;;;;1473:13:1;;;;:9;:13;;;;;;;;;:24;;1491:5;;1473:17;;;;;:24;;:::i;:::-;-1:-1:-1;;;;;1457:13:1;;;;;;:9;:13;;;;;;;;:40;;;;1512:31;;;;;;;1457:13;;;;1512:31;;;;;;;;;;1353:197;;:::o;155:126:13:-;238:5;;;233:16;;;;225:49;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;155:126;;;;:::o;56:124:16:-;;;;;;;" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633644e5151161008c57806395d89b411161006657806395d89b411461025b578063a9059cbb14610263578063d505accf1461028f578063dd62ed3e146102e2576100cf565b80633644e5151461020757806370a082311461020f5780637ecebe0014610235576100cf565b806306fdde03146100d4578063095ea7b31461015157806318160ddd1461019157806323b872dd146101ab57806330adf81f146101e1578063313ce567146101e9575b600080fd5b6100dc610310565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101165781810151838201526020016100fe565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561016757600080fd5b506001600160a01b038135169060200135610332565b604080519115158252519081900360200190f35b610199610349565b60408051918252519081900360200190f35b61017d600480360360608110156101c157600080fd5b506001600160a01b0381358116916020810135909116906040013561034f565b6101996103e9565b6101f161040d565b6040805160ff9092168252519081900360200190f35b610199610412565b6101996004803603602081101561022557600080fd5b50356001600160a01b0316610418565b6101996004803603602081101561024b57600080fd5b50356001600160a01b031661042a565b6100dc61043c565b61017d6004803603604081101561027957600080fd5b506001600160a01b03813516906020013561045b565b6102e0600480360360e08110156102a557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610468565b005b610199600480360360408110156102f857600080fd5b506001600160a01b038135811691602001351661066c565b6040518060400160405280600681526020016504458737761760d41b81525081565b600061033f338484610689565b5060015b92915050565b60005481565b6001600160a01b0383166000908152600260209081526040808320338452909152812054600019146103d4576001600160a01b03841660009081526002602090815260408083203384529091529020546103af908363ffffffff6106eb16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6103df84848461073b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60016020526000908152604090205481565b60046020526000908152604090205481565b6040518060400160405280600381526020016244585360e81b81525081565b600061033f33848461073b565b428410156104b4576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156105cf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106055750886001600160a01b0316816001600160a01b0316145b610656576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b610661898989610689565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115610343576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054610764908263ffffffff6106eb16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610799908263ffffffff6107f516565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b80820182811015610343576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfea265627a7a72315820acc66d605ef803800bc0ad824de198572eb947847195b71e3f6678566aff2be064736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3644E515 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0x95D89B41 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x263 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x28F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2E2 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x3644E515 EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x20F JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x235 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x191 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1AB JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x1E1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1E9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDC PUSH2 0x310 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x116 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xFE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x143 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x332 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x199 PUSH2 0x349 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x34F JUMP JUMPDEST PUSH2 0x199 PUSH2 0x3E9 JUMP JUMPDEST PUSH2 0x1F1 PUSH2 0x40D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x199 PUSH2 0x412 JUMP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x225 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x418 JUMP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x24B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x42A JUMP JUMPDEST PUSH2 0xDC PUSH2 0x43C JUMP JUMPDEST PUSH2 0x17D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x45B JUMP JUMPDEST PUSH2 0x2E0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x2A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x468 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x199 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x66C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x44587377617 PUSH1 0xD4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F CALLER DUP5 DUP5 PUSH2 0x689 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH1 0x0 NOT EQ PUSH2 0x3D4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x3AF SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x6EB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE JUMPDEST PUSH2 0x3DF DUP5 DUP5 DUP5 PUSH2 0x73B JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x445853 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F CALLER DUP5 DUP5 PUSH2 0x73B JUMP JUMPDEST TIMESTAMP DUP5 LT ISZERO PUSH2 0x4B4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x11161CDDD85C115490CC8C0E8811561412549151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP12 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP6 ADD DUP3 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x102 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH2 0x122 DUP1 DUP6 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP1 MLOAD DUP1 DUP6 SUB SWAP1 SWAP7 ADD DUP7 MSTORE PUSH2 0x142 DUP5 ADD DUP1 DUP3 MSTORE DUP7 MLOAD SWAP7 DUP4 ADD SWAP7 SWAP1 SWAP7 KECCAK256 SWAP6 DUP4 SWAP1 MSTORE PUSH2 0x162 DUP5 ADD DUP1 DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0xFF DUP10 AND PUSH2 0x182 DUP6 ADD MSTORE PUSH2 0x1A2 DUP5 ADD DUP9 SWAP1 MSTORE PUSH2 0x1C2 DUP5 ADD DUP8 SWAP1 MSTORE MLOAD SWAP2 SWAP4 SWAP3 PUSH2 0x1E2 DUP1 DUP3 ADD SWAP4 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x605 JUMPI POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x656 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x44587377617045524332303A20494E56414C49445F5349474E41545552450000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x661 DUP10 DUP10 DUP10 PUSH2 0x689 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x343 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x64732D6D6174682D7375622D756E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x764 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x6EB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x799 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x7F5 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x343 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x64732D6D6174682D6164642D6F766572666C6F77 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xAC 0xC6 PUSH14 0x605EF803800BC0AD824DE198572E 0xB9 SELFBALANCE DUP5 PUSH18 0x95B71E3F6678566AFF2BE064736F6C634300 SDIV LT STOP ORIGIN ", - "sourceMap": "56:124:16:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;56:124:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;175:38:1;;;:::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;175:38:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2161:144;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2161:144:1;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;303:24;;;:::i;:::-;;;;;;;;;;;;;;;;2453:295;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2453:295:1;;;;;;;;;;;;;;;;;:::i;589:108::-;;;:::i;262:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;448:31;;;:::i;333:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;333:41:1;-1:-1:-1;;;;;333:41:1;;:::i;703:38::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;703:38:1;-1:-1:-1;;;;;703:38:1;;:::i;219:37::-;;;:::i;2311:136::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2311:136:1;;;;;;;;:::i;2754:666::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;2754:666:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;380:61;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;380:61:1;;;;;;;;;;:::i;175:38::-;;;;;;;;;;;;;;-1:-1:-1;;;175:38:1;;;;:::o;2161:144::-;2225:4;2241:36;2250:10;2262:7;2271:5;2241:8;:36::i;:::-;-1:-1:-1;2294:4:1;2161:144;;;;;:::o;303:24::-;;;;:::o;2453:295::-;-1:-1:-1;;;;;2551:15:1;;2531:4;2551:15;;;:9;:15;;;;;;;;2567:10;2551:27;;;;;;;;-1:-1:-1;;2551:39:1;2547:138;;-1:-1:-1;;;;;2636:15:1;;;;;;:9;:15;;;;;;;;2652:10;2636:27;;;;;;;;:38;;2668:5;2636:38;:31;:38;:::i;:::-;-1:-1:-1;;;;;2606:15:1;;;;;;:9;:15;;;;;;;;2622:10;2606:27;;;;;;;:68;2547:138;2694:26;2704:4;2710:2;2714:5;2694:9;:26::i;:::-;-1:-1:-1;2737:4:1;2453:295;;;;;:::o;589:108::-;631:66;589:108;:::o;262:35::-;295:2;262:35;:::o;448:31::-;;;;:::o;333:41::-;;;;;;;;;;;;;:::o;703:38::-;;;;;;;;;;;;;:::o;219:37::-;;;;;;;;;;;;;;-1:-1:-1;;;219:37:1;;;;:::o;2311:136::-;2371:4;2387:32;2397:10;2409:2;2413:5;2387:9;:32::i;2754:666::-;2899:15;2887:8;:27;;2879:60;;;;;-1:-1:-1;;;2879:60:1;;;;;;;;;;;;-1:-1:-1;;;2879:60:1;;;;;;;;;;;;;;;3051:16;;-1:-1:-1;;;;;3146:13:1;;;2949:14;3146:13;;;:6;:13;;;;;;;;:15;;;;;;;;;3095:77;;631:66;3095:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3095:77:1;;;;;3085:88;;;;;;-1:-1:-1;;;2989:198:1;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2989:198:1;;;;;;2966:231;;;;;;;;;3234:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2949:14;;3146:15;3234:26;;;;;-1:-1:-1;;3234:26:1;;;;;;;;;;3146:15;3234:26;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;3234:26:1;;-1:-1:-1;;3234:26:1;;;-1:-1:-1;;;;;;;3278:30:1;;;;;;:59;;;3332:5;-1:-1:-1;;;;;3312:25:1;:16;-1:-1:-1;;;;;3312:25:1;;3278:59;3270:102;;;;;-1:-1:-1;;;3270:102:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;3382:31;3391:5;3398:7;3407:5;3382:8;:31::i;:::-;2754:666;;;;;;;;;:::o;380:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;1767:166::-;-1:-1:-1;;;;;1847:16:1;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;1895:31;;;;;;;;;;;;;;;;;1767:166;;;:::o;287:127:13:-;370:5;;;365:16;;;;357:50;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;-1:-1:-1;;;357:50:13;;;;;;;;;;;;;;1939:216:1;-1:-1:-1;;;;;2032:15:1;;;;;;:9;:15;;;;;;:26;;2052:5;2032:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;2014:15:1;;;;;;;:9;:15;;;;;;:44;;;;2084:13;;;;;;;:24;;2102:5;2084:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;2068:13:1;;;;;;;:9;:13;;;;;;;;;:40;;;;2123:25;;;;;;;2068:13;;2123:25;;;;;;;;;;;;;1939:216;;;:::o;155:126:13:-;238:5;;;233:16;;;;225:49;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;-1:-1:-1;;;225:49:13;;;;;;;;;;;;;" - } - }, - "interface": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "_totalSupply", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "608060405234801561001057600080fd5b50604051610af2380380610af28339818101604052602081101561003357600080fd5b50516040514690806052610aa08239604080519182900360520182208282018252600683526504458737761760d41b6020938401528151808301835260018152603160f81b908401528151808401919091527f3649d708a7abf9e212d0a587955ead4123223014b2e46201dfb587457cbd4591818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c0909401905282519201919091206003555061011233826001600160e01b0361011816565b50610218565b610131816000546101ba60201b6107f51790919060201c565b60009081556001600160a01b0383168152600160209081526040909120546101629183906107f56101ba821b17901c565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b80820182811015610212576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b92915050565b610879806102276000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633644e5151161008c57806395d89b411161006657806395d89b411461025b578063a9059cbb14610263578063d505accf1461028f578063dd62ed3e146102e2576100cf565b80633644e5151461020757806370a082311461020f5780637ecebe0014610235576100cf565b806306fdde03146100d4578063095ea7b31461015157806318160ddd1461019157806323b872dd146101ab57806330adf81f146101e1578063313ce567146101e9575b600080fd5b6100dc610310565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101165781810151838201526020016100fe565b50505050905090810190601f1680156101435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561016757600080fd5b506001600160a01b038135169060200135610332565b604080519115158252519081900360200190f35b610199610349565b60408051918252519081900360200190f35b61017d600480360360608110156101c157600080fd5b506001600160a01b0381358116916020810135909116906040013561034f565b6101996103e9565b6101f161040d565b6040805160ff9092168252519081900360200190f35b610199610412565b6101996004803603602081101561022557600080fd5b50356001600160a01b0316610418565b6101996004803603602081101561024b57600080fd5b50356001600160a01b031661042a565b6100dc61043c565b61017d6004803603604081101561027957600080fd5b506001600160a01b03813516906020013561045b565b6102e0600480360360e08110156102a557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610468565b005b610199600480360360408110156102f857600080fd5b506001600160a01b038135811691602001351661066c565b6040518060400160405280600681526020016504458737761760d41b81525081565b600061033f338484610689565b5060015b92915050565b60005481565b6001600160a01b0383166000908152600260209081526040808320338452909152812054600019146103d4576001600160a01b03841660009081526002602090815260408083203384529091529020546103af908363ffffffff6106eb16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6103df84848461073b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60016020526000908152604090205481565b60046020526000908152604090205481565b6040518060400160405280600381526020016244585360e81b81525081565b600061033f33848461073b565b428410156104b4576040805162461bcd60e51b815260206004820152601460248201527311161cddd85c115490cc8c0e881156141254915160621b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156105cf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106055750886001600160a01b0316816001600160a01b0316145b610656576040805162461bcd60e51b815260206004820152601e60248201527f44587377617045524332303a20494e56414c49445f5349474e41545552450000604482015290519081900360640190fd5b610661898989610689565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115610343576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054610764908263ffffffff6106eb16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610799908263ffffffff6107f516565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b80820182811015610343576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfea265627a7a72315820acc66d605ef803800bc0ad824de198572eb947847195b71e3f6678566aff2be064736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429" -} \ No newline at end of file diff --git a/build/IDXswapCallee.json b/build/IDXswapCallee.json deleted file mode 100644 index f5b58e488..000000000 --- a/build/IDXswapCallee.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "abi": [ - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "DXswapCall", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - } - }, - "interface": [ - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "DXswapCall", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "" -} \ No newline at end of file diff --git a/build/IDXswapERC20.json b/build/IDXswapERC20.json deleted file mode 100644 index 01003d647..000000000 --- a/build/IDXswapERC20.json +++ /dev/null @@ -1,693 +0,0 @@ -{ - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - } - }, - "interface": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "" -} \ No newline at end of file diff --git a/build/IDXswapFactory.json b/build/IDXswapFactory.json deleted file mode 100644 index a8aee5a51..000000000 --- a/build/IDXswapFactory.json +++ /dev/null @@ -1,509 +0,0 @@ -{ - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token0", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token1", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "pair", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "PairCreated", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "INIT_CODE_PAIR_HASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "allPairs", - "outputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "allPairsLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "tokenA", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenB", - "type": "address" - } - ], - "name": "createPair", - "outputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "feeTo", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "feeToSetter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "tokenA", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenB", - "type": "address" - } - ], - "name": "getPair", - "outputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "protocolFeeDenominator", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "setFeeTo", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "setFeeToSetter", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint8", - "name": "_protocolFee", - "type": "uint8" - } - ], - "name": "setProtocolFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - }, - { - "internalType": "uint32", - "name": "swapFee", - "type": "uint32" - } - ], - "name": "setSwapFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - } - }, - "interface": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token0", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token1", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "pair", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "PairCreated", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "INIT_CODE_PAIR_HASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "allPairs", - "outputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "allPairsLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "tokenA", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenB", - "type": "address" - } - ], - "name": "createPair", - "outputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "feeTo", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "feeToSetter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "tokenA", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenB", - "type": "address" - } - ], - "name": "getPair", - "outputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "protocolFeeDenominator", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "setFeeTo", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "setFeeToSetter", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint8", - "name": "_protocolFee", - "type": "uint8" - } - ], - "name": "setProtocolFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "pair", - "type": "address" - }, - { - "internalType": "uint32", - "name": "swapFee", - "type": "uint32" - } - ], - "name": "setSwapFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "" -} \ No newline at end of file diff --git a/build/IDXswapPair.json b/build/IDXswapPair.json deleted file mode 100644 index 13309fc8b..000000000 --- a/build/IDXswapPair.json +++ /dev/null @@ -1,1491 +0,0 @@ -{ - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Burn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "name": "Mint", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Swap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint112", - "name": "reserve0", - "type": "uint112" - }, - { - "indexed": false, - "internalType": "uint112", - "name": "reserve1", - "type": "uint112" - } - ], - "name": "Sync", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "MINIMUM_LIQUIDITY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "burn", - "outputs": [ - { - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getReserves", - "outputs": [ - { - "internalType": "uint112", - "name": "reserve0", - "type": "uint112" - }, - { - "internalType": "uint112", - "name": "reserve1", - "type": "uint112" - }, - { - "internalType": "uint32", - "name": "blockTimestampLast", - "type": "uint32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "kLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "liquidity", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "price0CumulativeLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "price1CumulativeLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "setSwapFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "skim", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "swap", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "swapFee", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "sync", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "token0", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "token1", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - } - }, - "interface": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Burn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "name": "Mint", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Swap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint112", - "name": "reserve0", - "type": "uint112" - }, - { - "indexed": false, - "internalType": "uint112", - "name": "reserve1", - "type": "uint112" - } - ], - "name": "Sync", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "MINIMUM_LIQUIDITY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "burn", - "outputs": [ - { - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getReserves", - "outputs": [ - { - "internalType": "uint112", - "name": "reserve0", - "type": "uint112" - }, - { - "internalType": "uint112", - "name": "reserve1", - "type": "uint112" - }, - { - "internalType": "uint32", - "name": "blockTimestampLast", - "type": "uint32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "kLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "liquidity", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "price0CumulativeLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "price1CumulativeLast", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "setSwapFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "skim", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "swap", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "swapFee", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "sync", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "token0", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "token1", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "" -} \ No newline at end of file diff --git a/build/IERC20.json b/build/IERC20.json deleted file mode 100644 index 8bcd58316..000000000 --- a/build/IERC20.json +++ /dev/null @@ -1,501 +0,0 @@ -{ - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - } - }, - "interface": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "" -} \ No newline at end of file diff --git a/build/IWETH.json b/build/IWETH.json deleted file mode 100644 index e84d46677..000000000 --- a/build/IWETH.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "abi": [ - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "deposit", - "outputs": [], - "payable": true, - "stateMutability": "payable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - } - }, - "interface": [ - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "deposit", - "outputs": [], - "payable": true, - "stateMutability": "payable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "" -} \ No newline at end of file diff --git a/build/Math.json b/build/Math.json deleted file mode 100644 index 75b437090..000000000 --- a/build/Math.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "abi": [], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582037bc2442f4b30fdf8402874de6d1888898c3ade68df9e76bc96ff02bc367d7cb64736f6c63430005100032", - "opcodes": "PUSH1 0x55 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 CALLDATACOPY 0xBC 0x24 TIMESTAMP DELEGATECALL 0xB3 0xF 0xDF DUP5 MUL DUP8 0x4D 0xE6 0xD1 DUP9 DUP9 SWAP9 0xC3 0xAD 0xE6 DUP14 0xF9 0xE7 PUSH12 0xC96FF02BC367D7CB64736F6C PUSH4 0x43000510 STOP ORIGIN ", - "sourceMap": "79:522:12:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582037bc2442f4b30fdf8402874de6d1888898c3ade68df9e76bc96ff02bc367d7cb64736f6c63430005100032", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 CALLDATACOPY 0xBC 0x24 TIMESTAMP DELEGATECALL 0xB3 0xF 0xDF DUP5 MUL DUP8 0x4D 0xE6 0xD1 DUP9 DUP9 SWAP9 0xC3 0xAD 0xE6 DUP14 0xF9 0xE7 PUSH12 0xC96FF02BC367D7CB64736F6C PUSH4 0x43000510 STOP ORIGIN ", - "sourceMap": "79:522:12:-;;;;;;;;" - } - }, - "interface": [], - "bytecode": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582037bc2442f4b30fdf8402874de6d1888898c3ade68df9e76bc96ff02bc367d7cb64736f6c63430005100032" -} \ No newline at end of file diff --git a/build/SafeMath.json b/build/SafeMath.json deleted file mode 100644 index c9fe1e8c3..000000000 --- a/build/SafeMath.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "abi": [], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158206671d3ecff2622b6458811f5d1b4829db14b368de5bed9d0c4afb3937ddce30e64736f6c63430005100032", - "opcodes": "PUSH1 0x55 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 PUSH7 0x71D3ECFF2622B6 GASLIMIT DUP9 GT CREATE2 0xD1 0xB4 DUP3 SWAP14 0xB1 0x4B CALLDATASIZE DUP14 0xE5 0xBE 0xD9 0xD0 0xC4 0xAF 0xB3 SWAP4 PUSH30 0xDCE30E64736F6C6343000510003200000000000000000000000000000000 ", - "sourceMap": "132:430:13:-;;:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158206671d3ecff2622b6458811f5d1b4829db14b368de5bed9d0c4afb3937ddce30e64736f6c63430005100032", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 PUSH7 0x71D3ECFF2622B6 GASLIMIT DUP9 GT CREATE2 0xD1 0xB4 DUP3 SWAP14 0xB1 0x4B CALLDATASIZE DUP14 0xE5 0xBE 0xD9 0xD0 0xC4 0xAF 0xB3 SWAP4 PUSH30 0xDCE30E64736F6C6343000510003200000000000000000000000000000000 ", - "sourceMap": "132:430:13:-;;;;;;;;" - } - }, - "interface": [], - "bytecode": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158206671d3ecff2622b6458811f5d1b4829db14b368de5bed9d0c4afb3937ddce30e64736f6c63430005100032" -} \ No newline at end of file diff --git a/build/TransferHelper.json b/build/TransferHelper.json deleted file mode 100644 index e7553860a..000000000 --- a/build/TransferHelper.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "abi": [], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158203210b5fc9b0bec246fb225a524d96dbbc594e61a286062754f2cc04a2fb9d04064736f6c63430005100032", - "opcodes": "PUSH1 0x55 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 ORIGIN LT 0xB5 0xFC SWAP12 SIGNEXTEND 0xEC 0x24 PUSH16 0xB225A524D96DBBC594E61A286062754F 0x2C 0xC0 0x4A 0x2F 0xB9 0xD0 BLOCKHASH PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ", - "sourceMap": "137:1350:14:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158203210b5fc9b0bec246fb225a524d96dbbc594e61a286062754f2cc04a2fb9d04064736f6c63430005100032", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 ORIGIN LT 0xB5 0xFC SWAP12 SIGNEXTEND 0xEC 0x24 PUSH16 0xB225A524D96DBBC594E61A286062754F 0x2C 0xC0 0x4A 0x2F 0xB9 0xD0 BLOCKHASH PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ", - "sourceMap": "137:1350:14:-;;;;;;;;" - } - }, - "interface": [], - "bytecode": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158203210b5fc9b0bec246fb225a524d96dbbc594e61a286062754f2cc04a2fb9d04064736f6c63430005100032" -} \ No newline at end of file diff --git a/build/UQ112x112.json b/build/UQ112x112.json deleted file mode 100644 index fdb74d04c..000000000 --- a/build/UQ112x112.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "abi": [], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820873aca9adcb3b9775d4b2b6b72bb860dc700ff3f6e53c90ead2a215d18dc61cb64736f6c63430005100032", - "opcodes": "PUSH1 0x55 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 DUP8 GASPRICE 0xCA SWAP11 0xDC 0xB3 0xB9 PUSH24 0x5D4B2B6B72BB860DC700FF3F6E53C90EAD2A215D18DC61CB PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ", - "sourceMap": "183:394:15:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820873aca9adcb3b9775d4b2b6b72bb860dc700ff3f6e53c90ead2a215d18dc61cb64736f6c63430005100032", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 DUP8 GASPRICE 0xCA SWAP11 0xDC 0xB3 0xB9 PUSH24 0x5D4B2B6B72BB860DC700FF3F6E53C90EAD2A215D18DC61CB PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ", - "sourceMap": "183:394:15:-;;;;;;;;" - } - }, - "interface": [], - "bytecode": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820873aca9adcb3b9775d4b2b6b72bb860dc700ff3f6e53c90ead2a215d18dc61cb64736f6c63430005100032" -} \ No newline at end of file diff --git a/build/WETH9.json b/build/WETH9.json deleted file mode 100644 index 3dc027d9f..000000000 --- a/build/WETH9.json +++ /dev/null @@ -1,625 +0,0 @@ -{ - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "guy", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "guy", - "type": "address" - }, - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "deposit", - "outputs": [], - "payable": true, - "stateMutability": "payable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "60c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b50610115565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100bb57805160ff19168380011785556100e8565b828001600101855582156100e8579182015b828111156100e85782518255916020019190600101906100cd565b506100f49291506100f8565b5090565b61011291905b808211156100f457600081556001016100fe565b90565b61074e806101246000396000f3fe60806040526004361061009c5760003560e01c8063313ce56711610064578063313ce5671461020e57806370a082311461023957806395d89b411461026c578063a9059cbb14610281578063d0e30db0146102ba578063dd62ed3e146102c25761009c565b806306fdde03146100a1578063095ea7b31461012b57806318160ddd1461017857806323b872dd1461019f5780632e1a7d4d146101e2575b600080fd5b3480156100ad57600080fd5b506100b66102fd565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f05781810151838201526020016100d8565b50505050905090810190601f16801561011d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561013757600080fd5b506101646004803603604081101561014e57600080fd5b506001600160a01b03813516906020013561038b565b604080519115158252519081900360200190f35b34801561018457600080fd5b5061018d6103f1565b60408051918252519081900360200190f35b3480156101ab57600080fd5b50610164600480360360608110156101c257600080fd5b506001600160a01b038135811691602081013590911690604001356103f5565b3480156101ee57600080fd5b5061020c6004803603602081101561020557600080fd5b503561056d565b005b34801561021a57600080fd5b50610223610624565b6040805160ff9092168252519081900360200190f35b34801561024557600080fd5b5061018d6004803603602081101561025c57600080fd5b50356001600160a01b031661062d565b34801561027857600080fd5b506100b661063f565b34801561028d57600080fd5b50610164600480360360408110156102a457600080fd5b506001600160a01b038135169060200135610699565b61020c6106ad565b3480156102ce57600080fd5b5061018d600480360360408110156102e557600080fd5b506001600160a01b03813581169160200135166106fc565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103835780601f1061035857610100808354040283529160200191610383565b820191906000526020600020905b81548152906001019060200180831161036657829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b6001600160a01b03831660009081526003602052604081205482111561043c576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b038416331480159061047a57506001600160a01b038416600090815260046020908152604080832033845290915290205460001914155b156104fc576001600160a01b03841660009081526004602090815260408083203384529091529020548211156104d1576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b03841660009081526004602090815260408083203384529091529020805483900390555b6001600160a01b03808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b336000908152600360205260409020548111156105ab576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156105ea573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103835780601f1061035857610100808354040283529160200191610383565b60006106a63384846103f5565b9392505050565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b60046020908152600092835260408084209091529082529020548156fea265627a7a72315820eb96b882b9698b00b0c5d9f672d459508ed31b7f67892b8a82ffa8e5e9baeafd64736f6c63430005100032", - "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE PUSH1 0xD PUSH1 0x80 DUP2 SWAP1 MSTORE PUSH13 0x2BB930B83832B21022BA3432B9 PUSH1 0x99 SHL PUSH1 0xA0 SWAP1 DUP2 MSTORE PUSH2 0x2E SWAP2 PUSH1 0x0 SWAP2 SWAP1 PUSH2 0x7A JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP1 DUP3 MSTORE PUSH4 0xAE8AA89 PUSH1 0xE3 SHL PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 DUP3 MSTORE PUSH2 0x5A SWAP2 PUSH1 0x1 SWAP2 PUSH2 0x7A JUMP JUMPDEST POP PUSH1 0x2 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x115 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0xBB JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0xE8 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0xE8 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0xE8 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xCD JUMP JUMPDEST POP PUSH2 0xF4 SWAP3 SWAP2 POP PUSH2 0xF8 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x112 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xFE JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x74E DUP1 PUSH2 0x124 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x9C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x20E JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x239 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x281 JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0x2BA JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2C2 JUMPI PUSH2 0x9C JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xA1 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x178 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x19F JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x1E2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB6 PUSH2 0x2FD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x164 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x14E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x38B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x184 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18D PUSH2 0x3F1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x164 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x3F5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x20C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x205 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x56D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x624 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x25C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x62D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB6 PUSH2 0x63F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x28D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x164 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x699 JUMP JUMPDEST PUSH2 0x20C PUSH2 0x6AD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x6FC JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x383 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x358 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x383 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x366 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST SELFBALANCE SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x43C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x47A JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x0 NOT EQ ISZERO JUMPDEST ISZERO PUSH2 0x4FC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x4D1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD DUP4 SWAP1 SUB SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP9 SWAP1 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE DUP4 MLOAD DUP7 DUP2 MSTORE SWAP4 MLOAD SWAP2 SWAP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x5AB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP6 SWAP1 SUB SWAP1 SSTORE MLOAD DUP4 ISZERO PUSH2 0x8FC MUL SWAP2 DUP5 SWAP2 SWAP1 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x5EA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 DUP5 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x383 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x358 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x383 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6A6 CALLER DUP5 DUP5 PUSH2 0x3F5 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD CALLVALUE SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xEB SWAP7 0xB8 DUP3 0xB9 PUSH10 0x8B00B0C5D9F672D45950 DUP15 0xD3 SHL PUSH32 0x67892B8A82FFA8E5E9BAEAFD64736F6C63430005100032000000000000000000 ", - "sourceMap": "733:40:17:-;712:1828;733:40;;712:1828;733:40;;;-1:-1:-1;;;733:40:17;;;;;;-1:-1:-1;;733:40:17;;:::i;:::-;-1:-1:-1;779:31:17;;;;;;;;;;;;;-1:-1:-1;;;779:31:17;;;;;;;;;;;;:::i;:::-;-1:-1:-1;816:27:17;;;-1:-1:-1;;816:27:17;841:2;816:27;;;712:1828;5:2:-1;;;;30:1;27;20:12;5:2;712:1828:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;712:1828:17;;;-1:-1:-1;712:1828:17;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;" - }, - "deployedBytecode": { - "linkReferences": {}, - "object": "60806040526004361061009c5760003560e01c8063313ce56711610064578063313ce5671461020e57806370a082311461023957806395d89b411461026c578063a9059cbb14610281578063d0e30db0146102ba578063dd62ed3e146102c25761009c565b806306fdde03146100a1578063095ea7b31461012b57806318160ddd1461017857806323b872dd1461019f5780632e1a7d4d146101e2575b600080fd5b3480156100ad57600080fd5b506100b66102fd565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f05781810151838201526020016100d8565b50505050905090810190601f16801561011d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561013757600080fd5b506101646004803603604081101561014e57600080fd5b506001600160a01b03813516906020013561038b565b604080519115158252519081900360200190f35b34801561018457600080fd5b5061018d6103f1565b60408051918252519081900360200190f35b3480156101ab57600080fd5b50610164600480360360608110156101c257600080fd5b506001600160a01b038135811691602081013590911690604001356103f5565b3480156101ee57600080fd5b5061020c6004803603602081101561020557600080fd5b503561056d565b005b34801561021a57600080fd5b50610223610624565b6040805160ff9092168252519081900360200190f35b34801561024557600080fd5b5061018d6004803603602081101561025c57600080fd5b50356001600160a01b031661062d565b34801561027857600080fd5b506100b661063f565b34801561028d57600080fd5b50610164600480360360408110156102a457600080fd5b506001600160a01b038135169060200135610699565b61020c6106ad565b3480156102ce57600080fd5b5061018d600480360360408110156102e557600080fd5b506001600160a01b03813581169160200135166106fc565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103835780601f1061035857610100808354040283529160200191610383565b820191906000526020600020905b81548152906001019060200180831161036657829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b6001600160a01b03831660009081526003602052604081205482111561043c576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b038416331480159061047a57506001600160a01b038416600090815260046020908152604080832033845290915290205460001914155b156104fc576001600160a01b03841660009081526004602090815260408083203384529091529020548211156104d1576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b03841660009081526004602090815260408083203384529091529020805483900390555b6001600160a01b03808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b336000908152600360205260409020548111156105ab576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156105ea573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103835780601f1061035857610100808354040283529160200191610383565b60006106a63384846103f5565b9392505050565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b60046020908152600092835260408084209091529082529020548156fea265627a7a72315820eb96b882b9698b00b0c5d9f672d459508ed31b7f67892b8a82ffa8e5e9baeafd64736f6c63430005100032", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x9C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x20E JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x239 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x281 JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0x2BA JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2C2 JUMPI PUSH2 0x9C JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xA1 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x178 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x19F JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x1E2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB6 PUSH2 0x2FD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x164 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x14E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x38B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x184 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18D PUSH2 0x3F1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x164 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x3F5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x20C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x205 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x56D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x624 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x25C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x62D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB6 PUSH2 0x63F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x28D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x164 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x699 JUMP JUMPDEST PUSH2 0x20C PUSH2 0x6AD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x6FC JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x383 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x358 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x383 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x366 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST SELFBALANCE SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x43C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x47A JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x0 NOT EQ ISZERO JUMPDEST ISZERO PUSH2 0x4FC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x4D1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD DUP4 SWAP1 SUB SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP9 SWAP1 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE DUP4 MLOAD DUP7 DUP2 MSTORE SWAP4 MLOAD SWAP2 SWAP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x5AB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP6 SWAP1 SUB SWAP1 SSTORE MLOAD DUP4 ISZERO PUSH2 0x8FC MUL SWAP2 DUP5 SWAP2 SWAP1 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x5EA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 DUP5 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x383 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x358 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x383 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6A6 CALLER DUP5 DUP5 PUSH2 0x3F5 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD CALLVALUE SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xEB SWAP7 0xB8 DUP3 0xB9 PUSH10 0x8B00B0C5D9F672D45950 DUP15 0xD3 SHL PUSH32 0x67892B8A82FFA8E5E9BAEAFD64736F6C63430005100032000000000000000000 ", - "sourceMap": "712:1828:17:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;733:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;733:40:17;;;:::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;733:40:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1760:177;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1760:177:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1760:177:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1659:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1659:95:17;;;:::i;:::-;;;;;;;;;;;;;;;;2070:468;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2070:468:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2070:468:17;;;;;;;;;;;;;;;;;:::i;1446:207::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1446:207:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1446:207:17;;:::i;:::-;;816:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;816:27:17;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1102:65;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1102:65:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1102:65:17;-1:-1:-1;;;;;1102:65:17;;:::i;779:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;779:31:17;;;:::i;1943:121::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1943:121:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1943:121:17;;;;;;;;:::i;1311:130::-;;;:::i;1173:65::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1173:65:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1173:65:17;;;;;;;;;;:::i;733:40::-;;;;;;;;;;;;;;;-1:-1:-1;;733:40:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1760:177::-;1842:10;1816:4;1832:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;1832:26:17;;;;;;;;;;;:32;;;1879:30;;;;;;;1816:4;;1832:26;;1842:10;;1879:30;;;;;;;;-1:-1:-1;1926:4:17;1760:177;;;;:::o;1659:95::-;1726:21;1659:95;:::o;2070:468::-;-1:-1:-1;;;;;2188:14:17;;2160:4;2188:14;;;:9;:14;;;;;;:21;-1:-1:-1;2188:21:17;2180:34;;;;;-1:-1:-1;;;2180:34:17;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2229:17:17;;2236:10;2229:17;;;;:59;;-1:-1:-1;;;;;;2250:14:17;;;;;;:9;:14;;;;;;;;2265:10;2250:26;;;;;;;;-1:-1:-1;;2250:38:17;;2229:59;2225:183;;;-1:-1:-1;;;;;2312:14:17;;;;;;:9;:14;;;;;;;;2327:10;2312:26;;;;;;;;:33;-1:-1:-1;2312:33:17;2304:46;;;;;-1:-1:-1;;;2304:46:17;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2364:14:17;;;;;;:9;:14;;;;;;;;2379:10;2364:26;;;;;;;:33;;;;;;;2225:183;-1:-1:-1;;;;;2418:14:17;;;;;;;:9;:14;;;;;;;;:21;;;;;;;2449:14;;;;;;;;;;:21;;;;;;2486:23;;;;;;;2449:14;;2486:23;;;;;;;;;;;-1:-1:-1;2527:4:17;2070:468;;;;;:::o;1446:207::-;1509:10;1499:21;;;;:9;:21;;;;;;:28;-1:-1:-1;1499:28:17;1491:41;;;;;-1:-1:-1;;;1491:41:17;;;;;;;;;;;;;;;;;;;;;;;1552:10;1542:21;;;;:9;:21;;;;;;:28;;;;;;;1580:24;;;;;;1567:3;;1580:24;;1542:21;1580:24;1567:3;1552:10;1580:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;1619:27:17;;;;;;;;1630:10;;1619:27;;;;;;;;;;1446:207;:::o;816:27::-;;;;;;:::o;1102:65::-;;;;;;;;;;;;;:::o;779:31::-;;;;;;;;;;;;;;;-1:-1:-1;;779:31:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1943:121;2000:4;2023:34;2036:10;2048:3;2053;2023:12;:34::i;:::-;2016:41;1943:121;-1:-1:-1;;;1943:121:17:o;1311:130::-;1365:10;1355:21;;;;:9;:21;;;;;;;;;:34;;1380:9;1355:34;;;;;;1404:30;;;;;;;;;;;;;;;;;1311:130::o;1173:65::-;;;;;;;;;;;;;;;;;;;;;;;;:::o" - } - }, - "interface": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "guy", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "guy", - "type": "address" - }, - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "deposit", - "outputs": [], - "payable": true, - "stateMutability": "payable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "60c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b50610115565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100bb57805160ff19168380011785556100e8565b828001600101855582156100e8579182015b828111156100e85782518255916020019190600101906100cd565b506100f49291506100f8565b5090565b61011291905b808211156100f457600081556001016100fe565b90565b61074e806101246000396000f3fe60806040526004361061009c5760003560e01c8063313ce56711610064578063313ce5671461020e57806370a082311461023957806395d89b411461026c578063a9059cbb14610281578063d0e30db0146102ba578063dd62ed3e146102c25761009c565b806306fdde03146100a1578063095ea7b31461012b57806318160ddd1461017857806323b872dd1461019f5780632e1a7d4d146101e2575b600080fd5b3480156100ad57600080fd5b506100b66102fd565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f05781810151838201526020016100d8565b50505050905090810190601f16801561011d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561013757600080fd5b506101646004803603604081101561014e57600080fd5b506001600160a01b03813516906020013561038b565b604080519115158252519081900360200190f35b34801561018457600080fd5b5061018d6103f1565b60408051918252519081900360200190f35b3480156101ab57600080fd5b50610164600480360360608110156101c257600080fd5b506001600160a01b038135811691602081013590911690604001356103f5565b3480156101ee57600080fd5b5061020c6004803603602081101561020557600080fd5b503561056d565b005b34801561021a57600080fd5b50610223610624565b6040805160ff9092168252519081900360200190f35b34801561024557600080fd5b5061018d6004803603602081101561025c57600080fd5b50356001600160a01b031661062d565b34801561027857600080fd5b506100b661063f565b34801561028d57600080fd5b50610164600480360360408110156102a457600080fd5b506001600160a01b038135169060200135610699565b61020c6106ad565b3480156102ce57600080fd5b5061018d600480360360408110156102e557600080fd5b506001600160a01b03813581169160200135166106fc565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103835780601f1061035857610100808354040283529160200191610383565b820191906000526020600020905b81548152906001019060200180831161036657829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b6001600160a01b03831660009081526003602052604081205482111561043c576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b038416331480159061047a57506001600160a01b038416600090815260046020908152604080832033845290915290205460001914155b156104fc576001600160a01b03841660009081526004602090815260408083203384529091529020548211156104d1576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b6001600160a01b03841660009081526004602090815260408083203384529091529020805483900390555b6001600160a01b03808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b336000908152600360205260409020548111156105ab576040805162461bcd60e51b8152602060048201526000602482015290519081900360640190fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156105ea573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103835780601f1061035857610100808354040283529160200191610383565b60006106a63384846103f5565b9392505050565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b60046020908152600092835260408084209091529082529020548156fea265627a7a72315820eb96b882b9698b00b0c5d9f672d459508ed31b7f67892b8a82ffa8e5e9baeafd64736f6c63430005100032" -} \ No newline at end of file diff --git a/contracts/DXswapFeeSplitter.sol b/contracts/DXswapFeeSplitter.sol new file mode 100644 index 000000000..62e9297a3 --- /dev/null +++ b/contracts/DXswapFeeSplitter.sol @@ -0,0 +1,230 @@ +pragma solidity =0.8.15; + +import './interfaces/IDXswapFactory.sol'; +import './interfaces/IDXswapPair.sol'; +import './interfaces/IWETH.sol'; +import './libraries/TransferHelperV2.sol'; + +contract DXswapFeeSplitter { + address public owner; + IDXswapFactory public factory; + address public nativeCurrencyWrapper; + address public ethReceiver; + address public fallbackReceiver; + uint16 public maxSwapPriceImpact = 100; // uses default 1% as max allowed price impact for takeProtocolFee swap + + // if needed set address of external project which can get % of total earned protocol fee + // % of total protocol fee to external project (100 means 1%) is within the range <0, 50> + struct ExternalFeeReceiver { + address externalReceiver; + uint16 feePercentage; + } + + mapping(address => ExternalFeeReceiver) public externalFeeReceivers; + + event TakeProtocolFee(address indexed sender, address indexed to, uint256 NumberOfPairs); + + constructor( + address _owner, + address _factory, + address _nativeCurrencyWrapper, + address _ethReceiver, + address _fallbackReceiver + ) { + owner = _owner; + factory = IDXswapFactory(_factory); + nativeCurrencyWrapper = _nativeCurrencyWrapper; + ethReceiver = _ethReceiver; + fallbackReceiver = _fallbackReceiver; + } + + receive() external payable {} + + // called by the owner to set the new owner + function transferOwnership(address newOwner) external { + require(msg.sender == owner, 'DXswapFeeSplitter: FORBIDDEN'); + owner = newOwner; + } + + // called by the owner to change receivers addresses + function changeReceivers(address _ethReceiver, address _fallbackReceiver) external { + require(msg.sender == owner, 'DXswapFeeSplitter: FORBIDDEN'); + ethReceiver = _ethReceiver; + fallbackReceiver = _fallbackReceiver; + } + + // 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, 'DXswapFeeSplitter: IDENTICAL_ADDRESSES'); + (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); + require(token0 != address(0), 'DXswapFeeSplitter: ZERO_ADDRESS'); + } + + // Helper function to know if an address is a contract, extcodesize returns the size of the code of a smart + // contract in a specific address + function isContract(address addr) internal view returns (bool) { + uint256 size; + assembly { + size := extcodesize(addr) + } + return size > 0; + } + + // Calculates the CREATE2 address for a pair without making any external calls + // Taken from DXswapLibrary, removed the factory parameter + function pairFor(address tokenA, address tokenB) internal view returns (address pair) { + (address token0, address token1) = sortTokens(tokenA, tokenB); + pair = address( + uint160( + uint256( + keccak256( + abi.encodePacked( + hex'ff', + factory, + keccak256(abi.encodePacked(token0, token1)), + hex'd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776' // init code hash + ) + ) + ) + ) + ); + } + + // Done with code form DXswapRouter and DXswapLibrary, removed the deadline argument + function _swapTokensForETH(uint256 amountIn, address fromToken) internal returns (uint256 amountOut) { + IDXswapPair pairToUse = IDXswapPair(pairFor(fromToken, nativeCurrencyWrapper)); + + (uint256 reserve0, uint256 reserve1, ) = pairToUse.getReserves(); + (uint256 reserveIn, uint256 reserveOut) = fromToken < nativeCurrencyWrapper ? (reserve0, reserve1) : (reserve1, reserve0); + + require(reserveIn > 0 && reserveOut > 0, 'DXswapFeeSplitter: INSUFFICIENT_LIQUIDITY'); // should never happen since pool was checked before + uint256 amountInWithFee = amountIn * (10000 - pairToUse.swapFee()); + uint256 numerator = amountInWithFee * reserveOut; + uint256 denominator = reserveIn * 10000 + amountInWithFee; + amountOut = numerator / denominator; + + TransferHelper.safeTransfer(fromToken, address(pairToUse), amountIn); + + (uint256 amount0Out, uint256 amount1Out) = fromToken < nativeCurrencyWrapper ? (uint256(0), amountOut) : (amountOut, uint256(0)); + + pairToUse.swap(amount0Out, amount1Out, address(this), new bytes(0)); + } + + // Helper function to know if token-nativeCurrencyWrapper pool exists and has enough liquidity + function _isSwapPossible( + address token0, + address token1, + uint256 amount + ) internal view returns (bool) { + address pair = pairFor(token0, token1); + if (!isContract(pair)) return false; + + (uint256 reserve0, uint256 reserve1, ) = IDXswapPair(pair).getReserves(); + (uint256 reserveIn, uint256 reserveOut) = token0 < token1 ? (reserve0, reserve1) : (reserve1, reserve0); + if (reserveIn == 0 || reserveOut == 0) return false; + + uint256 priceImpact = amount * 10000 / reserveIn; // simplified formula + if (priceImpact > maxSwapPriceImpact) return false; + + return true; + } + + // Checks if LP has an extra external address which participates in the distrubution of protocol fee + // External Receiver address has to be defined and fee % > 0 to transfer tokens + function _splitAndTransferFee( + address pair, + address token, + uint256 amount + ) internal { + address _externalFeeReceiver = externalFeeReceivers[pair].externalReceiver; + uint16 _percentFeeToExternalReceiver = externalFeeReceivers[pair].feePercentage; + + if (_percentFeeToExternalReceiver > 0 && _externalFeeReceiver != address(0)) { + uint256 feeToExternalReceiver = amount * _percentFeeToExternalReceiver / 10000; + uint256 feeToAvatarDAO = amount - feeToExternalReceiver; + if (token == nativeCurrencyWrapper) { + IWETH(nativeCurrencyWrapper).withdraw(amount); + TransferHelper.safeTransferETH(_externalFeeReceiver, feeToExternalReceiver); + TransferHelper.safeTransferETH(ethReceiver, feeToAvatarDAO); + } else { + TransferHelper.safeTransfer(token, _externalFeeReceiver, feeToExternalReceiver); + TransferHelper.safeTransfer(token, fallbackReceiver, feeToAvatarDAO); + } + } else { + if (token == nativeCurrencyWrapper) { + IWETH(nativeCurrencyWrapper).withdraw(amount); + TransferHelper.safeTransferETH(ethReceiver, amount); + } else { + TransferHelper.safeTransfer(token, fallbackReceiver, amount); + } + } + } + + // Convert tokens into ETH if possible, if not just transfer the token + function _takeTokenOrETH( + address pair, + address token, + uint256 amount + ) internal { + if (token != nativeCurrencyWrapper && _isSwapPossible(token, nativeCurrencyWrapper, amount)) { + // If it is not nativeCurrencyWrapper and there is a direct path to nativeCurrencyWrapper, swap tokens + uint256 amountOut = _swapTokensForETH(amount, token); + _splitAndTransferFee(pair, nativeCurrencyWrapper, amountOut); + } else { + // If it is nativeCurrencyWrapper or there is not a direct path from token to nativeCurrencyWrapper, transfer tokens + _splitAndTransferFee(pair, token, amount); + } + } + + // Take what was charged as protocol fee from the DXswap pair liquidity + function takeProtocolFee(IDXswapPair[] calldata pairs) external { + for (uint256 i = 0; i < pairs.length; i++) { + address token0 = pairs[i].token0(); + address token1 = pairs[i].token1(); + pairs[i].transfer(address(pairs[i]), pairs[i].balanceOf(address(this))); + (uint256 amount0, uint256 amount1) = pairs[i].burn(address(this)); + if (amount0 > 0) _takeTokenOrETH(address(pairs[i]), token0, amount0); + if (amount1 > 0) _takeTokenOrETH(address(pairs[i]), token1, amount1); + } + emit TakeProtocolFee(msg.sender, ethReceiver, pairs.length); + } + + // called by the owner to set maximum swap price impact allowed for single token-nativeCurrencyWrapper swap (within 0-100% range) + function setMaxSwapPriceImpact(uint16 _maxSwapPriceImpact) external { + require(msg.sender == owner, 'DXswapFeeSplitter: CALLER_NOT_OWNER'); + require(_maxSwapPriceImpact > 0 && _maxSwapPriceImpact < 10000, 'DXswapFeeSplitter: FORBIDDEN_PRICE_IMPACT'); + maxSwapPriceImpact = _maxSwapPriceImpact; + } + + // called by the owner to set external fee receiver address + function setExternalFeeReceiver(address _pair, address _externalReceiver) external { + require(msg.sender == owner, 'DXswapFeeSplitter: CALLER_NOT_OWNER'); + externalFeeReceivers[_pair].externalReceiver = _externalReceiver; + } + + // called by the owner to set fee percentage to external receiver + function setFeePercentageToExternalReceiver(address _pair, uint16 _feePercentageToExternalReceiver) external { + require(msg.sender == owner, 'DXswapFeeSplitter: CALLER_NOT_OWNER'); + IDXswapPair swapPair = IDXswapPair(_pair); + uint256 feeReceiverBalance = swapPair.balanceOf(address(this)); + if (feeReceiverBalance > 0) { + // withdraw accumulated fees before updating the split percentage + address token0 = swapPair.token0(); + address token1 = swapPair.token1(); + swapPair.transfer(address(swapPair), feeReceiverBalance); + (uint256 amount0, uint256 amount1) = swapPair.burn(address(this)); + if (amount0 > 0) _takeTokenOrETH(address(swapPair), token0, amount0); + if (amount1 > 0) _takeTokenOrETH(address(swapPair), token1, amount1); + emit TakeProtocolFee(msg.sender, ethReceiver, 1); + } + require(swapPair.balanceOf(address(this)) == 0, 'DXswapFeeSplitter: TOKENS_NOT_BURNED'); + + // fee percentage check + require( + _feePercentageToExternalReceiver >= 0 && _feePercentageToExternalReceiver <= 5000, + 'DXswapFeeSplitter: FORBIDDEN_FEE_PERCENTAGE_SPLIT' + ); + // update the split percentage for specific pair + externalFeeReceivers[_pair].feePercentage = _feePercentageToExternalReceiver; + } +} diff --git a/contracts/libraries/TransferHelperV2.sol b/contracts/libraries/TransferHelperV2.sol new file mode 100644 index 000000000..dafdf8b9e --- /dev/null +++ b/contracts/libraries/TransferHelperV2.sol @@ -0,0 +1,27 @@ +pragma solidity =0.8.15; + +// 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 msgValue) internal { + (bool success,) = to.call{ value: msgValue }(new bytes(0)); + require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); + } +} diff --git a/hardhat.config.ts b/hardhat.config.ts new file mode 100644 index 000000000..095df546a --- /dev/null +++ b/hardhat.config.ts @@ -0,0 +1,80 @@ +import dotenv from "dotenv"; +import "@nomiclabs/hardhat-ethers"; +import "@nomiclabs/hardhat-waffle"; +import "hardhat-deploy"; +import "@nomiclabs/hardhat-etherscan"; +import "solidity-coverage"; +import "@typechain/hardhat"; +import { HardhatUserConfig } from "hardhat/types"; + +dotenv.config(); + +const config: HardhatUserConfig = { + solidity: { + compilers: [ + { + version: "0.8.15", + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + { + version: "0.6.6", + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + { + version: "0.5.16", + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + } + ] + }, + paths: { + artifacts: "build/artifacts", + cache: "build/cache", + deploy: "deploy", + sources: "contracts", + deployments: "deployments", + }, + defaultNetwork: "hardhat", + networks: { + ganache: { + url: "HTTP://127.0.0.1:7545", + }, + hardhat: { + blockGasLimit: 30000000, //default 30 000 000 + gasPrice: 1000000000, //10 Gwei + gas: 9000000, + chainId: 1, //set mainnet ID + }, + localhost: { + url: "http://localhost:8545", + gasPrice: 20000000000, //20 Gwei, + }, + }, + typechain: { + outDir: "typechain", + target: "ethers-v5", + }, + namedAccounts: { + deployer: 0, + account1: 1, + account2: 2, + }, + etherscan: { + apiKey: process.env.ETHERSCAN_KEY, + }, +}; +export default config; \ No newline at end of file diff --git a/package.json b/package.json index 68ffa0b6d..4fc4e71d4 100644 --- a/package.json +++ b/package.json @@ -10,35 +10,66 @@ "node": ">=10" }, "devDependencies": { - "@types/chai": "^4.2.6", - "@types/mocha": "^5.2.7", + "@nomiclabs/hardhat-ethers": "npm:hardhat-deploy-ethers", + "@nomiclabs/hardhat-etherscan": "^2.1.6", + "@nomiclabs/hardhat-waffle": "^2.0.1", + "@typechain/ethers-v5": "^7.0.1", + "@typechain/hardhat": "^2.1.2", + "@types/chai": "^4.2.14", + "@types/mocha": "^8.0.4", + "@types/mustache": "^4.1.2", + "@typescript-eslint/eslint-plugin": "^4.29.3", + "@typescript-eslint/parser": "^4.29.3", "arb-ethers-web3-bridge": "^0.7.3", - "chai": "^4.2.0", - "dotenv": "^8.2.0", - "ethereum-waffle": "^2.4.1", - "ethereumjs-util": "^6.2.0", - "ethers": "^4.0.45", + "babel-eslint": "^10.1.0", + "babel-polyfill": "^6.26.0", + "chai": "^4.3.4", + "eslint": "^7.32.0", + "ethereum-waffle": "^3.4.0", + "glob": "^7.1.7", + "glob-promise": "^4.2.0", + "hardhat": "^2.9.5", "mocha": "^6.2.2", - "prettier": "^1.19.1", + "prettier": "^2.3.2", + "prettier-plugin-solidity": "^1.0.0-beta.17", "rimraf": "^3.0.0", "solc": "0.5.16", + "solhint": "^3.3.6", + "solhint-plugin-prettier": "0.0.5", + "solidity-coverage": "^0.7.20", "truffle-flattener": "^1.4.4", "truffle-hdwallet-provider": "^1.0.17", - "ts-node": "^8.5.4" + "ts-node": "10.7.0", + "typechain": "^5.1.2", + "typescript": "^4.5.2", + "mathjs": "^10.6.1" + }, + "dependencies": { + "@metamask/eth-sig-util": "^4.0.0", + "@openzeppelin/contracts": "^4.2.0", + "apollo-fetch": "^0.7.0", + "aws-sdk": "^2.980.0", + "axios": "^0.21.1", + "babel-register": "^6.26.0", + "dotenv": "^10.0.0", + "ethereumjs-util": "^7.1.3", + "ethereumjs-wallet": "^1.0.2", + "ethers": "^5.4.6", + "glob-promise": "^4.2.0", + "hardhat-deploy": "^0.9.0", + "hardhat-deploy-ethers": "^0.3.0-beta.10", + "mustache": "^4.2.0", + "solidity-bytes-utils": "^0.8.0" }, "scripts": { "lint": "yarn prettier ./test/*.ts --check", "lint:fix": "yarn prettier ./test/*.ts --write", "clean": "rimraf ./build/", "precompile": "yarn clean", - "compile": "waffle .waffle.json", - "pretest": "yarn compile", - "test": "mocha", - + "compile": "hardhat compile", + "test": "hardhat compile && hardhat test", + "prepublishOnly": "yarn test", "flattener": "./scripts/flattener.sh" }, - "license": "AGPL-3.0-or-later", - "dependencies": { - "typescript": "^3.9.5" - } -} + "license": "AGPL-3.0-or-later" +} \ No newline at end of file diff --git a/test/DXswapDeployer.spec.ts b/test/DXswapDeployer.spec.ts index 87c3548f2..cc57ac2fb 100644 --- a/test/DXswapDeployer.spec.ts +++ b/test/DXswapDeployer.spec.ts @@ -1,131 +1,125 @@ -import chai, { expect } from 'chai' -import { Contract, utils } from 'ethers' -import { AddressZero } from 'ethers/constants' -import { BigNumber, bigNumberify, defaultAbiCoder } from 'ethers/utils' -import { solidity, MockProvider, deployContract } from 'ethereum-waffle' -import { getCreate2Address, expandTo18Decimals } from './shared/utilities' -import { factoryFixture } from './shared/fixtures' - -import ERC20 from '../build/ERC20.json' -import WETH9 from '../build/WETH9.json' -import DXswapDeployer from '../build/DXswapDeployer.json' -import DXswapFactory from '../build/DXswapFactory.json' -import DXswapPair from '../build/DXswapPair.json' - -chai.use(solidity) +import '@nomiclabs/hardhat-ethers' +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers' +import { expect } from 'chai' +import { ethers } from "hardhat"; +import { expandTo18Decimals } from './shared/utilities' +import { DXswapDeployer__factory, DXswapFactory__factory, DXswapPair__factory, ERC20, ERC20__factory, WETH9__factory } from './../typechain' +import { defaultAbiCoder } from 'ethers/lib/utils'; + +const overrides = { + gasLimit: 29999999 +} describe('DXswapDeployer', () => { - const provider = new MockProvider({ - hardfork: 'istanbul', - mnemonic: 'horn horn horn horn horn horn horn horn horn horn horn horn', - gasLimit: 12000000 + const provider = ethers.provider + + let token0: ERC20 + let token1: ERC20 + let token2: ERC20 + let dxdao: SignerWithAddress + let tokenOwner: SignerWithAddress + let protocolFeeReceiver: SignerWithAddress + let other: SignerWithAddress + + beforeEach('assign wallets', async function () { + const signers = await ethers.getSigners() + dxdao = signers[0] + tokenOwner = signers[1] + protocolFeeReceiver = signers[2] + other = signers[3] }) - const [dxdao, tokenOwner, protocolFeeReceiver, other] = provider.getWallets() - const overrides = { - gasLimit: 12000000 - } - - let dxSwapDeployer: Contract - let token0: Contract - let token1: Contract - let token2: Contract - const pairBytecode = "0x"+DXswapPair.bytecode - + it('Execute migration with intial pairs', async () => { - - // Deploy tokens 4 testing - token0 = await deployContract(tokenOwner, ERC20, [expandTo18Decimals(20000)], overrides) - token1 = await deployContract(tokenOwner, ERC20, [expandTo18Decimals(20000)], overrides) - token2 = await deployContract(tokenOwner, ERC20, [expandTo18Decimals(20000)], overrides) - const weth = await deployContract(tokenOwner, WETH9) - // Deploy DXswapDeployer - dxSwapDeployer = await deployContract( - dxdao, DXswapDeployer, [ - protocolFeeReceiver.address, - dxdao.address, - weth.address, - [token0.address, token0.address, token1.address], - [token1.address, token2.address, token2.address], - [10, 20, 30], - ], overrides - ) + // deploy tokens for testing + const tokenA = await new ERC20__factory(tokenOwner).deploy(expandTo18Decimals(20000)) + const tokenB = await new ERC20__factory(tokenOwner).deploy(expandTo18Decimals(20000)) + const tokenC = await new ERC20__factory(tokenOwner).deploy(expandTo18Decimals(20000)) + + const WETH = await new WETH9__factory(tokenOwner).deploy() + token0 = tokenA.address < tokenB.address ? tokenA : tokenB + token1 = token0.address === tokenA.address ? tokenB : tokenA + token2 = tokenC + + const dxSwapDeployer = await new DXswapDeployer__factory(tokenOwner).deploy(protocolFeeReceiver.address, dxdao.address, WETH.address, + [token0.address, token0.address, token1.address], + [token1.address, token2.address, token2.address], + [10, 20, 30], + overrides) + expect(await dxSwapDeployer.state()).to.eq(0) - + // Dont allow other address to approve deployment by sending eth - await expect(other.sendTransaction({to: dxSwapDeployer.address, gasPrice: 0, value: expandTo18Decimals(10000)})) + await expect(other.sendTransaction({ to: dxSwapDeployer.address, gasPrice: 20000000000, value: expandTo18Decimals(10) })) .to.be.revertedWith('DXswapDeployer: CALLER_NOT_FEE_TO_SETTER') - + // Dont allow deploy before being approved by sending ETH await expect(dxSwapDeployer.connect(other).deploy()) .to.be.revertedWith('DXswapDeployer: WRONG_DEPLOYER_STATE') // Send transaction with value from dxdao to approve deployment - await dxdao.sendTransaction({to: dxSwapDeployer.address, gasPrice: 0, value: expandTo18Decimals(10000)}) + await dxdao.sendTransaction({ to: dxSwapDeployer.address, gasPrice: 20000000000, value: expandTo18Decimals(10) }) expect(await dxSwapDeployer.state()).to.eq(1) - + // Dont allow sending more value - await expect(dxdao.sendTransaction({to: dxSwapDeployer.address, gasPrice: 0, value: expandTo18Decimals(10000)})) + await expect(dxdao.sendTransaction({ to: dxSwapDeployer.address, gasPrice: 20000000000, value: expandTo18Decimals(10) })) .to.be.revertedWith('DXswapDeployer: WRONG_DEPLOYER_STATE') - await expect(other.sendTransaction({to: dxSwapDeployer.address, gasPrice: 0, value: expandTo18Decimals(10000)})) + await expect(other.sendTransaction({ to: dxSwapDeployer.address, gasPrice: 20000000000, value: expandTo18Decimals(10) })) .to.be.revertedWith('DXswapDeployer: WRONG_DEPLOYER_STATE') // Execute deployment transaction const deployTx = await dxSwapDeployer.connect(other).deploy() expect(await dxSwapDeployer.state()).to.eq(2) const deployTxReceipt = await provider.getTransactionReceipt(deployTx.hash); - + // Dont allow sending more value - await expect(dxdao.sendTransaction({to: dxSwapDeployer.address, gasPrice: 0, value: expandTo18Decimals(10000)})) + await expect(dxdao.sendTransaction({ to: dxSwapDeployer.address, gasPrice: 20000000000, value: expandTo18Decimals(10) })) .to.be.revertedWith('DXswapDeployer: WRONG_DEPLOYER_STATE') - await expect(other.sendTransaction({to: dxSwapDeployer.address, gasPrice: 0, value: expandTo18Decimals(10000)})) + await expect(other.sendTransaction({ to: dxSwapDeployer.address, gasPrice: 20000000000, value: expandTo18Decimals(10) })) .to.be.revertedWith('DXswapDeployer: WRONG_DEPLOYER_STATE') - + // Dont allow running deployment again await expect(dxSwapDeployer.connect(other).deploy()).to.be.revertedWith('DXswapDeployer: WRONG_DEPLOYER_STATE') - + // Get addresses from events - const pairFactoryAddress = deployTxReceipt.logs != undefined + const pairFactoryAddress = deployTxReceipt.logs != undefined ? defaultAbiCoder.decode(['address'], deployTxReceipt.logs[0].data)[0] : null - const pair01Address = deployTxReceipt.logs != undefined + const pair01Address = deployTxReceipt.logs != undefined ? defaultAbiCoder.decode(['address'], deployTxReceipt.logs[2].data)[0] : null - const pair02Address = deployTxReceipt.logs != undefined + const pair02Address = deployTxReceipt.logs != undefined ? defaultAbiCoder.decode(['address'], deployTxReceipt.logs[4].data)[0] : null - const pair12Address = deployTxReceipt.logs != undefined + const pair12Address = deployTxReceipt.logs != undefined ? defaultAbiCoder.decode(['address'], deployTxReceipt.logs[6].data)[0] : null - const feeReceiverAddress = deployTxReceipt.logs != undefined + const feeReceiverAddress = deployTxReceipt.logs != undefined ? defaultAbiCoder.decode(['address'], deployTxReceipt.logs[7].data)[0] : null - const feeSetterAddress = deployTxReceipt.logs != undefined + const feeSetterAddress = deployTxReceipt.logs != undefined ? defaultAbiCoder.decode(['address'], deployTxReceipt.logs[8].data)[0] : null - - // Instantiate contracts - const pairFactory = new Contract(pairFactoryAddress, JSON.stringify(DXswapFactory.abi), provider); - const pair01 = new Contract( - getCreate2Address(pairFactory.address, [token0.address, token1.address], pairBytecode), - JSON.stringify(DXswapPair.abi), - provider - ); - const pair02 = new Contract( - getCreate2Address(pairFactory.address, [token0.address, token2.address], pairBytecode), - JSON.stringify(DXswapPair.abi), - provider - ); - const pair12 = new Contract( - getCreate2Address(pairFactory.address, [token1.address, token2.address], pairBytecode), - JSON.stringify(DXswapPair.abi), - provider - ); - + + // deploy DXswapFactory + const dxswapFactory = (await new DXswapFactory__factory(tokenOwner).deploy(dxdao.address)).attach(pairFactoryAddress) + // initialize DXswapPair factory + const pairFactory = await new DXswapPair__factory(tokenOwner).deploy() + + // create pairs + const addressPair01 = await dxswapFactory.getPair(token0.address, token1.address) + const pair01 = pairFactory.attach(addressPair01) + + const addressPair02 = await dxswapFactory.getPair(token0.address, token2.address) + const pair02 = pairFactory.attach(addressPair02) + + const addressPair12 = await dxswapFactory.getPair(token1.address, token2.address) + const pair12 = pairFactory.attach(addressPair12) + // Conpare onchain information to offchain predicted information - expect(await pairFactory.feeTo()).to.eq(feeReceiverAddress) - expect(await pairFactory.feeToSetter()).to.eq(feeSetterAddress) - expect(await pairFactory.protocolFeeDenominator()).to.eq(9) - expect(await pairFactory.allPairsLength()).to.eq(3) + expect(await dxswapFactory.feeTo()).to.eq(feeReceiverAddress) + expect(await dxswapFactory.feeToSetter()).to.eq(feeSetterAddress) + expect(await dxswapFactory.protocolFeeDenominator()).to.eq(9) + expect(await dxswapFactory.allPairsLength()).to.eq(3) expect(pair01.address).to.eq(pair01Address) expect(await pair01.swapFee()).to.eq(10) @@ -141,10 +135,10 @@ describe('DXswapDeployer', () => { expect(pair12.address).to.eq(pair12Address) expect(await pair12.swapFee()).to.eq(30) - expect(await pair12.token0()).to.eq(token2.address) - expect(await pair12.token1()).to.eq(token1.address) + expect(await pair12.token0()).to.eq(token1.address) + expect(await pair12.token1()).to.eq(token2.address) expect(await pair12.totalSupply()).to.eq(0) - + }) }) diff --git a/test/DXswapERC20.spec.ts b/test/DXswapERC20.spec.ts index c5fa45dce..a3de26576 100644 --- a/test/DXswapERC20.spec.ts +++ b/test/DXswapERC20.spec.ts @@ -1,40 +1,57 @@ -import chai, { expect } from 'chai' -import { Contract } from 'ethers' -import { MaxUint256 } from 'ethers/constants' -import { bigNumberify, hexlify, keccak256, defaultAbiCoder, toUtf8Bytes } from 'ethers/utils' -import { solidity, MockProvider, deployContract } from 'ethereum-waffle' -import { ecsign } from 'ethereumjs-util' - +import '@nomiclabs/hardhat-ethers' +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers' +import { expect } from 'chai' +import { ethers, network } from "hardhat"; +import { BigNumber, constants, Wallet } from 'ethers' import { expandTo18Decimals, getApprovalDigest } from './shared/utilities' +import { pairFixture } from './shared/fixtures' +import { ERC20 } from './../typechain' +import { defaultAbiCoder, hexlify, keccak256, toUtf8Bytes } from 'ethers/lib/utils'; +import { ecsign } from 'ethereumjs-util'; -import ERC20 from '../build/ERC20.json' +const { MaxUint256 } = constants -chai.use(solidity) +const overrides = { + gasLimit: 29999999 +} -const TOTAL_SUPPLY = expandTo18Decimals(10000) const TEST_AMOUNT = expandTo18Decimals(10) +const TOTAL_SUPPLY = expandTo18Decimals(10000) describe('DXswapERC20', () => { - const provider = new MockProvider({ - hardfork: 'istanbul', - mnemonic: 'horn horn horn horn horn horn horn horn horn horn horn horn', - gasLimit: 9999999 + const provider = ethers.provider + let dxdao: SignerWithAddress + let tokenOwner: SignerWithAddress + let ethReceiver: SignerWithAddress + let fallbackReceiver: SignerWithAddress + let other: SignerWithAddress + let DXS: ERC20 + let privateKey: string + let customWallet: Wallet + let customSigner: SignerWithAddress + + beforeEach('assign wallets', async function () { + const signers = await ethers.getSigners() + dxdao = signers[0] + tokenOwner = signers[1] + ethReceiver = signers[2] + fallbackReceiver = signers[3] + other = signers[4] }) - const [wallet, other] = provider.getWallets() - let token: Contract - beforeEach(async () => { - token = await deployContract(wallet, ERC20, [TOTAL_SUPPLY]) + beforeEach('deploy fixture', async () => { + const fixture = await pairFixture(provider, [dxdao, ethReceiver, fallbackReceiver]) + DXS = fixture.token0 }) it('name, symbol, decimals, totalSupply, balanceOf, DOMAIN_SEPARATOR, PERMIT_TYPEHASH', async () => { - const name = await token.name() + const name = await DXS.name() expect(name).to.eq('DXswap') - expect(await token.symbol()).to.eq('DXS') - expect(await token.decimals()).to.eq(18) - expect(await token.totalSupply()).to.eq(TOTAL_SUPPLY) - expect(await token.balanceOf(wallet.address)).to.eq(TOTAL_SUPPLY) - expect(await token.DOMAIN_SEPARATOR()).to.eq( + expect(await DXS.symbol()).to.eq('DXS') + expect(await DXS.decimals()).to.eq(18) + expect(await DXS.totalSupply()).to.eq(TOTAL_SUPPLY) + expect(await DXS.balanceOf(dxdao.address)).to.eq(TOTAL_SUPPLY) + expect(await DXS.DOMAIN_SEPARATOR()).to.eq( keccak256( defaultAbiCoder.encode( ['bytes32', 'bytes32', 'bytes32', 'uint256', 'address'], @@ -45,72 +62,88 @@ describe('DXswapERC20', () => { keccak256(toUtf8Bytes(name)), keccak256(toUtf8Bytes('1')), 1, - token.address + DXS.address ] ) ) ) - expect(await token.PERMIT_TYPEHASH()).to.eq( + expect(await DXS.PERMIT_TYPEHASH()).to.eq( keccak256(toUtf8Bytes('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)')) ) }) it('approve', async () => { - await expect(token.approve(other.address, TEST_AMOUNT)) - .to.emit(token, 'Approval') - .withArgs(wallet.address, other.address, TEST_AMOUNT) - expect(await token.allowance(wallet.address, other.address)).to.eq(TEST_AMOUNT) + await expect(DXS.approve(other.address, TEST_AMOUNT)) + .to.emit(DXS, 'Approval') + .withArgs(dxdao.address, other.address, TEST_AMOUNT) + expect(await DXS.allowance(dxdao.address, other.address)).to.eq(TEST_AMOUNT) }) it('transfer', async () => { - await expect(token.transfer(other.address, TEST_AMOUNT)) - .to.emit(token, 'Transfer') - .withArgs(wallet.address, other.address, TEST_AMOUNT) - expect(await token.balanceOf(wallet.address)).to.eq(TOTAL_SUPPLY.sub(TEST_AMOUNT)) - expect(await token.balanceOf(other.address)).to.eq(TEST_AMOUNT) + await expect(DXS.transfer(other.address, TEST_AMOUNT, overrides)) + .to.emit(DXS, 'Transfer') + .withArgs(dxdao.address, other.address, TEST_AMOUNT) + expect(await DXS.balanceOf(dxdao.address)).to.eq(TOTAL_SUPPLY.sub(TEST_AMOUNT)) + expect(await DXS.balanceOf(other.address)).to.eq(TEST_AMOUNT) }) it('transfer:fail', async () => { - await expect(token.transfer(other.address, TOTAL_SUPPLY.add(1))).to.be.reverted // ds-math-sub-underflow - await expect(token.connect(other).transfer(wallet.address, 1)).to.be.reverted // ds-math-sub-underflow + await expect(DXS.transfer(other.address, TOTAL_SUPPLY.add(1))).to.be.reverted // ds-math-sub-underflow + await expect(DXS.connect(other).transfer(dxdao.address, 1)).to.be.reverted // ds-math-sub-underflow }) it('transferFrom', async () => { - await token.approve(other.address, TEST_AMOUNT) - await expect(token.connect(other).transferFrom(wallet.address, other.address, TEST_AMOUNT)) - .to.emit(token, 'Transfer') - .withArgs(wallet.address, other.address, TEST_AMOUNT) - expect(await token.allowance(wallet.address, other.address)).to.eq(0) - expect(await token.balanceOf(wallet.address)).to.eq(TOTAL_SUPPLY.sub(TEST_AMOUNT)) - expect(await token.balanceOf(other.address)).to.eq(TEST_AMOUNT) + await DXS.approve(other.address, TEST_AMOUNT, overrides) + await expect(DXS.connect(other).transferFrom(dxdao.address, other.address, TEST_AMOUNT, overrides)) + .to.emit(DXS, 'Transfer') + .withArgs(dxdao.address, other.address, TEST_AMOUNT) + expect(await DXS.allowance(dxdao.address, other.address)).to.eq(0) + expect(await DXS.balanceOf(dxdao.address)).to.eq(TOTAL_SUPPLY.sub(TEST_AMOUNT)) + expect(await DXS.balanceOf(other.address)).to.eq(TEST_AMOUNT) }) it('transferFrom:max', async () => { - await token.approve(other.address, MaxUint256) - await expect(token.connect(other).transferFrom(wallet.address, other.address, TEST_AMOUNT)) - .to.emit(token, 'Transfer') - .withArgs(wallet.address, other.address, TEST_AMOUNT) - expect(await token.allowance(wallet.address, other.address)).to.eq(MaxUint256) - expect(await token.balanceOf(wallet.address)).to.eq(TOTAL_SUPPLY.sub(TEST_AMOUNT)) - expect(await token.balanceOf(other.address)).to.eq(TEST_AMOUNT) + await DXS.approve(other.address, MaxUint256, overrides) + await expect(DXS.connect(other).transferFrom(dxdao.address, other.address, TEST_AMOUNT, overrides)) + .to.emit(DXS, 'Transfer') + .withArgs(dxdao.address, other.address, TEST_AMOUNT) + expect(await DXS.allowance(dxdao.address, other.address)).to.eq(MaxUint256) + expect(await DXS.balanceOf(dxdao.address)).to.eq(TOTAL_SUPPLY.sub(TEST_AMOUNT)) + expect(await DXS.balanceOf(other.address)).to.eq(TEST_AMOUNT) }) it('permit', async () => { - const nonce = await token.nonces(wallet.address) + // custom wallet needs to be create due to private key + customWallet = ethers.Wallet.createRandom().connect(ethers.provider); + privateKey = customWallet.privateKey + + // add wallet to hardhat accounts + await network.provider.request({ + method: "hardhat_impersonateAccount", + params: [customWallet.address] + }) + + customSigner = await ethers.getSigner(customWallet.address) + await dxdao.sendTransaction({ + value: expandTo18Decimals(500), + to: customSigner.address, + }); + + const nonce = await DXS.nonces(customSigner.address) const deadline = MaxUint256 const digest = await getApprovalDigest( - token, - { owner: wallet.address, spender: other.address, value: TEST_AMOUNT }, + DXS, + { owner: customSigner.address, spender: other.address, value: TEST_AMOUNT }, nonce, deadline ) - const { v, r, s } = ecsign(Buffer.from(digest.slice(2), 'hex'), Buffer.from(wallet.privateKey.slice(2), 'hex')) + const { v, r, s } = ecsign(Buffer.from(digest.slice(2), 'hex'), Buffer.from(privateKey.slice(2), 'hex')) - await expect(token.permit(wallet.address, other.address, TEST_AMOUNT, deadline, v, hexlify(r), hexlify(s))) - .to.emit(token, 'Approval') - .withArgs(wallet.address, other.address, TEST_AMOUNT) - expect(await token.allowance(wallet.address, other.address)).to.eq(TEST_AMOUNT) - expect(await token.nonces(wallet.address)).to.eq(bigNumberify(1)) + await expect(DXS.permit(customSigner.address, other.address, TEST_AMOUNT, deadline, v, hexlify(r), hexlify(s))) + .to.emit(DXS, 'Approval') + .withArgs(customSigner.address, other.address, TEST_AMOUNT) + expect(await DXS.allowance(customSigner.address, other.address)).to.eq(TEST_AMOUNT) + expect(await DXS.nonces(customSigner.address)).to.eq(BigNumber.from(1)) }) }) diff --git a/test/DXswapFactory.spec.ts b/test/DXswapFactory.spec.ts index 44a2840d8..c1435e75c 100644 --- a/test/DXswapFactory.spec.ts +++ b/test/DXswapFactory.spec.ts @@ -1,64 +1,79 @@ -import chai, { expect } from 'chai' -import { Contract } from 'ethers' -import { AddressZero } from 'ethers/constants' -import { bigNumberify } from 'ethers/utils' -import { solidity, MockProvider, createFixtureLoader } from 'ethereum-waffle' - -import { getCreate2Address } from './shared/utilities' +import '@nomiclabs/hardhat-ethers' +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers' +import { expect } from 'chai' +import { ethers } from "hardhat"; +import { BigNumber, constants } from 'ethers' import { factoryFixture } from './shared/fixtures' +import { DXswapFactory, DXswapFeeSetter, DXswapPair__factory } from './../typechain' +import { bytecode as dxSwapPairBytecode } from '../build/artifacts/contracts/DXswapPair.sol/DXswapPair.json' +import { getCreate2Address } from './shared/utilities'; -import DXswapPair from '../build/DXswapPair.json' -chai.use(solidity) +const { AddressZero } = constants const TEST_ADDRESSES: [string, string] = [ '0x1000000000000000000000000000000000000000', '0x2000000000000000000000000000000000000000' ] +const overrides = { + gasLimit: 9999999 +} + describe('DXswapFactory', () => { - const provider = new MockProvider({ - hardfork: 'istanbul', - mnemonic: 'horn horn horn horn horn horn horn horn horn horn horn horn', - gasLimit: 9999999 + const provider = ethers.provider + let dxdao: SignerWithAddress + let tokenOwner: SignerWithAddress + let ethReceiver: SignerWithAddress + let fallbackReceiver: SignerWithAddress + let other: SignerWithAddress + let randomTestFeeSetter: SignerWithAddress + let factory: DXswapFactory + let feeSetter: DXswapFeeSetter + + beforeEach('assign wallets', async function () { + const signers = await ethers.getSigners() + dxdao = signers[0] + tokenOwner = signers[1] + ethReceiver = signers[2] + fallbackReceiver = signers[3] + other = signers[4] + randomTestFeeSetter = signers[5] }) - const [wallet, protocolFeeReceiver, other] = provider.getWallets() - const loadFixture = createFixtureLoader(provider, [wallet, protocolFeeReceiver, other]) - - let factory: Contract - let feeSetter: Contract - beforeEach(async () => { - const fixture = await loadFixture(factoryFixture) - factory = fixture.factory + + beforeEach('deploy fixture', async () => { + const fixture = await factoryFixture(provider, [dxdao, ethReceiver, fallbackReceiver]) + factory = fixture.dxswapFactory feeSetter = fixture.feeSetter - - // Set feeToSetter to wallet.address to test the factory methdos from an ETH account - await feeSetter.setFeeTo(AddressZero); - await feeSetter.setFeeToSetter(wallet.address); + + // Set feeToSetter to dxdao.address to test the factory methdos from an ETH account + await feeSetter.setFeeTo(AddressZero, overrides); + await feeSetter.setFeeToSetter(randomTestFeeSetter.address); }) it('feeTo, feeToSetter, allPairsLength, INIT_CODE_PAIR_HASH', async () => { expect(await factory.feeTo()).to.eq(AddressZero) - expect(await factory.feeToSetter()).to.eq(wallet.address) + expect(await factory.feeToSetter()).to.eq(randomTestFeeSetter.address) expect(await factory.allPairsLength()).to.eq(0) expect(await factory.INIT_CODE_PAIR_HASH()).to.eq('0xd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776') }) async function createPair(tokens: [string, string]) { - const bytecode = "0x"+DXswapPair.bytecode + const bytecode = dxSwapPairBytecode const create2Address = getCreate2Address(factory.address, tokens, bytecode) - await expect(factory.createPair(...tokens)) + await expect(factory.createPair(...tokens, overrides)) .to.emit(factory, 'PairCreated') - .withArgs(TEST_ADDRESSES[0], TEST_ADDRESSES[1], create2Address, bigNumberify(1)) + .withArgs(TEST_ADDRESSES[0], TEST_ADDRESSES[1], create2Address, BigNumber.from(1)) + const [tokenA, tokenB] = tokens.slice().reverse() await expect(factory.createPair(...tokens)).to.be.reverted // DXswap: PAIR_EXISTS - await expect(factory.createPair(...tokens.slice().reverse())).to.be.reverted // DXswap: PAIR_EXISTS + await expect(factory.createPair(tokenA, tokenB)).to.be.reverted // DXswap: PAIR_EXISTS expect(await factory.getPair(...tokens)).to.eq(create2Address) - expect(await factory.getPair(...tokens.slice().reverse())).to.eq(create2Address) + expect(await factory.getPair(tokenA, tokenB)).to.eq(create2Address) expect(await factory.allPairs(0)).to.eq(create2Address) expect(await factory.allPairsLength()).to.eq(1) - const pair = new Contract(create2Address, JSON.stringify(DXswapPair.abi), provider) + const pair = (await new DXswapPair__factory(dxdao).deploy()).attach(create2Address) expect(await pair.factory()).to.eq(factory.address) expect(await pair.token0()).to.eq(TEST_ADDRESSES[0]) expect(await pair.token1()).to.eq(TEST_ADDRESSES[1]) @@ -73,21 +88,21 @@ describe('DXswapFactory', () => { }) it('createPair:gas', async () => { - const tx = await factory.createPair(...TEST_ADDRESSES) + const tx = await factory.createPair(...TEST_ADDRESSES, overrides) const receipt = await tx.wait() - expect(receipt.gasUsed).to.eq(2136142) + expect(receipt.gasUsed).to.eq(2147442) }) it('setFeeTo', async () => { - await expect(factory.connect(other).setFeeTo(other.address)).to.be.revertedWith('DXswapFactory: FORBIDDEN') - await factory.setFeeTo(wallet.address) - expect(await factory.feeTo()).to.eq(wallet.address) + await expect(factory.connect(other).setFeeTo(other.address, overrides)).to.be.revertedWith('DXswapFactory: FORBIDDEN') + await factory.connect(randomTestFeeSetter).setFeeTo(dxdao.address, overrides) + expect(await factory.feeTo()).to.eq(dxdao.address) }) it('setFeeToSetter', async () => { - await expect(factory.connect(other).setFeeToSetter(other.address)).to.be.revertedWith('DXswapFactory: FORBIDDEN') - await factory.setFeeToSetter(other.address) + await expect(factory.connect(other).setFeeToSetter(other.address, overrides)).to.be.revertedWith('DXswapFactory: FORBIDDEN') + await factory.connect(randomTestFeeSetter).setFeeToSetter(other.address, overrides) expect(await factory.feeToSetter()).to.eq(other.address) - await expect(factory.setFeeToSetter(wallet.address)).to.be.revertedWith('DXswapFactory: FORBIDDEN') + await expect(factory.setFeeToSetter(dxdao.address)).to.be.revertedWith('DXswapFactory: FORBIDDEN') }) }) diff --git a/test/DXswapFeeReceiver.spec.ts b/test/DXswapFeeReceiver.spec.ts index 05eb4cc23..72eb3c30d 100644 --- a/test/DXswapFeeReceiver.spec.ts +++ b/test/DXswapFeeReceiver.spec.ts @@ -1,204 +1,181 @@ -import chai, { expect } from 'chai' -import { Contract } from 'ethers' -import { AddressZero } from 'ethers/constants' -import { BigNumber, bigNumberify } from 'ethers/utils' -import { solidity, MockProvider, createFixtureLoader, deployContract } from 'ethereum-waffle' - -import { expandTo18Decimals, getCreate2Address } from './shared/utilities' +import '@nomiclabs/hardhat-ethers' +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers' +import { expect } from 'chai' +import { ethers } from "hardhat"; +import { BigNumber } from 'ethers' import { pairFixture } from './shared/fixtures' +import { DXswapFactory, DXswapFeeReceiver, DXswapPair, ERC20, WETH9 } from './../typechain' +import { calcProtocolFee, expandTo18Decimals } from './shared/utilities'; -import DXswapPair from '../build/DXswapPair.json' -import ERC20 from '../build/ERC20.json' -import DXswapFeeReceiver from '../build/DXswapFeeReceiver.json' - -const FEE_DENOMINATOR = bigNumberify(10).pow(4) -const ROUND_EXCEPTION = bigNumberify(10).pow(4) - -chai.use(solidity) +const FEE_DENOMINATOR = BigNumber.from(10).pow(4) +const ROUND_EXCEPTION = BigNumber.from(10).pow(4) -const TEST_ADDRESSES: [string, string] = [ - '0x1000000000000000000000000000000000000000', - '0x2000000000000000000000000000000000000000' -] +const overrides = { + gasLimit: 9999999 +} describe('DXswapFeeReceiver', () => { - const provider = new MockProvider({ - hardfork: 'istanbul', - mnemonic: 'horn horn horn horn horn horn horn horn horn horn horn horn', - gasLimit: 9999999 + const provider = ethers.provider + let dxdao: SignerWithAddress + let tokenOwner: SignerWithAddress + let protocolFeeReceiver: SignerWithAddress + let fallbackReceiver: SignerWithAddress + let other: SignerWithAddress + let factory: DXswapFactory + let feeReceiver: DXswapFeeReceiver + + let token0: ERC20 + let token1: ERC20 + let token2: ERC20 + let token3: ERC20 + let pair01: DXswapPair + let pair23: DXswapPair + let pair03: DXswapPair + let wethPair: DXswapPair + let WETH: WETH9 + + beforeEach('assign signers', async function () { + const signers = await ethers.getSigners() + dxdao = signers[0] + tokenOwner = signers[1] + protocolFeeReceiver = signers[2] + fallbackReceiver = signers[3] + other = signers[4] }) - const overrides = { - gasLimit: 9999999 - } - const [dxdao, wallet, protocolFeeReceiver, other] = provider.getWallets() - const loadFixture = createFixtureLoader(provider, [dxdao, wallet, protocolFeeReceiver]) - - async function getAmountOut(pair: Contract, tokenIn: string, amountIn: BigNumber) { - const [ reserve0, reserve1 ] = await pair.getReserves() + + beforeEach('deploy fixture', async () => { + const fixture = await pairFixture(provider, [dxdao, protocolFeeReceiver, fallbackReceiver]) + factory = fixture.dxswapFactory + feeReceiver = fixture.feeReceiver + token0 = fixture.token0 + token1 = fixture.token1 + token2 = fixture.token2 + token3 = fixture.token3 + pair01 = fixture.dxswapPair01 + pair23 = fixture.dxswapPair23 + pair03 = fixture.dxswapPair03 + wethPair = fixture.wethToken1Pair + WETH = fixture.WETH + }) + + async function getAmountOut(pair: DXswapPair, tokenIn: string, amountIn: BigNumber) { + const [reserve0, reserve1] = await pair.getReserves() const token0 = await pair.token0() - return getAmountOutSync(reserve0, reserve1, token0 === tokenIn, amountIn, await pair.swapFee()) + const swapFee = BigNumber.from(await pair.swapFee()) + return getAmountOutSync(reserve0, reserve1, token0 === tokenIn, amountIn, swapFee) } - + function getAmountOutSync( reserve0: BigNumber, reserve1: BigNumber, usingToken0: boolean, amountIn: BigNumber, swapFee: BigNumber ) { const tokenInBalance = usingToken0 ? reserve0 : reserve1 - const tokenOutBalance = usingToken0? reserve1 : reserve0 + const tokenOutBalance = usingToken0 ? reserve1 : reserve0 const amountInWithFee = amountIn.mul(FEE_DENOMINATOR.sub(swapFee)) return amountInWithFee.mul(tokenOutBalance) .div(tokenInBalance.mul(FEE_DENOMINATOR).add(amountInWithFee)) } - - // Calculate how much will be payed from liquidity as protocol fee in the next mint/burn - async function calcProtocolFee(pair: Contract) { - const [token0Reserve, token1Reserve, _] = await pair.getReserves() - const kLast = await pair.kLast() - const feeTo = await factory.feeTo() - const protocolFeeDenominator = await factory.protocolFeeDenominator() - const totalSupply = await pair.totalSupply() - let rootK, rootKLast; - if (feeTo != AddressZero) { - // Check for math overflow when dealing with big big balances - if (Math.sqrt((token0Reserve).mul(token1Reserve)) > Math.pow(10, 19)) { - const denominator = 10 ** ( Number(Math.log10(Math.sqrt((token0Reserve).mul(token1Reserve))).toFixed(0)) - 18); - rootK = bigNumberify((Math.sqrt( - token0Reserve.mul(token1Reserve) - ) / denominator).toString()) - rootKLast = bigNumberify((Math.sqrt(kLast) / denominator).toString()) - } else { - rootK = bigNumberify(Math.sqrt((token0Reserve).mul(token1Reserve)).toString()) - rootKLast = bigNumberify(Math.sqrt(kLast).toString()) - } - - return (totalSupply.mul(rootK.sub(rootKLast))) - .div(rootK.mul(protocolFeeDenominator).add(rootKLast)) - } else { - return bigNumberify(0) - } - } - - let factory: Contract - let token0: Contract - let token1: Contract - let pair: Contract - let wethPair: Contract - let WETH: Contract - let feeSetter: Contract - let feeReceiver: Contract - beforeEach(async () => { - const fixture = await loadFixture(pairFixture) - factory = fixture.factory - token0 = fixture.token0 - token1 = fixture.token1 - pair = fixture.pair - wethPair = fixture.wethPair - WETH = fixture.WETH - feeSetter = fixture.feeSetter - feeReceiver = fixture.feeReceiver - }) - + // Where token0-token1 and token1-WETH pairs exist it( 'should receive token0 to fallbackreceiver and ETH to ethReceiver when extracting fee from token0-token1', - async () => - { - const tokenAmount = expandTo18Decimals(100); - const wethAmount = expandTo18Decimals(100); - const amountIn = expandTo18Decimals(10); - - await token0.transfer(pair.address, tokenAmount) - await token1.transfer(pair.address, tokenAmount) - await pair.mint(wallet.address, overrides) - - await token1.transfer(wethPair.address, tokenAmount) - await WETH.transfer(wethPair.address, wethAmount) - await wethPair.mint(wallet.address, overrides) - - let amountOut = await getAmountOut(pair, token0.address, amountIn); - - await token0.transfer(pair.address, amountIn) - await pair.swap(0, amountOut, wallet.address, '0x', overrides) - - amountOut = await getAmountOut(pair, token1.address, amountIn); - await token1.transfer(pair.address, amountIn) - await pair.swap(amountOut, 0, wallet.address, '0x', overrides) - - const protocolFeeToReceive = await calcProtocolFee(pair); - - await token0.transfer(pair.address, expandTo18Decimals(10)) - await token1.transfer(pair.address, expandTo18Decimals(10)) - await pair.mint(wallet.address, overrides) - - const protocolFeeLPToknesReceived = await pair.balanceOf(feeReceiver.address); - expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - const token0FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token0.balanceOf(pair.address)).div(await pair.totalSupply()); - const token1FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token1.balanceOf(pair.address)).div(await pair.totalSupply()); - - const wethFromToken1FromProtocolFee = await getAmountOut(wethPair, token1.address, token1FromProtocolFee); + async () => { + const tokenAmount = expandTo18Decimals(100); + const wethAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(10); - const protocolFeeReceiverBalanceBeforeTake = await provider.getBalance(protocolFeeReceiver.address) + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) - await feeReceiver.connect(wallet).takeProtocolFee([pair.address], overrides) + await token1.transfer(wethPair.address, tokenAmount) + await WETH.transfer(wethPair.address, wethAmount) + await wethPair.mint(dxdao.address, overrides) - expect(await token0.balanceOf(feeReceiver.address)).to.eq(0) - expect(await token1.balanceOf(feeReceiver.address)).to.eq(0) - expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) - expect(await pair.balanceOf(feeReceiver.address)).to.eq(0) - expect(await provider.getBalance(feeReceiver.address)).to.eq(0) - - expect((await provider.getBalance(protocolFeeReceiver.address))) - .to.be.eq(protocolFeeReceiverBalanceBeforeTake.add(wethFromToken1FromProtocolFee)) - expect((await token0.balanceOf(dxdao.address))) - .to.be.eq(token0FromProtocolFee) - }) + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x') + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x') + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeReceiver.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); + + const wethFromToken1FromProtocolFee = await getAmountOut(wethPair, token1.address, token1FromProtocolFee); + const protocolFeeReceiverBalanceBeforeTake = await provider.getBalance(protocolFeeReceiver.address) + + await feeReceiver.connect(dxdao).takeProtocolFee([pair01.address], overrides) + + expect(await token0.balanceOf(feeReceiver.address)).to.eq(0) + expect(await token1.balanceOf(feeReceiver.address)).to.eq(0) + expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) + expect(await pair01.balanceOf(feeReceiver.address)).to.eq(0) + expect(await provider.getBalance(feeReceiver.address)).to.eq(0) + + expect(await token0.balanceOf(fallbackReceiver.address)) + .to.be.eq(token0FromProtocolFee) + expect(await provider.getBalance(protocolFeeReceiver.address)) + .to.be.eq(protocolFeeReceiverBalanceBeforeTake.add(wethFromToken1FromProtocolFee)) + }) it('should receive everything in ETH from one WETH-token1 pair', async () => { - - const tokenAmount = expandTo18Decimals(100); - const wethAmount = expandTo18Decimals(100); - const amountIn = expandTo18Decimals(50); - - await token1.transfer(wethPair.address, tokenAmount) - await WETH.transfer(wethPair.address, wethAmount) - await wethPair.mint(wallet.address, overrides) - + const tokenAmount = expandTo18Decimals(40); + const wethAmount = expandTo18Decimals(40); + const amountIn = expandTo18Decimals(20); + + await token1.transfer(wethPair.address, tokenAmount, overrides) + await WETH.transfer(wethPair.address, wethAmount, overrides) + await wethPair.mint(dxdao.address, overrides) + const token1IsFirstToken = (token1.address < WETH.address) - + let amountOut = await getAmountOut(wethPair, token1.address, amountIn); - await token1.transfer(wethPair.address, amountIn) + await token1.transfer(wethPair.address, amountIn, overrides) await wethPair.swap( token1IsFirstToken ? 0 : amountOut, token1IsFirstToken ? amountOut : 0, - wallet.address, '0x', overrides + dxdao.address, '0x', overrides ) amountOut = await getAmountOut(wethPair, WETH.address, amountIn); - await WETH.transfer(wethPair.address, amountIn) + await WETH.transfer(wethPair.address, amountIn, overrides) await wethPair.swap( token1IsFirstToken ? amountOut : 0, token1IsFirstToken ? 0 : amountOut, - wallet.address, '0x', overrides + dxdao.address, '0x', overrides ) - const protocolFeeToReceive = await calcProtocolFee(wethPair); + const protocolFeeToReceive = await calcProtocolFee(wethPair, factory); + + await token1.transfer(wethPair.address, expandTo18Decimals(10), overrides) + await WETH.transfer(wethPair.address, expandTo18Decimals(10), overrides) + await wethPair.mint(dxdao.address, overrides) - await token1.transfer(wethPair.address, expandTo18Decimals(10)) - await WETH.transfer(wethPair.address, expandTo18Decimals(10)) - await wethPair.mint(wallet.address, overrides) - const protocolFeeLPToknesReceived = await wethPair.balanceOf(feeReceiver.address); expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + const token1FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token1.balanceOf(wethPair.address)).div(await wethPair.totalSupply()); + .mul(await token1.balanceOf(wethPair.address)).div(await wethPair.totalSupply()); const wethFromProtocolFee = protocolFeeLPToknesReceived .mul(await WETH.balanceOf(wethPair.address)).div(await wethPair.totalSupply()); - + + + const swapFee = BigNumber.from(await wethPair.swapFee()) const token1ReserveBeforeSwap = (await token1.balanceOf(wethPair.address)).sub(token1FromProtocolFee) const wethReserveBeforeSwap = (await WETH.balanceOf(wethPair.address)).sub(wethFromProtocolFee) const wethFromToken1FromProtocolFee = await getAmountOutSync( @@ -206,285 +183,292 @@ describe('DXswapFeeReceiver', () => { token1IsFirstToken ? wethReserveBeforeSwap : token1ReserveBeforeSwap, token1IsFirstToken, token1FromProtocolFee, - await wethPair.swapFee() + swapFee ); - + const protocolFeeReceiverBalanceBeforeTake = await provider.getBalance(protocolFeeReceiver.address) - await feeReceiver.connect(wallet).takeProtocolFee([wethPair.address], overrides) + await feeReceiver.connect(dxdao).takeProtocolFee([wethPair.address], overrides) expect(await token1.balanceOf(feeReceiver.address)).to.eq(0) expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) expect(await wethPair.balanceOf(feeReceiver.address)).to.eq(0) expect(await provider.getBalance(feeReceiver.address)).to.eq(0) - expect(await token1.balanceOf(dxdao.address)).to.be.eq(0) + expect((await provider.getBalance(protocolFeeReceiver.address))) .to.be.eq(protocolFeeReceiverBalanceBeforeTake.add(wethFromToken1FromProtocolFee).add(wethFromProtocolFee)) }) - + it( 'should receive only tokens when extracting fee from tokenA-tokenB pair that has no path to WETH', - async () => - { - const tokenA = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) - const tokenB = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) - - const tokenAmount = expandTo18Decimals(100); - const amountIn = expandTo18Decimals(50); - - await factory.createPair(tokenA.address, tokenB.address); - const tokenATokenBPair = new Contract( - await factory.getPair( - (tokenA.address < tokenB.address) ? tokenA.address : tokenB.address, - (tokenA.address < tokenB.address) ? tokenB.address : tokenA.address - ), JSON.stringify(DXswapPair.abi), provider - ).connect(wallet) - - await tokenA.transfer(tokenATokenBPair.address, tokenAmount) - await tokenB.transfer(tokenATokenBPair.address, tokenAmount) - await tokenATokenBPair.mint(wallet.address, overrides) - - let amountOut = await getAmountOut(tokenATokenBPair, tokenA.address, amountIn); - await tokenA.transfer(tokenATokenBPair.address, amountIn) - await tokenATokenBPair.swap( - (tokenA.address < tokenB.address) ? 0 : amountOut, - (tokenA.address < tokenB.address) ? amountOut : 0, - wallet.address, '0x', overrides - ) - - amountOut = await getAmountOut(tokenATokenBPair, tokenB.address, amountIn); - await tokenB.transfer(tokenATokenBPair.address, amountIn) - await tokenATokenBPair.swap( - (tokenA.address < tokenB.address) ? amountOut : 0, - (tokenA.address < tokenB.address) ? 0 : amountOut, - wallet.address, '0x', overrides - ) - - const protocolFeeToReceive = await calcProtocolFee(tokenATokenBPair); - - await tokenA.transfer(tokenATokenBPair.address, expandTo18Decimals(10)) - await tokenB.transfer(tokenATokenBPair.address, expandTo18Decimals(10)) - await tokenATokenBPair.mint(wallet.address, overrides) - - const protocolFeeLPTokenAtokenBPair = await tokenATokenBPair.balanceOf(feeReceiver.address); - expect(protocolFeeLPTokenAtokenBPair.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - const tokenAFromProtocolFee = protocolFeeLPTokenAtokenBPair - .mul(await tokenA.balanceOf(tokenATokenBPair.address)).div(await tokenATokenBPair.totalSupply()); - const tokenBFromProtocolFee = protocolFeeLPTokenAtokenBPair - .mul(await tokenB.balanceOf(tokenATokenBPair.address)).div(await tokenATokenBPair.totalSupply()); + async () => { + const tokenAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(50); + + await token2.transfer(pair23.address, tokenAmount) + await token3.transfer(pair23.address, tokenAmount) + await pair23.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair23, token2.address, amountIn); + await token2.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? 0 : amountOut, + (token2.address < token3.address) ? amountOut : 0, + dxdao.address, '0x', overrides + ) + + amountOut = await getAmountOut(pair23, token3.address, amountIn); + await token3.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? amountOut : 0, + (token2.address < token3.address) ? 0 : amountOut, + dxdao.address, '0x', overrides + ) + + const protocolFeeToReceive = await calcProtocolFee(pair23, factory); + + await token2.transfer(pair23.address, expandTo18Decimals(10)) + await token3.transfer(pair23.address, expandTo18Decimals(10)) + await pair23.mint(dxdao.address, overrides) + + const protocolFeeLPpair23 = await pair23.balanceOf(feeReceiver.address); + expect(protocolFeeLPpair23.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token2FromProtocolFee = protocolFeeLPpair23 + .mul(await token2.balanceOf(pair23.address)).div(await pair23.totalSupply()); + const token3FromProtocolFee = protocolFeeLPpair23 + .mul(await token3.balanceOf(pair23.address)).div(await pair23.totalSupply()); + + const protocolFeeReceiverBalance = await provider.getBalance(protocolFeeReceiver.address) + + await feeReceiver.connect(dxdao).takeProtocolFee([pair23.address], overrides) + + expect(await token2.balanceOf(feeReceiver.address)).to.eq(0) + expect(await token3.balanceOf(feeReceiver.address)).to.eq(0) + expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) + expect(await pair23.balanceOf(feeReceiver.address)).to.eq(0) + expect(await provider.getBalance(feeReceiver.address)).to.eq(0) + + expect((await token2.balanceOf(fallbackReceiver.address))) + .to.be.eq((token2FromProtocolFee)) + expect((await token3.balanceOf(fallbackReceiver.address))) + .to.be.eq((token3FromProtocolFee)) + expect((await provider.getBalance(protocolFeeReceiver.address))) + .to.be.eq(protocolFeeReceiverBalance) + }) - const protocolFeeReceiverBalance = await provider.getBalance(protocolFeeReceiver.address) + it( + 'should receive only tokens when extracting fee from both tokenA-tonkenB pair and tokenC-tokenD pair', + async () => { + const tokenAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(50); + + await token2.transfer(pair23.address, tokenAmount) + await token3.transfer(pair23.address, tokenAmount) + await pair23.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair23, token2.address, amountIn); + await token2.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? 0 : amountOut, + (token2.address < token3.address) ? amountOut : 0, + dxdao.address, '0x', overrides + ) + + amountOut = await getAmountOut(pair23, token3.address, amountIn); + await token3.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? amountOut : 0, + (token2.address < token3.address) ? 0 : amountOut, + dxdao.address, '0x', overrides + ) + + let protocolFeeToReceive = await calcProtocolFee(pair23, factory); + + await token2.transfer(pair23.address, expandTo18Decimals(10)) + await token3.transfer(pair23.address, expandTo18Decimals(10)) + await pair23.mint(dxdao.address, overrides) + + const protocolFeeLPpair23 = await pair23.balanceOf(feeReceiver.address); + expect(protocolFeeLPpair23.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + await token0.transfer(pair03.address, tokenAmount) + await token3.transfer(pair03.address, tokenAmount) + await pair03.mint(dxdao.address, overrides) + + amountOut = await getAmountOut(pair03, token0.address, amountIn); + await token0.transfer(pair03.address, amountIn) + await pair03.swap( + (token0.address < token3.address) ? 0 : amountOut, + (token0.address < token3.address) ? amountOut : 0, + dxdao.address, '0x', overrides + ) + + amountOut = await getAmountOut(pair03, token3.address, amountIn); + await token3.transfer(pair03.address, amountIn) + await pair03.swap( + (token0.address < token3.address) ? amountOut : 0, + (token0.address < token3.address) ? 0 : amountOut, + dxdao.address, '0x', overrides + ) + + protocolFeeToReceive = await calcProtocolFee(pair03, factory); + + await token0.transfer(pair03.address, expandTo18Decimals(10)) + await token3.transfer(pair03.address, expandTo18Decimals(10)) + await pair03.mint(dxdao.address, overrides) + + const protocolFeeLPPair03 = await pair03.balanceOf(feeReceiver.address); + expect(protocolFeeLPPair03.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token2FromPair23 = protocolFeeLPpair23 + .mul(await token2.balanceOf(pair23.address)).div(await pair23.totalSupply()); + const token3FromPair23 = protocolFeeLPpair23 + .mul(await token3.balanceOf(pair23.address)).div(await pair23.totalSupply()); + const token0FromPair03 = protocolFeeLPPair03 + .mul(await token0.balanceOf(pair03.address)).div(await pair03.totalSupply()); + const token3FromPair03 = protocolFeeLPPair03 + .mul(await token3.balanceOf(pair03.address)).div(await pair03.totalSupply()); + + const protocolFeeReceiverBalance = await provider.getBalance(protocolFeeReceiver.address) + + await feeReceiver.connect(dxdao).takeProtocolFee([pair23.address, pair03.address], overrides) + + expect(await provider.getBalance(protocolFeeReceiver.address)).to.eq(protocolFeeReceiverBalance.toString()) + + expect(await token2.balanceOf(feeReceiver.address)).to.eq(0) + expect(await token3.balanceOf(feeReceiver.address)).to.eq(0) + expect(await token0.balanceOf(feeReceiver.address)).to.eq(0) + expect(await token3.balanceOf(feeReceiver.address)).to.eq(0) + expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) + expect(await pair01.balanceOf(feeReceiver.address)).to.eq(0) + expect(await provider.getBalance(feeReceiver.address)).to.eq(0) + + expect((await provider.getBalance(protocolFeeReceiver.address))) + .to.be.eq(protocolFeeReceiverBalance) + expect((await token0.balanceOf(fallbackReceiver.address))) + .to.be.eq(token0FromPair03) + expect((await token2.balanceOf(fallbackReceiver.address))) + .to.be.eq(token2FromPair23) + expect((await token3.balanceOf(fallbackReceiver.address))) + .to.be.eq(token3FromPair23.add(token3FromPair03)) + }) - await feeReceiver.connect(wallet).takeProtocolFee([tokenATokenBPair.address], overrides) + it( + 'should only allow owner to transfer ownership', + async () => { + await expect(feeReceiver.connect(other).transferOwnership(other.address, overrides)) + .to.be.revertedWith('DXswapFeeReceiver: FORBIDDEN') + await feeReceiver.connect(dxdao).transferOwnership(tokenOwner.address, overrides); + expect(await feeReceiver.owner()).to.be.eq(tokenOwner.address) + }) - expect(await tokenA.balanceOf(feeReceiver.address)).to.eq(0) - expect(await tokenB.balanceOf(feeReceiver.address)).to.eq(0) - expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) - expect(await tokenATokenBPair.balanceOf(feeReceiver.address)).to.eq(0) - expect(await provider.getBalance(feeReceiver.address)).to.eq(0) - - expect((await provider.getBalance(protocolFeeReceiver.address))) - .to.be.eq(protocolFeeReceiverBalance) - expect((await tokenA.balanceOf(dxdao.address))) - .to.be.eq(tokenAFromProtocolFee) - expect((await tokenB.balanceOf(dxdao.address))) - .to.be.eq(tokenBFromProtocolFee) - }) - it( - 'should receive only tokens when extracting fee from both tokenA-tonkenB pair and tokenC-tokenD pair', - async () => - { - const tokenAmount = expandTo18Decimals(100); - const amountIn = expandTo18Decimals(50); - - // Set up tokenA-tokenB - const tokenA = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) - const tokenB = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) - - await factory.createPair(tokenA.address, tokenB.address); - const tokenATokenBPair = new Contract( - await factory.getPair( - (tokenA.address < tokenB.address) ? tokenA.address : tokenB.address, - (tokenA.address < tokenB.address) ? tokenB.address : tokenA.address - ), JSON.stringify(DXswapPair.abi), provider - ).connect(wallet) - - await tokenA.transfer(tokenATokenBPair.address, tokenAmount) - await tokenB.transfer(tokenATokenBPair.address, tokenAmount) - await tokenATokenBPair.mint(wallet.address, overrides) - - let amountOut = await getAmountOut(tokenATokenBPair, tokenA.address, amountIn); - await tokenA.transfer(tokenATokenBPair.address, amountIn) - await tokenATokenBPair.swap( - (tokenA.address < tokenB.address) ? 0 : amountOut, - (tokenA.address < tokenB.address) ? amountOut : 0, - wallet.address, '0x', overrides - ) + 'should only allow owner to change receivers', + async () => { + await expect(feeReceiver.connect(other).changeReceivers(other.address, other.address, overrides)) + .to.be.revertedWith('DXswapFeeReceiver: FORBIDDEN') + await feeReceiver.connect(dxdao).changeReceivers(other.address, other.address, overrides); + expect(await feeReceiver.ethReceiver()).to.be.eq(other.address) + expect(await feeReceiver.fallbackReceiver()).to.be.eq(other.address) + }) - amountOut = await getAmountOut(tokenATokenBPair, tokenB.address, amountIn); - await tokenB.transfer(tokenATokenBPair.address, amountIn) - await tokenATokenBPair.swap( - (tokenA.address < tokenB.address) ? amountOut : 0, - (tokenA.address < tokenB.address) ? 0 : amountOut, - wallet.address, '0x', overrides - ) - - let protocolFeeToReceive = await calcProtocolFee(tokenATokenBPair); - - await tokenA.transfer(tokenATokenBPair.address, expandTo18Decimals(10)) - await tokenB.transfer(tokenATokenBPair.address, expandTo18Decimals(10)) - await tokenATokenBPair.mint(wallet.address, overrides) - - const protocolFeeLPTokenAtokenBPair = await tokenATokenBPair.balanceOf(feeReceiver.address); - expect(protocolFeeLPTokenAtokenBPair.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + it('should send tokens if there is not any liquidity in the WETH pair', async () => { + const tokenAmount = expandTo18Decimals(100) + const wethAmount = expandTo18Decimals(100) + const amountIn = expandTo18Decimals(50) - // Set up tokenC-tokenD pair - const tokenC = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) - const tokenD = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) - - await factory.createPair(tokenC.address, tokenD.address); - const tokenCTokenDPair = new Contract( - await factory.getPair( - (tokenC.address < tokenD.address) ? tokenC.address : tokenD.address, - (tokenC.address < tokenD.address) ? tokenD.address : tokenC.address - ), JSON.stringify(DXswapPair.abi), provider - ).connect(wallet) - - await tokenC.transfer(tokenCTokenDPair.address, tokenAmount) - await tokenD.transfer(tokenCTokenDPair.address, tokenAmount) - await tokenCTokenDPair.mint(wallet.address, overrides) - - amountOut = await getAmountOut(tokenCTokenDPair, tokenC.address, amountIn); - await tokenC.transfer(tokenCTokenDPair.address, amountIn) - await tokenCTokenDPair.swap( - (tokenC.address < tokenD.address) ? 0 : amountOut, - (tokenC.address < tokenD.address) ? amountOut : 0, - wallet.address, '0x', overrides - ) + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) - amountOut = await getAmountOut(tokenCTokenDPair, tokenD.address, amountIn); - await tokenD.transfer(tokenCTokenDPair.address, amountIn) - await tokenCTokenDPair.swap( - (tokenC.address < tokenD.address) ? amountOut : 0, - (tokenC.address < tokenD.address) ? 0 : amountOut, - wallet.address, '0x', overrides - ) - - protocolFeeToReceive = await calcProtocolFee(tokenCTokenDPair); - - await tokenC.transfer(tokenCTokenDPair.address, expandTo18Decimals(10)) - await tokenD.transfer(tokenCTokenDPair.address, expandTo18Decimals(10)) - await tokenCTokenDPair.mint(wallet.address, overrides) - - const protocolFeeLPTokenCtokenDPair = await tokenCTokenDPair.balanceOf(feeReceiver.address); - expect(protocolFeeLPTokenCtokenDPair.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - const tokenAFromProtocolFee = protocolFeeLPTokenAtokenBPair - .mul(await tokenA.balanceOf(tokenATokenBPair.address)).div(await tokenATokenBPair.totalSupply()); - const tokenBFromProtocolFee = protocolFeeLPTokenAtokenBPair - .mul(await tokenB.balanceOf(tokenATokenBPair.address)).div(await tokenATokenBPair.totalSupply()); - const tokenCFromProtocolFee = protocolFeeLPTokenCtokenDPair - .mul(await tokenC.balanceOf(tokenCTokenDPair.address)).div(await tokenCTokenDPair.totalSupply()); - const tokenDFromProtocolFee = protocolFeeLPTokenCtokenDPair - .mul(await tokenD.balanceOf(tokenCTokenDPair.address)).div(await tokenCTokenDPair.totalSupply()); + let amountOut = await getAmountOut(pair01, token0.address, amountIn) + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) - const protocolFeeReceiverBalance = await provider.getBalance(protocolFeeReceiver.address) + amountOut = await getAmountOut(pair01, token1.address, amountIn) + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) - await feeReceiver.connect(wallet).takeProtocolFee([tokenATokenBPair.address, tokenCTokenDPair.address], overrides) + const protocolFeeToReceive = await calcProtocolFee(pair01, factory) - expect(await provider.getBalance(protocolFeeReceiver.address)).to.eq(protocolFeeReceiverBalance.toString()) + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) - expect(await tokenA.balanceOf(feeReceiver.address)).to.eq(0) - expect(await tokenB.balanceOf(feeReceiver.address)).to.eq(0) - expect(await tokenC.balanceOf(feeReceiver.address)).to.eq(0) - expect(await tokenD.balanceOf(feeReceiver.address)).to.eq(0) - expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) - expect(await pair.balanceOf(feeReceiver.address)).to.eq(0) - expect(await provider.getBalance(feeReceiver.address)).to.eq(0) - - expect((await provider.getBalance(protocolFeeReceiver.address))) - .to.be.eq(protocolFeeReceiverBalance) - expect((await tokenA.balanceOf(dxdao.address))) - .to.be.eq(tokenAFromProtocolFee) - expect((await tokenB.balanceOf(dxdao.address))) - .to.be.eq(tokenBFromProtocolFee) - expect((await tokenC.balanceOf(dxdao.address))) - .to.be.eq(tokenCFromProtocolFee) - expect((await tokenD.balanceOf(dxdao.address))) - .to.be.eq(tokenDFromProtocolFee) - }) + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeReceiver.address) + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)).to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - it( - 'should only allow owner to transfer ownership', - async () => - { - await expect(feeReceiver.connect(other).transferOwnership(other.address)) - .to.be.revertedWith('DXswapFeeReceiver: FORBIDDEN') - await feeReceiver.connect(dxdao).transferOwnership(other.address); - expect(await feeReceiver.owner()).to.be.eq(other.address) - }) + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)) + .div(await pair01.totalSupply()) + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)) + .div(await pair01.totalSupply()) - it( - 'should only allow owner to change receivers', - async () => - { - await expect(feeReceiver.connect(other).changeReceivers(other.address, other.address)) - .to.be.revertedWith('DXswapFeeReceiver: FORBIDDEN') - await feeReceiver.connect(dxdao).changeReceivers(other.address, other.address); - expect(await feeReceiver.ethReceiver()).to.be.eq(other.address) - expect(await feeReceiver.fallbackReceiver()).to.be.eq(other.address) - }) - it( - 'should revert with insufficient liquidity error if there is not any liquidity in the WETH pair', - async () => - { - const tokenAmount = expandTo18Decimals(100); - const wethAmount = expandTo18Decimals(100); - const amountIn = expandTo18Decimals(50); - - await token0.transfer(pair.address, tokenAmount) - await token1.transfer(pair.address, tokenAmount) - await pair.mint(wallet.address, overrides) - - let amountOut = await getAmountOut(pair, token0.address, amountIn); - await token0.transfer(pair.address, amountIn) - await pair.swap(0, amountOut, wallet.address, '0x', overrides) - - amountOut = await getAmountOut(pair, token1.address, amountIn); - await token1.transfer(pair.address, amountIn) - await pair.swap(amountOut, 0, wallet.address, '0x', overrides) - - const protocolFeeToReceive = await calcProtocolFee(pair); - - await token0.transfer(pair.address, expandTo18Decimals(10)) - await token1.transfer(pair.address, expandTo18Decimals(10)) - await pair.mint(wallet.address, overrides) - - const protocolFeeLPToknesReceived = await pair.balanceOf(feeReceiver.address); - expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - const protocolFeeReceiverBalance = await provider.getBalance(protocolFeeReceiver.address) - await expect(feeReceiver.connect(wallet).takeProtocolFee([pair.address], overrides)).to.be.revertedWith('DXswapFeeReceiver: INSUFFICIENT_LIQUIDITY') + feeReceiver.connect(dxdao).takeProtocolFee([pair01.address], overrides) - expect(await pair.balanceOf(feeReceiver.address)).to.eq(protocolFeeLPToknesReceived) + expect(await pair01.balanceOf(feeReceiver.address)).to.eq(0) expect(await token0.balanceOf(feeReceiver.address)).to.eq(0) expect(await token1.balanceOf(feeReceiver.address)).to.eq(0) expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) expect(await provider.getBalance(feeReceiver.address)).to.eq(0) - - expect((await provider.getBalance(protocolFeeReceiver.address))) - .to.be.eq(protocolFeeReceiverBalance) - expect((await token0.balanceOf(dxdao.address))) - .to.be.eq(0) - expect((await token1.balanceOf(dxdao.address))) - .to.be.eq(0) + + expect(await provider.getBalance(protocolFeeReceiver.address)).to.be.eq(protocolFeeReceiverBalance) + expect(await token0.balanceOf(fallbackReceiver.address)).to.be.eq(token0FromProtocolFee) + expect(await token1.balanceOf(fallbackReceiver.address)).to.be.eq(token1FromProtocolFee) }) + + it( + 'should revert with insufficient liquidity error if there is not any liquidity in the WETH pair', + async () => { + const tokenAmount = expandTo18Decimals(100); + const wethAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(50); + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeReceiver.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const protocolFeeReceiverBalance = await provider.getBalance(protocolFeeReceiver.address) + + await expect(feeReceiver.connect(dxdao).takeProtocolFee([pair01.address], overrides)).to.be.revertedWith('DXswapFeeReceiver: INSUFFICIENT_LIQUIDITY') + + expect(await pair01.balanceOf(feeReceiver.address)).to.eq(protocolFeeLPToknesReceived) + expect(await token0.balanceOf(feeReceiver.address)).to.eq(0) + expect(await token1.balanceOf(feeReceiver.address)).to.eq(0) + expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) + expect(await provider.getBalance(feeReceiver.address)).to.eq(0) + + expect((await provider.getBalance(protocolFeeReceiver.address))) + .to.be.eq(protocolFeeReceiverBalance) + expect((await token0.balanceOf(fallbackReceiver.address))) + .to.be.eq(0) + expect((await token1.balanceOf(fallbackReceiver.address))) + .to.be.eq(0) + }) }) diff --git a/test/DXswapFeeSetter.spec.ts b/test/DXswapFeeSetter.spec.ts index 4ca390acd..649d20f1f 100644 --- a/test/DXswapFeeSetter.spec.ts +++ b/test/DXswapFeeSetter.spec.ts @@ -1,45 +1,45 @@ -import chai, { expect } from 'chai' -import { Contract } from 'ethers' -import { AddressZero } from 'ethers/constants' -import { bigNumberify } from 'ethers/utils' -import { solidity, MockProvider, createFixtureLoader, deployContract } from 'ethereum-waffle' - -import { getCreate2Address } from './shared/utilities' +import '@nomiclabs/hardhat-ethers' +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers' +import { expect } from 'chai' +import { ethers } from "hardhat"; +import { constants } from 'ethers' import { pairFixture } from './shared/fixtures' +import { DXswapFactory, DXswapFeeReceiver, DXswapFeeSetter, DXswapPair, ERC20, WETH9 } from './../typechain' -import DXswapPair from '../build/DXswapPair.json' -import DXswapFeeSetter from '../build/DXswapFeeSetter.json' - -chai.use(solidity) +const { AddressZero } = constants -const TEST_ADDRESSES: [string, string] = [ - '0x1000000000000000000000000000000000000000', - '0x2000000000000000000000000000000000000000' -] +const overrides = { + gasLimit: 9999999 +} describe('DXswapFeeSetter', () => { - const provider = new MockProvider({ - hardfork: 'istanbul', - mnemonic: 'horn horn horn horn horn horn horn horn horn horn horn horn', - gasLimit: 9999999 + const provider = ethers.provider + let dxdao: SignerWithAddress + let tokenOwner: SignerWithAddress + let fallbackReceiver: SignerWithAddress + let protocolFeeReceiver: SignerWithAddress + let other: SignerWithAddress + let factory: DXswapFactory + let feeSetter: DXswapFeeSetter + let feeReceiver: DXswapFeeReceiver + + let pair: DXswapPair + + beforeEach('assign dxdaos', async function () { + const signers = await ethers.getSigners() + dxdao = signers[0] + tokenOwner = signers[1] + protocolFeeReceiver = signers[2] + fallbackReceiver = signers[3] + other = signers[4] }) - const [dxdao, pairOwner, protocolFeeReceiver, other] = provider.getWallets() - const loadFixture = createFixtureLoader(provider, [dxdao, other, protocolFeeReceiver]) - - let factory: Contract - let token0: Contract - let token1: Contract - let pair: Contract - let feeSetter: Contract - let feeReceiver: Contract - beforeEach(async () => { - const fixture = await loadFixture(pairFixture) - factory = fixture.factory - token0 = fixture.token0 - token1 = fixture.token1 - pair = fixture.pair + + beforeEach('deploy fixture', async () => { + const fixture = await pairFixture(provider, [dxdao, protocolFeeReceiver, fallbackReceiver]) + factory = fixture.dxswapFactory feeSetter = fixture.feeSetter feeReceiver = fixture.feeReceiver + pair = fixture.dxswapPair01 }) it('feeToSetter', async () => { @@ -57,43 +57,43 @@ describe('DXswapFeeSetter', () => { await feeSetter.connect(dxdao).setFeeToSetter(other.address) await expect(feeSetter.connect(dxdao).setFeeTo(dxdao.address)).to.be.revertedWith('DXswapFactory: FORBIDDEN') }) - + it('setProtocolFee', async () => { // Should not allow to setProtocolFee from other address taht is not owner calling feeSetter await expect(feeSetter.connect(other).setProtocolFee(5)).to.be.revertedWith('DXswapFeeSetter: FORBIDDEN') await feeSetter.connect(dxdao).setProtocolFee(5) expect(await factory.protocolFeeDenominator()).to.eq(5) - + // If feeToSetter changes it will will fail in DXswapFactory check when trying to setProtocolFee from FeeSetter. await feeSetter.connect(dxdao).setFeeToSetter(other.address) await expect(feeSetter.connect(dxdao).setProtocolFee(5)).to.be.revertedWith('DXswapFactory: FORBIDDEN') }) - + it('setSwapFee', async () => { // Should not allow to setSwapFee from other address taht is not owner calling feeSetter await expect(feeSetter.connect(other).setSwapFee(pair.address, 5)).to.be.revertedWith('DXswapFeeSetter: FORBIDDEN') await feeSetter.connect(dxdao).setSwapFee(pair.address, 5) expect(await pair.swapFee()).to.eq(5) - + // If ownership of the pair is given to other address both addresses (FeeSetter owner and Pair owner) should be // able to change the swap fee - await expect(feeSetter.connect(pairOwner).setSwapFee(pair.address, 5)).to.be.revertedWith('DXswapFeeSetter: FORBIDDEN') - await feeSetter.connect(dxdao).transferPairOwnership(pair.address, pairOwner.address) - await feeSetter.connect(pairOwner).setSwapFee(pair.address, 3) + await expect(feeSetter.connect(tokenOwner).setSwapFee(pair.address, 5)).to.be.revertedWith('DXswapFeeSetter: FORBIDDEN') + await feeSetter.connect(dxdao).transferPairOwnership(pair.address, tokenOwner.address) + await feeSetter.connect(tokenOwner).setSwapFee(pair.address, 3) expect(await pair.swapFee()).to.eq(3) await feeSetter.connect(dxdao).setSwapFee(pair.address, 7) expect(await pair.swapFee()).to.eq(7) - + // If ownership of the pair is removed by setting it to zero the pair owner should not be able to change the // fee anymore. await feeSetter.connect(dxdao).transferPairOwnership(pair.address, AddressZero) - await expect(feeSetter.connect(pairOwner).setSwapFee(pair.address, 5)).to.be.revertedWith('DXswapFeeSetter: FORBIDDEN') + await expect(feeSetter.connect(tokenOwner).setSwapFee(pair.address, 5)).to.be.revertedWith('DXswapFeeSetter: FORBIDDEN') // If feeToSetter changes it will will fail in DXswapFactory check when trying to setSwapFee from FeeSetter. await feeSetter.connect(dxdao).setFeeToSetter(other.address) await expect(feeSetter.connect(dxdao).setSwapFee(pair.address, 5)).to.be.revertedWith('DXswapFactory: FORBIDDEN') }) - + it('setFeeToSetter', async () => { // Should not allow to setFeeToSetter from other address taht is not owner calling feeSetter await expect(feeSetter.connect(other).setFeeToSetter(other.address)).to.be.revertedWith('DXswapFeeSetter: FORBIDDEN') diff --git a/test/DXswapFeeSplitter.spec.ts b/test/DXswapFeeSplitter.spec.ts new file mode 100644 index 000000000..107131fe0 --- /dev/null +++ b/test/DXswapFeeSplitter.spec.ts @@ -0,0 +1,1524 @@ +import '@nomiclabs/hardhat-ethers' +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers' +import { expect } from 'chai' +import { ethers } from "hardhat"; +import { BigNumber } from 'ethers' +import { pairFixture } from './shared/fixtures' +import { DXswapFactory, DXswapFeeSetter, DXswapFeeSplitter, DXswapPair, ERC20, WETH9 } from '../typechain' +import { calcProtocolFee, expandTo18Decimals } from './shared/utilities'; + +const FEE_DENOMINATOR = BigNumber.from(10).pow(4) +const ROUND_EXCEPTION = BigNumber.from(10).pow(4) + +const overrides = { + gasLimit: 9999999 +} + +describe('DXswapFeeSplitter', () => { + const provider = ethers.provider + let dxdao: SignerWithAddress + let tokenOwner: SignerWithAddress + let protocolfeeSplitter: SignerWithAddress + let fallbackReceiver: SignerWithAddress + let externalfeeSplitter: SignerWithAddress + let other: SignerWithAddress + let factory: DXswapFactory + let feeSplitter: DXswapFeeSplitter + let feeSetter: DXswapFeeSetter + + let token0: ERC20 + let token1: ERC20 + let token2: ERC20 + let token3: ERC20 + let pair01: DXswapPair + let pair23: DXswapPair + let pair03: DXswapPair + let wethToken0Pair: DXswapPair + let wethToken1Pair: DXswapPair + let WETH: WETH9 + + beforeEach('assign signers', async function () { + const signers = await ethers.getSigners() + dxdao = signers[0] + tokenOwner = signers[1] + protocolfeeSplitter = signers[2] + fallbackReceiver = signers[3] + other = signers[4] + externalfeeSplitter = signers[5] + }) + + beforeEach('deploy fixture', async () => { + const fixture = await pairFixture(provider, [dxdao, protocolfeeSplitter, fallbackReceiver]) + factory = fixture.dxswapFactory + feeSplitter = fixture.feeSplitter + feeSetter = fixture.feeSetter + token0 = fixture.token0 + token1 = fixture.token1 + token2 = fixture.token2 + token3 = fixture.token3 + pair01 = fixture.dxswapPair01 + pair23 = fixture.dxswapPair23 + pair03 = fixture.dxswapPair03 + WETH = fixture.WETH + wethToken0Pair = fixture.wethToken0Pair + wethToken1Pair = fixture.wethToken1Pair + }) + + beforeEach('set fee to', async function () { + await feeSetter.connect(dxdao).setFeeTo(feeSplitter.address, overrides); + }) + + async function getAmountOut(pair01: DXswapPair, tokenIn: string, amountIn: BigNumber) { + const [reserve0, reserve1] = await pair01.getReserves() + const token0 = await pair01.token0() + const swapFee = BigNumber.from(await pair01.swapFee()) + return getAmountOutSync(reserve0, reserve1, token0 === tokenIn, amountIn, swapFee) + } + + function getAmountOutSync( + reserve0: BigNumber, reserve1: BigNumber, usingToken0: boolean, amountIn: BigNumber, swapFee: BigNumber + ) { + const tokenInBalance = usingToken0 ? reserve0 : reserve1 + const tokenOutBalance = usingToken0 ? reserve1 : reserve0 + const amountInWithFee = amountIn.mul(FEE_DENOMINATOR.sub(swapFee)) + return amountInWithFee.mul(tokenOutBalance) + .div(tokenInBalance.mul(FEE_DENOMINATOR).add(amountInWithFee)) + } + describe('external receiver off', async () => { + it('feeTo, feeToSetter, allPairsLength, INIT_CODE_PAIR_HASH', async () => { + expect(await factory.feeTo()).to.eq(feeSplitter.address) + expect(await factory.feeToSetter()).to.eq(feeSetter.address) + expect(await factory.INIT_CODE_PAIR_HASH()).to.eq('0x9e43bdf627764c4a3e3e452d1b558fff8466adc4dc8a900396801d26f4c542f2') + }) + + it( + 'should only allow owner to set max price impact', + async () => { + await expect(feeSplitter.connect(other).setMaxSwapPriceImpact(500)) + .to.be.revertedWith('DXswapFeeSplitter: CALLER_NOT_OWNER') + await feeSplitter.connect(dxdao).setMaxSwapPriceImpact(500); + expect(await feeSplitter.maxSwapPriceImpact()).to.be.eq(500) + }) + + it( + 'should set max price impact within the range 0 - 10000', + async () => { + expect(await feeSplitter.maxSwapPriceImpact()).to.be.eq(100) + await expect(feeSplitter.connect(dxdao).setMaxSwapPriceImpact(0)) + .to.be.revertedWith('DXswapFeeSplitter: FORBIDDEN_PRICE_IMPACT') + await expect(feeSplitter.connect(dxdao).setMaxSwapPriceImpact(10000)) + .to.be.revertedWith('DXswapFeeSplitter: FORBIDDEN_PRICE_IMPACT') + await feeSplitter.connect(dxdao).setMaxSwapPriceImpact(500); + expect(await feeSplitter.maxSwapPriceImpact()).to.be.eq(500) + }) + + // Where token0-token1 and token1-WETH pairs exist + it( + 'should receive token0 to fallbackreceiver and ETH to ethReceiver when extracting fee from token0-token1', + async () => { + const tokenAmount = expandTo18Decimals(100); + const wethAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(10); + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x') + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x') + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); + + const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) + + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect(await token0.balanceOf(fallbackReceiver.address)) + .to.be.eq(token0FromProtocolFee) + expect(await provider.getBalance(protocolfeeSplitter.address)) + .to.be.eq(protocolfeeSplitterBalanceBeforeTake.add(wethFromToken1FromProtocolFee)) + }) + + it('should receive everything in ETH from one WETH-token1 pair', async () => { + const tokenAmount = expandTo18Decimals(40); + const wethAmount = expandTo18Decimals(40); + const amountIn = expandTo18Decimals(20); + + await token1.transfer(wethToken1Pair.address, tokenAmount, overrides) + await WETH.transfer(wethToken1Pair.address, wethAmount, overrides) + await wethToken1Pair.mint(dxdao.address, overrides) + + const token1IsFirstToken = (token1.address < WETH.address) + + let amountOut = await getAmountOut(wethToken1Pair, token1.address, amountIn); + await token1.transfer(wethToken1Pair.address, amountIn, overrides) + await wethToken1Pair.swap( + token1IsFirstToken ? 0 : amountOut, + token1IsFirstToken ? amountOut : 0, + dxdao.address, '0x', overrides + ) + + amountOut = await getAmountOut(wethToken1Pair, WETH.address, amountIn); + await WETH.transfer(wethToken1Pair.address, amountIn, overrides) + await wethToken1Pair.swap( + token1IsFirstToken ? amountOut : 0, + token1IsFirstToken ? 0 : amountOut, + dxdao.address, '0x', overrides + ) + + const protocolFeeToReceive = await calcProtocolFee(wethToken1Pair, factory); + + await token1.transfer(wethToken1Pair.address, expandTo18Decimals(10), overrides) + await WETH.transfer(wethToken1Pair.address, expandTo18Decimals(10), overrides) + await wethToken1Pair.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await wethToken1Pair.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(wethToken1Pair.address)).div(await wethToken1Pair.totalSupply()); + const wethFromProtocolFee = protocolFeeLPToknesReceived + .mul(await WETH.balanceOf(wethToken1Pair.address)).div(await wethToken1Pair.totalSupply()); + + const swapFee = BigNumber.from(await wethToken1Pair.swapFee()) + const token1ReserveBeforeSwap = (await token1.balanceOf(wethToken1Pair.address)).sub(token1FromProtocolFee) + const wethReserveBeforeSwap = (await WETH.balanceOf(wethToken1Pair.address)).sub(wethFromProtocolFee) + const wethFromToken1FromProtocolFee = await getAmountOutSync( + token1IsFirstToken ? token1ReserveBeforeSwap : wethReserveBeforeSwap, + token1IsFirstToken ? wethReserveBeforeSwap : token1ReserveBeforeSwap, + token1IsFirstToken, + token1FromProtocolFee, + swapFee + ); + + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([wethToken1Pair.address], overrides) + + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await wethToken1Pair.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalanceBeforeTake.add(wethFromToken1FromProtocolFee).add(wethFromProtocolFee)) + }) + + it( + 'should receive only tokens when extracting fee from tokenA-tokenB pair that has no path to WETH', + async () => { + const tokenAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(50); + + await token2.transfer(pair23.address, tokenAmount) + await token3.transfer(pair23.address, tokenAmount) + await pair23.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair23, token2.address, amountIn); + await token2.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? 0 : amountOut, + (token2.address < token3.address) ? amountOut : 0, + dxdao.address, '0x', overrides + ) + + amountOut = await getAmountOut(pair23, token3.address, amountIn); + await token3.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? amountOut : 0, + (token2.address < token3.address) ? 0 : amountOut, + dxdao.address, '0x', overrides + ) + + const protocolFeeToReceive = await calcProtocolFee(pair23, factory); + + await token2.transfer(pair23.address, expandTo18Decimals(10)) + await token3.transfer(pair23.address, expandTo18Decimals(10)) + await pair23.mint(dxdao.address, overrides) + + const protocolFeeLPpair23 = await pair23.balanceOf(feeSplitter.address); + expect(protocolFeeLPpair23.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token2FromProtocolFee = protocolFeeLPpair23 + .mul(await token2.balanceOf(pair23.address)).div(await pair23.totalSupply()); + const token3FromProtocolFee = protocolFeeLPpair23 + .mul(await token3.balanceOf(pair23.address)).div(await pair23.totalSupply()); + + const protocolfeeSplitterBalance = await provider.getBalance(protocolfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair23.address], overrides) + + expect(await token2.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token3.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair23.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await token2.balanceOf(fallbackReceiver.address))) + .to.be.eq((token2FromProtocolFee)) + expect((await token3.balanceOf(fallbackReceiver.address))) + .to.be.eq((token3FromProtocolFee)) + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalance) + }) + + it( + 'should receive only tokens when extracting fee from both tokenA-tonkenB pair and tokenC-tokenD pair', + async () => { + const tokenAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(50); + + await token2.transfer(pair23.address, tokenAmount) + await token3.transfer(pair23.address, tokenAmount) + await pair23.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair23, token2.address, amountIn); + await token2.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? 0 : amountOut, + (token2.address < token3.address) ? amountOut : 0, + dxdao.address, '0x', overrides + ) + + amountOut = await getAmountOut(pair23, token3.address, amountIn); + await token3.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? amountOut : 0, + (token2.address < token3.address) ? 0 : amountOut, + dxdao.address, '0x', overrides + ) + + let protocolFeeToReceive = await calcProtocolFee(pair23, factory); + + await token2.transfer(pair23.address, expandTo18Decimals(10)) + await token3.transfer(pair23.address, expandTo18Decimals(10)) + await pair23.mint(dxdao.address, overrides) + + const protocolFeeLPpair23 = await pair23.balanceOf(feeSplitter.address); + expect(protocolFeeLPpair23.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + await token0.transfer(pair03.address, tokenAmount) + await token3.transfer(pair03.address, tokenAmount) + await pair03.mint(dxdao.address, overrides) + + amountOut = await getAmountOut(pair03, token0.address, amountIn); + await token0.transfer(pair03.address, amountIn) + await pair03.swap( + (token0.address < token3.address) ? 0 : amountOut, + (token0.address < token3.address) ? amountOut : 0, + dxdao.address, '0x', overrides + ) + + amountOut = await getAmountOut(pair03, token3.address, amountIn); + await token3.transfer(pair03.address, amountIn) + await pair03.swap( + (token0.address < token3.address) ? amountOut : 0, + (token0.address < token3.address) ? 0 : amountOut, + dxdao.address, '0x', overrides + ) + + protocolFeeToReceive = await calcProtocolFee(pair03, factory); + + await token0.transfer(pair03.address, expandTo18Decimals(10)) + await token3.transfer(pair03.address, expandTo18Decimals(10)) + await pair03.mint(dxdao.address, overrides) + + const protocolFeeLPPair03 = await pair03.balanceOf(feeSplitter.address); + expect(protocolFeeLPPair03.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token2FromPair23 = protocolFeeLPpair23 + .mul(await token2.balanceOf(pair23.address)).div(await pair23.totalSupply()); + const token3FromPair23 = protocolFeeLPpair23 + .mul(await token3.balanceOf(pair23.address)).div(await pair23.totalSupply()); + const token0FromPair03 = protocolFeeLPPair03 + .mul(await token0.balanceOf(pair03.address)).div(await pair03.totalSupply()); + const token3FromPair03 = protocolFeeLPPair03 + .mul(await token3.balanceOf(pair03.address)).div(await pair03.totalSupply()); + + const protocolfeeSplitterBalance = await provider.getBalance(protocolfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair23.address, pair03.address], overrides) + + expect(await provider.getBalance(protocolfeeSplitter.address)).to.eq(protocolfeeSplitterBalance.toString()) + + expect(await token2.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token3.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token3.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalance) + expect((await token0.balanceOf(fallbackReceiver.address))) + .to.be.eq(token0FromPair03) + expect((await token2.balanceOf(fallbackReceiver.address))) + .to.be.eq(token2FromPair23) + expect((await token3.balanceOf(fallbackReceiver.address))) + .to.be.eq(token3FromPair23.add(token3FromPair03)) + }) + + it( + 'should only allow owner to transfer ownership', + async () => { + await expect(feeSplitter.connect(other).transferOwnership(other.address, overrides)) + .to.be.revertedWith('DXswapFeeSplitter: FORBIDDEN') + await feeSplitter.connect(dxdao).transferOwnership(tokenOwner.address, overrides); + expect(await feeSplitter.owner()).to.be.eq(tokenOwner.address) + }) + + it( + 'should only allow owner to change receivers', + async () => { + await expect(feeSplitter.connect(other).changeReceivers(other.address, other.address, overrides)) + .to.be.revertedWith('DXswapFeeSplitter: FORBIDDEN') + await feeSplitter.connect(dxdao).changeReceivers(other.address, other.address, overrides); + expect(await feeSplitter.ethReceiver()).to.be.eq(other.address) + expect(await feeSplitter.fallbackReceiver()).to.be.eq(other.address) + }) + + it('should send tokens if there is not any liquidity in the WETH pair', async () => { + const tokenAmount = expandTo18Decimals(100) + const amountIn = expandTo18Decimals(50) + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn) + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn) + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory) + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address) + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)).to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)) + .div(await pair01.totalSupply()) + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)) + .div(await pair01.totalSupply()) + + const protocolfeeSplitterBalance = await provider.getBalance(protocolfeeSplitter.address) + + feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect(await provider.getBalance(protocolfeeSplitter.address)).to.be.eq(protocolfeeSplitterBalance) + expect(await token0.balanceOf(fallbackReceiver.address)).to.be.eq(token0FromProtocolFee) + expect(await token1.balanceOf(fallbackReceiver.address)).to.be.eq(token1FromProtocolFee) + }) + + // Where token0-token1 and token1-WETH pairs exist AND PRICE IMPACT TOO HIGH + it( + 'should receive token0 and token1 if price impact token1-weth pool is too high', + async () => { + const tokenAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(1); + // add very small liquidity to weth-token1 pool + const wethTknAmountLowLP = BigNumber.from(1).mul(BigNumber.from(10).pow(15)); + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + await token1.transfer(wethToken1Pair.address, wethTknAmountLowLP) + await WETH.transfer(wethToken1Pair.address, wethTknAmountLowLP) + await wethToken1Pair.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(15)) + await token1.transfer(pair01.address, expandTo18Decimals(15)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); + + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) + + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalanceBeforeTake) + expect((await token0.balanceOf(fallbackReceiver.address))) + .to.be.eq(token0FromProtocolFee) + expect((await token1.balanceOf(fallbackReceiver.address))) + .to.be.eq(token1FromProtocolFee) + }) + }) + + describe('external receiver on', () => { + it( + 'should send tokenA & tokenB default 100% fee to dxdao and 0% fee to external receiver', + async () => { + const tokenAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(50); + + await feeSplitter.setExternalFeeReceiver(pair23.address, externalfeeSplitter.address) + const [externalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair23.address) + expect(percentFeeToExternalReceiver).to.eq(0) + expect(externalReceiver).to.eq(externalfeeSplitter.address) + + + await token2.transfer(pair23.address, tokenAmount) + await token3.transfer(pair23.address, tokenAmount) + await pair23.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair23, token2.address, amountIn) + await token2.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? 0 : amountOut, + (token2.address < token3.address) ? amountOut : 0, + dxdao.address, '0x', overrides + ) + + amountOut = await getAmountOut(pair23, token3.address, amountIn) + await token3.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? amountOut : 0, + (token2.address < token3.address) ? 0 : amountOut, + dxdao.address, '0x', overrides + ) + + let protocolFeeToReceive = await calcProtocolFee(pair23, factory); + + await token2.transfer(pair23.address, expandTo18Decimals(10)) + await token3.transfer(pair23.address, expandTo18Decimals(10)) + await pair23.mint(dxdao.address, overrides) + + const protocolFeeLP = await pair23.balanceOf(feeSplitter.address); + expect(protocolFeeLP.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const tokenAFromProtocolFee = protocolFeeLP + .mul(await token2.balanceOf(pair23.address)).div(await pair23.totalSupply()); + const tokenBFromProtocolFee = protocolFeeLP + .mul(await token3.balanceOf(pair23.address)).div(await pair23.totalSupply()); + + const protocolfeeSplitterBalance = await provider.getBalance(protocolfeeSplitter.address) + + const balanceTkn2 = await token2.balanceOf(fallbackReceiver.address) + const balanceTkn3 = await token3.balanceOf(fallbackReceiver.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair23.address], overrides) + + expect(await provider.getBalance(protocolfeeSplitter.address)).to.eq(protocolfeeSplitterBalance.toString()) + + expect(await token2.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token3.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalance) + + expect((await token2.balanceOf(fallbackReceiver.address))) + .to.be.eq(balanceTkn2.add(tokenAFromProtocolFee)) + expect((await token2.balanceOf(externalfeeSplitter.address))) + .to.be.eq(0) + + expect((await token3.balanceOf(fallbackReceiver.address))) + .to.be.eq(balanceTkn3.add(tokenBFromProtocolFee)) + expect((await token3.balanceOf(externalfeeSplitter.address))) + .to.be.eq(0) + }) + + it( + 'should split protocol fee and send tokenA & tokenB to dxdao and external fee receiver', + async () => { + const tokenAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(50); + const newPercentFeeToExternalReceiver = 2000 //20% + + // set external fee receiver + await feeSplitter.setExternalFeeReceiver(pair23.address, externalfeeSplitter.address) + await feeSplitter.setFeePercentageToExternalReceiver(pair23.address, newPercentFeeToExternalReceiver) + const [newExternalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair23.address) + expect(percentFeeToExternalReceiver).to.eq(newPercentFeeToExternalReceiver) + expect(newExternalReceiver).to.eq(externalfeeSplitter.address) + + await token2.transfer(pair23.address, tokenAmount) + await token3.transfer(pair23.address, tokenAmount) + await pair23.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair23, token2.address, amountIn) + await token2.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? 0 : amountOut, + (token2.address < token3.address) ? amountOut : 0, + dxdao.address, '0x', overrides + ) + + amountOut = await getAmountOut(pair23, token3.address, amountIn) + await token3.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? amountOut : 0, + (token2.address < token3.address) ? 0 : amountOut, + dxdao.address, '0x', overrides + ) + + let protocolFeeToReceive = await calcProtocolFee(pair23, factory); + + await token2.transfer(pair23.address, expandTo18Decimals(10)) + await token3.transfer(pair23.address, expandTo18Decimals(10)) + await pair23.mint(dxdao.address, overrides) + + const protocolFeeLP = await pair23.balanceOf(feeSplitter.address); + expect(protocolFeeLP.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const tokenAFromProtocolFee = protocolFeeLP + .mul(await token2.balanceOf(pair23.address)).div(await pair23.totalSupply()); + const tokenBFromProtocolFee = protocolFeeLP + .mul(await token3.balanceOf(pair23.address)).div(await pair23.totalSupply()); + + const tokenAExternal = tokenAFromProtocolFee.mul(percentFeeToExternalReceiver).div(10000); + const tokenBExternal = tokenBFromProtocolFee.mul(percentFeeToExternalReceiver).div(10000); + const tokenAfeeSplitter = tokenAFromProtocolFee.sub(tokenAExternal); + const tokenBfeeSplitter = tokenBFromProtocolFee.sub(tokenBExternal); + + const protocolfeeSplitterBalance = await provider.getBalance(protocolfeeSplitter.address); + + await feeSplitter.connect(dxdao).takeProtocolFee([pair23.address], overrides) + + expect(await provider.getBalance(protocolfeeSplitter.address)).to.eq(protocolfeeSplitterBalance) + + expect(await token2.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token3.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalance) + + expect((await token2.balanceOf(fallbackReceiver.address))) + .to.be.eq(tokenAfeeSplitter) + expect((await token2.balanceOf(externalfeeSplitter.address))) + .to.be.eq(tokenAExternal) + expect((await token3.balanceOf(fallbackReceiver.address))) + .to.be.eq(tokenBfeeSplitter) + expect((await token3.balanceOf(externalfeeSplitter.address))) + .to.be.eq(tokenBExternal) + }) + + // Where token0-token1, token0-WETH and token1-WETH pairs exist + it( + 'should swap token0 & token1 to ETH and sent to ethReceiver when extracting fee from token0-token1', + async () => { + const tokenAmount = expandTo18Decimals(40); + const wethAmount = expandTo18Decimals(40); + const amountIn = expandTo18Decimals(4); + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + await token0.transfer(wethToken0Pair.address, tokenAmount) + await WETH.transfer(wethToken0Pair.address, wethAmount) + await wethToken0Pair.mint(dxdao.address, overrides) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(2)) + await token1.transfer(pair01.address, expandTo18Decimals(2)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); + + const wethFromToken0FromProtocolFee = await getAmountOut(wethToken0Pair, token0.address, token0FromProtocolFee); + const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); + + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) + + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await token0.balanceOf(protocolfeeSplitter.address))) + .to.eq(0) + expect((await token1.balanceOf(protocolfeeSplitter.address))) + .to.eq(0) + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalanceBeforeTake.add(wethFromToken0FromProtocolFee).add(wethFromToken1FromProtocolFee)) + }) + + // Where token0-token1, token0-WETH and token1-WETH pairs exist + it( + 'should receive token0 and ETH when extracting fee from token0-token1 and swap LPs exist but not enough liquidity', + async () => { + const tokenAmount = expandTo18Decimals(40); + const wethAmount = expandTo18Decimals(40); + const amountIn = expandTo18Decimals(4); + // add very small liquidity to weth-token0 pool + const wethTknAmountLowLP = BigNumber.from(1).mul(BigNumber.from(10).pow(6)); + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + await token0.transfer(wethToken0Pair.address, wethTknAmountLowLP) + await WETH.transfer(wethToken0Pair.address, wethTknAmountLowLP) + await wethToken0Pair.mint(dxdao.address, overrides) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); + + const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); + + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) + + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect(await token0.balanceOf(fallbackReceiver.address)) + .to.eq(token0FromProtocolFee) + expect(await token1.balanceOf(protocolfeeSplitter.address)) + .to.eq(0) + expect(await provider.getBalance(protocolfeeSplitter.address)) + .to.be.eq(protocolfeeSplitterBalanceBeforeTake.add(wethFromToken1FromProtocolFee)) + }) + + // Where token0-token1, token0-WETH and token1-WETH pairs exist + it( + 'should receive token0 and ETH when extracting fee from token0-token1 and swap LPs exist but token reserve is 0', + async () => { + const tokenAmount = expandTo18Decimals(40); + const wethAmount = expandTo18Decimals(40); + const amountIn = expandTo18Decimals(4); + // add very small liquidity to weth-token0 pool + const wethTknAmountLowLP = BigNumber.from(1).mul(BigNumber.from(10).pow(6)); + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + // dont transfer token0 to the pool and dont mint lp tokens + await WETH.transfer(wethToken0Pair.address, wethTknAmountLowLP) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); + + const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); + + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) + + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await token0.balanceOf(fallbackReceiver.address))) + .to.eq(token0FromProtocolFee) + expect((await token1.balanceOf(protocolfeeSplitter.address))) + .to.eq(0) + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalanceBeforeTake.add(wethFromToken1FromProtocolFee)) + }) + + // Where token0-token1, token0-WETH and token1-WETH pairs exist + it( + 'should swap tkn0 & tkn1 to ETH and split fee when extracting from tkn0-tkn1', + async () => { + const tokenAmount = expandTo18Decimals(40); + const wethAmount = expandTo18Decimals(40); + const amountIn = expandTo18Decimals(4); + const newPercentFeeToExternalReceiver = 2000 //20% + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + // set external fee receiver + await feeSplitter.setExternalFeeReceiver(pair01.address, externalfeeSplitter.address) + await feeSplitter.setFeePercentageToExternalReceiver(pair01.address, newPercentFeeToExternalReceiver) + const [externalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair01.address) + expect(percentFeeToExternalReceiver).to.eq(newPercentFeeToExternalReceiver) + expect(externalReceiver).to.eq(externalfeeSplitter.address) + + await token0.transfer(wethToken0Pair.address, tokenAmount) + await WETH.transfer(wethToken0Pair.address, wethAmount) + await wethToken0Pair.mint(dxdao.address, overrides) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); + + const wethFromToken0FromProtocolFee = await getAmountOut(wethToken0Pair, token0.address, token0FromProtocolFee); + const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); + + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + const externalfeeSplitterBalanceBeforeTake = await provider.getBalance(externalfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) + + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await token0.balanceOf(protocolfeeSplitter.address))) + .to.eq(0) + expect((await token1.balanceOf(protocolfeeSplitter.address))) + .to.eq(0) + expect((await token0.balanceOf(externalfeeSplitter.address))) + .to.eq(0) + expect((await token1.balanceOf(externalfeeSplitter.address))) + .to.eq(0) + + const totalWethFromFees = wethFromToken0FromProtocolFee.add(wethFromToken1FromProtocolFee) + const wethToExternalReceiver = totalWethFromFees.mul(percentFeeToExternalReceiver).div(10000) + const wethToProtocolfeeSplitter = totalWethFromFees.sub(wethToExternalReceiver) + + expect((await provider.getBalance(protocolfeeSplitter.address)).div(ROUND_EXCEPTION)) + .to.be.eq((protocolfeeSplitterBalanceBeforeTake.add(wethToProtocolfeeSplitter)).div(ROUND_EXCEPTION)) + expect((await provider.getBalance(externalfeeSplitter.address)).div(ROUND_EXCEPTION)) + .to.be.eq((externalfeeSplitterBalanceBeforeTake.add(wethToExternalReceiver)).div(ROUND_EXCEPTION)) + }) + + // Where token0-token1, token0-WETH and token1-WETH pairs exist + it( + 'should split tkn0 & tkn1 fee when extracting from tkn0-tkn1 and swap to weth impossible', + async () => { + const tokenAmount = expandTo18Decimals(40); + const wethAmount = expandTo18Decimals(40); + const amountIn = expandTo18Decimals(4); + const newPercentFeeToExternalReceiver = 2000 //20% + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + // set external fee receiver + await feeSplitter.setExternalFeeReceiver(pair01.address, externalfeeSplitter.address) + await feeSplitter.setFeePercentageToExternalReceiver(pair01.address, newPercentFeeToExternalReceiver) + const [externalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair01.address) + expect(percentFeeToExternalReceiver).to.eq(newPercentFeeToExternalReceiver) + expect(externalReceiver).to.eq(externalfeeSplitter.address) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); + + const receiverBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + const externalfeeSplitterBalanceBeforeTake = await provider.getBalance(externalfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) + + const tkn0ToExternalReceiver = token0FromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) + const tkn1ToExternalReceiver = token1FromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) + const tkn0ToProtocolfeeSplitter = token0FromProtocolFee.sub(tkn0ToExternalReceiver) + const tkn1ToProtocolfeeSplitter = token1FromProtocolFee.sub(tkn1ToExternalReceiver) + + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + // send token0 and token1 to fallbackreceiver and external fee receiver + expect((await token0.balanceOf(fallbackReceiver.address))) + .to.eq(tkn0ToProtocolfeeSplitter) + expect((await token1.balanceOf(fallbackReceiver.address))) + .to.eq(tkn1ToProtocolfeeSplitter) + expect((await token0.balanceOf(externalfeeSplitter.address))) + .to.eq(tkn0ToExternalReceiver) + expect((await token1.balanceOf(externalfeeSplitter.address))) + .to.eq(tkn1ToExternalReceiver) + + // should not change eth balance + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.eq(receiverBalanceBeforeTake) + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.eq(protocolfeeSplitterBalanceBeforeTake) + expect((await provider.getBalance(externalfeeSplitter.address))) + .to.eq(externalfeeSplitterBalanceBeforeTake) + }) + + // Where token0-token1, token0-WETH and token1-WETH pairs exist + it( + 'should update protocol fee and split tkn0 & tkn1 fee when extracting from tkn0-tkn1 and swap to weth impossible', + async () => { + const tokenAmount = expandTo18Decimals(40); + const wethAmount = expandTo18Decimals(40); + const amountIn = expandTo18Decimals(4); + const newPercentFeeToExternalReceiver = 2000 //20% + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + // set external fee receiver + await feeSplitter.setExternalFeeReceiver(pair01.address, externalfeeSplitter.address) + await feeSplitter.setFeePercentageToExternalReceiver(pair01.address, newPercentFeeToExternalReceiver) + const [externalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair01.address) + expect(percentFeeToExternalReceiver).to.eq(newPercentFeeToExternalReceiver) + expect(externalReceiver).to.eq(externalfeeSplitter.address) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + // change protocol fee + await feeSetter.connect(dxdao).setProtocolFee(20) + expect(await factory.protocolFeeDenominator()).to.eq(20) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); + + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + const externalfeeSplitterBalanceBeforeTake = await provider.getBalance(externalfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) + + const tkn0ToExternalReceiver = token0FromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) + const tkn1ToExternalReceiver = token1FromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) + const tkn0ToProtocolfeeSplitter = token0FromProtocolFee.sub(tkn0ToExternalReceiver) + const tkn1ToProtocolfeeSplitter = token1FromProtocolFee.sub(tkn1ToExternalReceiver) + + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + // send token0 and token1 to fallbackreceiver and external fee receiver + expect((await token0.balanceOf(fallbackReceiver.address))) + .to.eq(tkn0ToProtocolfeeSplitter) + expect((await token1.balanceOf(fallbackReceiver.address))) + .to.eq(tkn1ToProtocolfeeSplitter) + expect((await token0.balanceOf(externalfeeSplitter.address))) + .to.eq(tkn0ToExternalReceiver) + expect((await token1.balanceOf(externalfeeSplitter.address))) + .to.eq(tkn1ToExternalReceiver) + + // should not change eth balance + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.eq(protocolfeeSplitterBalanceBeforeTake) + expect((await provider.getBalance(externalfeeSplitter.address))) + .to.eq(externalfeeSplitterBalanceBeforeTake) + }) + + // Where tokenA-tokenB, tokenC-tokenD and tokenC-WETH pairs exist + it( + 'should receive tokens 2,3 and ETH (token0 swapped) from pair 23, 03', + async () => { + const tokenAmount = expandTo18Decimals(100); + const wethAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(50); + + await token0.transfer(wethToken0Pair.address, tokenAmount) + await WETH.transfer(wethToken0Pair.address, wethAmount) + await wethToken0Pair.mint(dxdao.address, overrides) + + // pair23 + await token2.transfer(pair23.address, tokenAmount) + await token3.transfer(pair23.address, tokenAmount) + await pair23.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair23, token2.address, amountIn) + await token2.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? 0 : amountOut, + (token2.address < token3.address) ? amountOut : 0, + dxdao.address, '0x', overrides + ) + + amountOut = await getAmountOut(pair23, token3.address, amountIn) + await token3.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? amountOut : 0, + (token2.address < token3.address) ? 0 : amountOut, + dxdao.address, '0x', overrides + ) + + let protocolFeeToReceive = await calcProtocolFee(pair23, factory); + + await token2.transfer(pair23.address, expandTo18Decimals(10)) + await token3.transfer(pair23.address, expandTo18Decimals(10)) + await pair23.mint(dxdao.address, overrides) + + const protocolFeeLPPair23 = await pair23.balanceOf(feeSplitter.address); + expect(protocolFeeLPPair23.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + // pair03 + await token0.transfer(pair03.address, tokenAmount) + await token3.transfer(pair03.address, tokenAmount) + await pair03.mint(dxdao.address, overrides) + + amountOut = await getAmountOut(pair03, token2.address, amountIn) + await token0.transfer(pair03.address, amountIn) + await pair03.swap( + (token0.address < token3.address) ? 0 : amountOut, + (token0.address < token3.address) ? amountOut : 0, + dxdao.address, '0x', overrides + ) + + amountOut = await getAmountOut(pair03, token3.address, amountIn) + await token3.transfer(pair03.address, amountIn) + await pair03.swap( + (token0.address < token3.address) ? amountOut : 0, + (token0.address < token3.address) ? 0 : amountOut, + dxdao.address, '0x', overrides + ) + + protocolFeeToReceive = await calcProtocolFee(pair03, factory); + + await token0.transfer(pair03.address, expandTo18Decimals(10)) + await token3.transfer(pair03.address, expandTo18Decimals(10)) + await pair03.mint(dxdao.address, overrides) + + const protocolFeeLPPair03 = await pair03.balanceOf(feeSplitter.address); + expect(protocolFeeLPPair03.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const tokenAFromProtocolFee = protocolFeeLPPair23 + .mul(await token2.balanceOf(pair23.address)).div(await pair23.totalSupply()); + const tokenBFromProtocolFee = protocolFeeLPPair23 + .mul(await token3.balanceOf(pair23.address)).div(await pair23.totalSupply()); + const tokenCFromProtocolFee = protocolFeeLPPair03 + .mul(await token0.balanceOf(pair03.address)).div(await pair03.totalSupply()); + const tokenDFromProtocolFee = protocolFeeLPPair03 + .mul(await token3.balanceOf(pair03.address)).div(await pair03.totalSupply()); + + const wethFromToken0FromProtocolFee = await getAmountOut(wethToken0Pair, token0.address, tokenCFromProtocolFee); + const protocolfeeSplitterBalance = await provider.getBalance(protocolfeeSplitter.address) + + await expect(feeSplitter.connect(dxdao).takeProtocolFee([pair23.address, pair03.address], overrides) + ).to.emit(feeSplitter, 'TakeProtocolFee').withArgs(dxdao.address, protocolfeeSplitter.address, 2) + + expect(await token2.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token3.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await token2.balanceOf(fallbackReceiver.address))) + .to.be.eq(tokenAFromProtocolFee) + expect((await token3.balanceOf(fallbackReceiver.address))) + .to.be.eq(tokenBFromProtocolFee.add(tokenDFromProtocolFee)) + + expect((await token0.balanceOf(fallbackReceiver.address))) + .to.eq(0) + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalance.add(wethFromToken0FromProtocolFee)) + }) + + it( + 'should receive tkn0 and eth if split % was updated', + async () => { + const tokenAmount = expandTo18Decimals(40); + const wethAmount = expandTo18Decimals(40); + const amountIn = expandTo18Decimals(4); + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); + + const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + + // set external fee receiver + await feeSplitter.setExternalFeeReceiver(pair01.address, externalfeeSplitter.address) + await feeSplitter.setFeePercentageToExternalReceiver(pair01.address, 2000) + const [externalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair01.address) + expect(percentFeeToExternalReceiver).to.eq(2000) + expect(externalReceiver).to.eq(externalfeeSplitter.address) + + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await token0.balanceOf(fallbackReceiver.address))) + .to.be.eq(token0FromProtocolFee) + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalanceBeforeTake.add(wethFromToken1FromProtocolFee)) + }) + + // Where weth pairs don't exist + it( + 'should split and receive only tokens when extracting fee from tokenA-tokenB pair that has no path to WETH', + async () => { + const tokenAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(50); + + // set external fee receiver + await feeSplitter.setExternalFeeReceiver(pair23.address, externalfeeSplitter.address) + await feeSplitter.setFeePercentageToExternalReceiver(pair23.address, 1000) + + const [externalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair23.address) + expect(externalReceiver).to.eq(externalfeeSplitter.address) + expect(percentFeeToExternalReceiver).to.eq(1000) + + await token2.transfer(pair23.address, tokenAmount) + await token3.transfer(pair23.address, tokenAmount) + await pair23.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair23, token2.address, amountIn); + await token2.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? 0 : amountOut, + (token2.address < token3.address) ? amountOut : 0, + dxdao.address, '0x', overrides + ) + + amountOut = await getAmountOut(pair23, token3.address, amountIn); + await token3.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? amountOut : 0, + (token2.address < token3.address) ? 0 : amountOut, + dxdao.address, '0x', overrides + ) + + const protocolFeeToReceive = await calcProtocolFee(pair23, factory); + + await token2.transfer(pair23.address, expandTo18Decimals(10)) + await token3.transfer(pair23.address, expandTo18Decimals(10)) + await pair23.mint(dxdao.address, overrides) + + const protocolFeeLP = await pair23.balanceOf(feeSplitter.address); + expect(protocolFeeLP.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const tokenAFromProtocolFee = protocolFeeLP + .mul(await token2.balanceOf(pair23.address)).div(await pair23.totalSupply()); + const tokenBFromProtocolFee = protocolFeeLP + .mul(await token3.balanceOf(pair23.address)).div(await pair23.totalSupply()); + + const protocolfeeSplitterBalance = await provider.getBalance(protocolfeeSplitter.address) + const externalBalance = await provider.getBalance(externalfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair23.address], overrides) + + const tknAExternalReceiver = tokenAFromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) + const tknBExternalReceiver = tokenBFromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) + const tknAProtocolfeeSplitter = tokenAFromProtocolFee.sub(tknAExternalReceiver) + const tknBProtocolfeeSplitter = tokenBFromProtocolFee.sub(tknBExternalReceiver) + + expect(await token2.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token3.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair23.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect(await provider.getBalance(protocolfeeSplitter.address)) + .to.be.eq(protocolfeeSplitterBalance) + expect(await provider.getBalance(externalfeeSplitter.address)) + .to.be.eq(externalBalance) + expect(await token2.balanceOf(fallbackReceiver.address)) + .to.be.eq(tknAProtocolfeeSplitter) + expect(await token3.balanceOf(fallbackReceiver.address)) + .to.be.eq(tknBProtocolfeeSplitter) + expect(await token2.balanceOf(externalfeeSplitter.address)) + .to.be.eq(tknAExternalReceiver) + expect(await token3.balanceOf(externalfeeSplitter.address)) + .to.be.eq(tknBExternalReceiver) + }) + + // Where token0-token1, token0-WETH and token1-WETH pairs exist + it( + 'should swap tokens, split and sent to ethReceiver when extracting fee from token0-token1', + async () => { + const tokenAmount = expandTo18Decimals(40); + const wethAmount = expandTo18Decimals(40); + const amountIn = expandTo18Decimals(4); + + // set external fee receiver + await feeSplitter.setExternalFeeReceiver(pair01.address, externalfeeSplitter.address) + await feeSplitter.setFeePercentageToExternalReceiver(pair01.address, 3000) + + const [externalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair01.address) + expect(externalReceiver).to.eq(externalfeeSplitter.address) + expect(percentFeeToExternalReceiver).to.eq(3000) + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + await token0.transfer(wethToken0Pair.address, tokenAmount) + await WETH.transfer(wethToken0Pair.address, wethAmount) + await wethToken0Pair.mint(dxdao.address, overrides) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + // estimate protocol fee received + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + // calculate tkn0 & tkn1 amount based on LP + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); + + const dxdaoBalanceBeforeTake = await provider.getBalance(dxdao.address) + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + const externalfeeSplitterBalanceBeforeTake = await provider.getBalance(externalfeeSplitter.address) + + // estimate weth from tokens + const wethFromToken0 = await getAmountOut(wethToken0Pair, token0.address, token0FromProtocolFee); + const wethFromToken1 = await getAmountOut(wethToken1Pair, token0.address, token1FromProtocolFee); + + // set external fee receiver + await feeSplitter.setFeePercentageToExternalReceiver(pair01.address, 2000) + const [newExternalReceiver, newPercentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair01.address) + expect(newExternalReceiver).to.eq(externalfeeSplitter.address) + expect(newPercentFeeToExternalReceiver).to.eq(2000) + + // split weth to avatar and external Receiver with OLD fee percentage + const wethTkn0ToExternalReceiver = wethFromToken0.mul(percentFeeToExternalReceiver).div(10000) + const wethTkn1ToExternalReceiver = wethFromToken1.mul(percentFeeToExternalReceiver).div(10000) + const tkn0ToProtocolfeeSplitter = wethFromToken0.sub(wethTkn0ToExternalReceiver) + const tkn1ToProtocolfeeSplitter = wethFromToken1.sub(wethTkn1ToExternalReceiver) + + // weth to external Receiver after token-weth swap + const wethExternal = wethTkn0ToExternalReceiver.add(wethTkn1ToExternalReceiver) + + // weth to dao after token-weth swap + const wethfeeSplitter = tkn0ToProtocolfeeSplitter.add(tkn1ToProtocolfeeSplitter) + + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + // dont send token0 and token1 to fallbackreceiver and external fee receiver + expect((await token0.balanceOf(fallbackReceiver.address))) + .to.eq(0) + expect((await token1.balanceOf(fallbackReceiver.address))) + .to.eq(0) + expect((await token0.balanceOf(externalfeeSplitter.address))) + .to.eq(0) + expect((await token1.balanceOf(externalfeeSplitter.address))) + .to.eq(0) + + // should change eth balance for avatar and external Receiver + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalanceBeforeTake.add(wethfeeSplitter)) + expect((await provider.getBalance(externalfeeSplitter.address))) + .to.be.eq(externalfeeSplitterBalanceBeforeTake.add(wethExternal)) + + // should not send eth to avatar (gas used for updating split %) + expect((await provider.getBalance(dxdao.address))) + .to.be.lte(dxdaoBalanceBeforeTake) + }) + + // Where token0-token1 and token1-WETH pairs exist + it( + 'should emit TakeProtocolFee event', + async () => { + const tokenAmount = expandTo18Decimals(40); + const wethAmount = expandTo18Decimals(40); + const amountIn = expandTo18Decimals(4); + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(wethToken1Pair, token1.address, amountIn); + await token1.transfer(wethToken1Pair.address, amountIn) + await wethToken1Pair.swap(0, amountOut, dxdao.address, '0x', overrides) + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + await token1.transfer(wethToken1Pair.address, expandTo18Decimals(10)) + await WETH.transfer(wethToken1Pair.address, expandTo18Decimals(10)) + await wethToken1Pair.mint(dxdao.address, overrides) + + await expect(feeSplitter.connect(dxdao).takeProtocolFee([pair01.address, wethToken1Pair.address], overrides) + ).to.emit(feeSplitter, 'TakeProtocolFee').withArgs(dxdao.address, protocolfeeSplitter.address, 2) + }) + }) +}) diff --git a/test/DXswapPair.spec.ts b/test/DXswapPair.spec.ts index e37c17e65..47eec4a6f 100644 --- a/test/DXswapPair.spec.ts +++ b/test/DXswapPair.spec.ts @@ -1,45 +1,58 @@ -import chai, { expect } from 'chai' -import { Contract } from 'ethers' -import { solidity, MockProvider, createFixtureLoader } from 'ethereum-waffle' -import { BigNumber, bigNumberify } from 'ethers/utils' - -import { expandTo18Decimals, mineBlock, encodePrice } from './shared/utilities' +import '@nomiclabs/hardhat-ethers' +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers' +import { expect } from 'chai' +import { ethers } from "hardhat"; +import { BigNumber, constants } from 'ethers' import { pairFixture } from './shared/fixtures' -import { AddressZero } from 'ethers/constants' +import { DXswapFactory, DXswapFeeReceiver, DXswapFeeSetter, DXswapPair, ERC20 } from './../typechain' +import { encodePrice, expandTo18Decimals, mineBlock } from './shared/utilities'; -const MINIMUM_LIQUIDITY = bigNumberify(10).pow(3) -const ROUND_EXCEPTION = bigNumberify(10).pow(4) -const FEE_DENOMINATOR = bigNumberify(10).pow(4) +const MINIMUM_LIQUIDITY = BigNumber.from(10).pow(3) +const ROUND_EXCEPTION = BigNumber.from(10).pow(4) +const FEE_DENOMINATOR = BigNumber.from(10).pow(4) -chai.use(solidity) +const { AddressZero } = constants const overrides = { gasLimit: 9999999 } describe('DXswapPair', () => { - const provider = new MockProvider({ - hardfork: 'istanbul', - mnemonic: 'horn horn horn horn horn horn horn horn horn horn horn horn', - gasLimit: 9999999 + const provider = ethers.provider + let dxdao: SignerWithAddress + let tokenOwner: SignerWithAddress + let protocolFeeReceiver: SignerWithAddress + let fallbackReceiver: SignerWithAddress + let other: SignerWithAddress + let factory: DXswapFactory + let feeSetter: DXswapFeeSetter + let feeReceiver: DXswapFeeReceiver + + let token0: ERC20 + let token1: ERC20 + let pair: DXswapPair + + beforeEach('assign dxdaos', async function () { + const signers = await ethers.getSigners() + dxdao = signers[0] + tokenOwner = signers[1] + protocolFeeReceiver = signers[2] + fallbackReceiver = signers[3] + other = signers[4] }) - const [dxdao, wallet, protocolFeeReceiver, other] = provider.getWallets() - const loadFixture = createFixtureLoader(provider, [dxdao, wallet, protocolFeeReceiver]) - - let factory: Contract - let token0: Contract - let token1: Contract - let pair: Contract - let feeSetter: Contract - - beforeEach(async () => { - const fixture = await loadFixture(pairFixture) - factory = fixture.factory + + beforeEach('deploy fixture', async () => { + const fixture = await pairFixture(provider, [dxdao, protocolFeeReceiver, fallbackReceiver]) + factory = fixture.dxswapFactory + feeSetter = fixture.feeSetter + feeReceiver = fixture.feeReceiver token0 = fixture.token0 token1 = fixture.token1 - pair = fixture.pair - feeSetter = fixture.feeSetter - await feeSetter.setFeeTo(AddressZero); + pair = fixture.dxswapPair01 + }) + + beforeEach('set feeTo: off', async function () { + await feeSetter.setFeeTo(AddressZero) }) it('mint', async () => { @@ -49,18 +62,18 @@ describe('DXswapPair', () => { await token1.transfer(pair.address, token1Amount) const expectedLiquidity = expandTo18Decimals(2) - await expect(pair.connect(wallet).mint(wallet.address, overrides)) + await expect(pair.connect(dxdao).mint(dxdao.address, overrides)) .to.emit(pair, 'Transfer') .withArgs(AddressZero, AddressZero, MINIMUM_LIQUIDITY) .to.emit(pair, 'Transfer') - .withArgs(AddressZero, wallet.address, expectedLiquidity.sub(MINIMUM_LIQUIDITY)) + .withArgs(AddressZero, dxdao.address, expectedLiquidity.sub(MINIMUM_LIQUIDITY)) .to.emit(pair, 'Sync') .withArgs(token0Amount, token1Amount) .to.emit(pair, 'Mint') - .withArgs(wallet.address, token0Amount, token1Amount) + .withArgs(dxdao.address, token0Amount, token1Amount) expect(await pair.totalSupply()).to.eq(expectedLiquidity) - expect(await pair.balanceOf(wallet.address)).to.eq(expectedLiquidity.sub(MINIMUM_LIQUIDITY)) + expect(await pair.balanceOf(dxdao.address)).to.eq(expectedLiquidity.sub(MINIMUM_LIQUIDITY)) expect(await token0.balanceOf(pair.address)).to.eq(token0Amount) expect(await token1.balanceOf(pair.address)).to.eq(token1Amount) const reserves = await pair.getReserves() @@ -71,7 +84,7 @@ describe('DXswapPair', () => { async function addLiquidity(token0Amount: BigNumber, token1Amount: BigNumber) { await token0.transfer(pair.address, token0Amount) await token1.transfer(pair.address, token1Amount) - await pair.connect(wallet).mint(wallet.address, overrides) + await pair.connect(dxdao).mint(dxdao.address, overrides) } const swapTestCases: BigNumber[][] = [ [1, 5, 10], @@ -83,20 +96,28 @@ describe('DXswapPair', () => { [1, 10, 10], [1, 100, 100], [1, 1000, 1000] - ].map(a => a.map(n => (typeof n === 'string' ? bigNumberify(n) : expandTo18Decimals(n)))) + ].map(a => a.map(n => (typeof n === 'string' ? BigNumber.from(n) : expandTo18Decimals(n)))) swapTestCases.forEach((swapTestCase, i) => { it(`getInputPrice:${i}`, async () => { + // check if tokens are sorted + const tkn0address = await pair.token0() + const tkn0 = token0.address === tkn0address ? token0 : token1 + const tkn1 = token0.address === tkn0address ? token1 : token0 + const [swapAmount, token0Amount, token1Amount] = swapTestCase - await addLiquidity(token0Amount, token1Amount) - await token0.transfer(pair.address, swapAmount) + await tkn0.transfer(pair.address, token0Amount) + await tkn1.transfer(pair.address, token1Amount) + await pair.connect(dxdao).mint(dxdao.address, overrides) + + await tkn0.transfer(pair.address, swapAmount) const amountInWithFee = swapAmount.mul(FEE_DENOMINATOR.sub(15)); const numerator = amountInWithFee.mul(token1Amount); const denominator = token0Amount.mul(FEE_DENOMINATOR).add(amountInWithFee); const amountOut = numerator.div(denominator); - await expect(pair.swap(0, amountOut.add(1), wallet.address, '0x', overrides)).to.be.revertedWith( + await expect(pair.swap(0, amountOut.add(1), dxdao.address, '0x', overrides)).to.be.revertedWith( 'DXswapPair: K' ) - await pair.swap(0, amountOut, wallet.address, '0x', overrides) + await pair.swap(0, amountOut, dxdao.address, '0x', overrides) }) }) @@ -105,16 +126,26 @@ describe('DXswapPair', () => { ['998500000000000000', 10, 5, 1], ['998500000000000000', 5, 5, 1], [1, 5, 5, '1001502253380070105'] // given amountOut, amountIn = ceiling(amountOut / .9985) - ].map(a => a.map(n => (typeof n === 'string' ? bigNumberify(n) : expandTo18Decimals(n)))) + ].map(a => a.map(n => (typeof n === 'string' ? BigNumber.from(n) : expandTo18Decimals(n)))) optimisticTestCases.forEach((optimisticTestCase, i) => { it(`optimistic:${i}`, async () => { + // check if tokens are sorted + const tkn0address = await pair.token0() + const tkn0 = token0.address === tkn0address ? token0 : token1 + const tkn1 = token0.address === tkn0address ? token1 : token0 const [outputAmount, token0Amount, token1Amount, inputAmount] = optimisticTestCase - await addLiquidity(token0Amount, token1Amount) - await token0.transfer(pair.address, inputAmount) - await expect(pair.swap(outputAmount.add(1), 0, wallet.address, '0x', overrides)).to.be.revertedWith( + + // add liquidity + await tkn0.transfer(pair.address, token0Amount) + await tkn1.transfer(pair.address, token1Amount) + await pair.connect(dxdao).mint(dxdao.address, overrides) + + await tkn0.transfer(pair.address, inputAmount) + + await expect(pair.swap(outputAmount.add(1), 0, dxdao.address, '0x', overrides)).to.be.revertedWith( 'DXswapPair: K' ) - await pair.swap(outputAmount.sub(1), 0, wallet.address, '0x', overrides) + await pair.swap(outputAmount.sub(1), 0, dxdao.address, '0x', overrides) }) }) @@ -124,15 +155,15 @@ describe('DXswapPair', () => { await addLiquidity(token0Amount, token1Amount) const swapAmount = expandTo18Decimals(1) - const expectedOutputAmount = bigNumberify('1662497915624478906') + const expectedOutputAmount = BigNumber.from('1662497915624478906') await token0.transfer(pair.address, swapAmount) - await expect(pair.connect(wallet).swap(0, expectedOutputAmount, wallet.address, '0x', overrides)) + await expect(pair.connect(dxdao).swap(0, expectedOutputAmount, dxdao.address, '0x', overrides)) .to.emit(token1, 'Transfer') - .withArgs(pair.address, wallet.address, expectedOutputAmount) + .withArgs(pair.address, dxdao.address, expectedOutputAmount) .to.emit(pair, 'Sync') .withArgs(token0Amount.add(swapAmount), token1Amount.sub(expectedOutputAmount)) .to.emit(pair, 'Swap') - .withArgs(wallet.address, swapAmount, 0, 0, expectedOutputAmount, wallet.address) + .withArgs(dxdao.address, swapAmount, 0, 0, expectedOutputAmount, dxdao.address) const reserves = await pair.getReserves() expect(reserves[0]).to.eq(token0Amount.add(swapAmount)) @@ -141,8 +172,8 @@ describe('DXswapPair', () => { expect(await token1.balanceOf(pair.address)).to.eq(token1Amount.sub(expectedOutputAmount)) const totalSupplyToken0 = await token0.totalSupply() const totalSupplyToken1 = await token1.totalSupply() - expect(await token0.balanceOf(wallet.address)).to.eq(totalSupplyToken0.sub(token0Amount).sub(swapAmount)) - expect(await token1.balanceOf(wallet.address)).to.eq(totalSupplyToken1.sub(token1Amount).add(expectedOutputAmount)) + expect(await token0.balanceOf(dxdao.address)).to.eq(totalSupplyToken0.sub(token0Amount).sub(swapAmount)) + expect(await token1.balanceOf(dxdao.address)).to.eq(totalSupplyToken1.sub(token1Amount).add(expectedOutputAmount)) }) it('swap:token1', async () => { @@ -151,15 +182,15 @@ describe('DXswapPair', () => { await addLiquidity(token0Amount, token1Amount) const swapAmount = expandTo18Decimals(1) - const expectedOutputAmount = bigNumberify('453305446940074565') + const expectedOutputAmount = BigNumber.from('453305446940074565') await token1.transfer(pair.address, swapAmount) - await expect(pair.connect(wallet).swap(expectedOutputAmount, 0, wallet.address, '0x', overrides)) + await expect(pair.connect(dxdao).swap(expectedOutputAmount, 0, dxdao.address, '0x', overrides)) .to.emit(token0, 'Transfer') - .withArgs(pair.address, wallet.address, expectedOutputAmount) + .withArgs(pair.address, dxdao.address, expectedOutputAmount) .to.emit(pair, 'Sync') .withArgs(token0Amount.sub(expectedOutputAmount), token1Amount.add(swapAmount)) .to.emit(pair, 'Swap') - .withArgs(wallet.address, 0, swapAmount, expectedOutputAmount, 0, wallet.address) + .withArgs(dxdao.address, 0, swapAmount, expectedOutputAmount, 0, dxdao.address) const reserves = await pair.getReserves() expect(reserves[0]).to.eq(token0Amount.sub(expectedOutputAmount)) @@ -168,8 +199,8 @@ describe('DXswapPair', () => { expect(await token1.balanceOf(pair.address)).to.eq(token1Amount.add(swapAmount)) const totalSupplyToken0 = await token0.totalSupply() const totalSupplyToken1 = await token1.totalSupply() - expect(await token0.balanceOf(wallet.address)).to.eq(totalSupplyToken0.sub(token0Amount).add(expectedOutputAmount)) - expect(await token1.balanceOf(wallet.address)).to.eq(totalSupplyToken1.sub(token1Amount).sub(swapAmount)) + expect(await token0.balanceOf(dxdao.address)).to.eq(totalSupplyToken0.sub(token0Amount).add(expectedOutputAmount)) + expect(await token1.balanceOf(dxdao.address)).to.eq(totalSupplyToken1.sub(token1Amount).sub(swapAmount)) }) it('swap:gas', async () => { @@ -182,12 +213,12 @@ describe('DXswapPair', () => { await pair.sync(overrides) const swapAmount = expandTo18Decimals(1) - const expectedOutputAmount = bigNumberify('453305446940074565') + const expectedOutputAmount = BigNumber.from('453305446940074565') await token1.transfer(pair.address, swapAmount) await mineBlock(provider, (await provider.getBlock('latest')).timestamp + 1) - const tx = await pair.swap(expectedOutputAmount, 0, wallet.address, '0x', overrides) + const tx = await pair.swap(expectedOutputAmount, 0, dxdao.address, '0x', overrides) const receipt = await tx.wait() - expect(receipt.gasUsed).to.eq(75647) + expect(receipt.gasUsed).to.eq(75947) }) it('burn', async () => { @@ -196,36 +227,38 @@ describe('DXswapPair', () => { await addLiquidity(token0Amount, token1Amount) const expectedLiquidity = expandTo18Decimals(3) - await pair.connect(wallet).transfer(pair.address, expectedLiquidity.sub(MINIMUM_LIQUIDITY)) - await expect(pair.connect(wallet).burn(wallet.address, overrides)) + await pair.connect(dxdao).transfer(pair.address, expectedLiquidity.sub(MINIMUM_LIQUIDITY)) + await expect(pair.connect(dxdao).burn(dxdao.address, overrides)) .to.emit(pair, 'Transfer') .withArgs(pair.address, AddressZero, expectedLiquidity.sub(MINIMUM_LIQUIDITY)) .to.emit(token0, 'Transfer') - .withArgs(pair.address, wallet.address, token0Amount.sub(1000)) + .withArgs(pair.address, dxdao.address, token0Amount.sub(1000)) .to.emit(token1, 'Transfer') - .withArgs(pair.address, wallet.address, token1Amount.sub(1000)) + .withArgs(pair.address, dxdao.address, token1Amount.sub(1000)) .to.emit(pair, 'Sync') .withArgs(1000, 1000) .to.emit(pair, 'Burn') - .withArgs(wallet.address, token0Amount.sub(1000), token1Amount.sub(1000), wallet.address) + .withArgs(dxdao.address, token0Amount.sub(1000), token1Amount.sub(1000), dxdao.address) - expect(await pair.balanceOf(wallet.address)).to.eq(0) + expect(await pair.balanceOf(dxdao.address)).to.eq(0) expect(await pair.totalSupply()).to.eq(MINIMUM_LIQUIDITY) expect(await token0.balanceOf(pair.address)).to.eq(1000) expect(await token1.balanceOf(pair.address)).to.eq(1000) const totalSupplyToken0 = await token0.totalSupply() const totalSupplyToken1 = await token1.totalSupply() - expect(await token0.balanceOf(wallet.address)).to.eq(totalSupplyToken0.sub(1000)) - expect(await token1.balanceOf(wallet.address)).to.eq(totalSupplyToken1.sub(1000)) + expect(await token0.balanceOf(dxdao.address)).to.eq(totalSupplyToken0.sub(1000)) + expect(await token1.balanceOf(dxdao.address)).to.eq(totalSupplyToken1.sub(1000)) }) + it('price{0,1}CumulativeLast', async () => { const token0Amount = expandTo18Decimals(3) const token1Amount = expandTo18Decimals(3) await addLiquidity(token0Amount, token1Amount) const blockTimestamp = (await pair.getReserves())[2] - await mineBlock(provider, blockTimestamp + 1) + // no need to mine cause with sync() timestamp will be incremented + // await mineBlock(provider, blockTimestamp + 1) await pair.sync(overrides) const initialPrice = encodePrice(token0Amount, token1Amount) @@ -235,17 +268,17 @@ describe('DXswapPair', () => { const swapAmount = expandTo18Decimals(3) await token0.transfer(pair.address, swapAmount) - await mineBlock(provider, blockTimestamp + 10) + await mineBlock(provider, blockTimestamp + 9) + // swap to a new price eagerly instead of syncing - await pair.swap(0, expandTo18Decimals(1), wallet.address, '0x', overrides) // make the price nice + await pair.swap(0, expandTo18Decimals(1), dxdao.address, '0x', overrides) // make the price nice expect(await pair.price0CumulativeLast()).to.eq(initialPrice[0].mul(10)) expect(await pair.price1CumulativeLast()).to.eq(initialPrice[1].mul(10)) expect((await pair.getReserves())[2]).to.eq(blockTimestamp + 10) - await mineBlock(provider, blockTimestamp + 20) + await mineBlock(provider, blockTimestamp + 19) await pair.sync(overrides) - const newPrice = encodePrice(expandTo18Decimals(6), expandTo18Decimals(2)) expect(await pair.price0CumulativeLast()).to.eq(initialPrice[0].mul(10).add(newPrice[0].mul(10))) expect(await pair.price1CumulativeLast()).to.eq(initialPrice[1].mul(10).add(newPrice[1].mul(10))) @@ -258,45 +291,45 @@ describe('DXswapPair', () => { await addLiquidity(token0Amount, token1Amount) const swapAmount = expandTo18Decimals(1) - const expectedOutputAmount = bigNumberify('996006981039903216') + const expectedOutputAmount = BigNumber.from('996006981039903216') await token1.transfer(pair.address, swapAmount) - await pair.connect(wallet).swap(expectedOutputAmount, 0, wallet.address, '0x', overrides) + await pair.connect(dxdao).swap(expectedOutputAmount, 0, dxdao.address, '0x', overrides) const expectedLiquidity = expandTo18Decimals(1000) - await pair.connect(wallet).transfer(pair.address, expectedLiquidity.sub(MINIMUM_LIQUIDITY)) - await pair.connect(wallet).burn(wallet.address, overrides) + await pair.connect(dxdao).transfer(pair.address, expectedLiquidity.sub(MINIMUM_LIQUIDITY)) + await pair.connect(dxdao).burn(dxdao.address, overrides) expect(await pair.totalSupply()).to.eq(MINIMUM_LIQUIDITY) }) - + it('feeTo:off, swapFee:0 attack', async () => { await feeSetter.setSwapFee(pair.address, 0) const token0Amount = expandTo18Decimals(1000) const token1Amount = expandTo18Decimals(1000) await addLiquidity(token0Amount, token1Amount) - + expect(await token0.balanceOf(pair.address)).to.eq(expandTo18Decimals(1000)) expect(await token1.balanceOf(pair.address)).to.eq(expandTo18Decimals(1000)) - expect(await token0.balanceOf(wallet.address)).to.eq(expandTo18Decimals(9000)) - expect(await token1.balanceOf(wallet.address)).to.eq(expandTo18Decimals(9000)) - + expect(await token0.balanceOf(dxdao.address)).to.eq(expandTo18Decimals(9000)) + expect(await token1.balanceOf(dxdao.address)).to.eq(expandTo18Decimals(9000)) + // Attack pool await token1.transfer(pair.address, expandTo18Decimals(1)) - await expect(pair.connect(wallet).swap(expandTo18Decimals(999), 0, wallet.address, '0x', overrides)).to.be.revertedWith( + await expect(pair.connect(dxdao).swap(expandTo18Decimals(999), 0, dxdao.address, '0x', overrides)).to.be.revertedWith( 'DXswapPair: K' ) await token0.transfer(pair.address, expandTo18Decimals(1)) - await expect(pair.connect(wallet).swap(0, expandTo18Decimals(999), wallet.address, '0x', overrides)).to.be.revertedWith( + await expect(pair.connect(dxdao).swap(0, expandTo18Decimals(999), dxdao.address, '0x', overrides)).to.be.revertedWith( 'DXswapPair: K' ) expect(await token0.balanceOf(pair.address)).to.eq(expandTo18Decimals(1001)) expect(await token1.balanceOf(pair.address)).to.eq(expandTo18Decimals(1001)) - expect(await token0.balanceOf(wallet.address)).to.eq(expandTo18Decimals(8999)) - expect(await token1.balanceOf(wallet.address)).to.eq(expandTo18Decimals(8999)) - + expect(await token0.balanceOf(dxdao.address)).to.eq(expandTo18Decimals(8999)) + expect(await token1.balanceOf(dxdao.address)).to.eq(expandTo18Decimals(8999)) + const expectedLiquidity = expandTo18Decimals(1000) - await pair.connect(wallet).transfer(pair.address, expectedLiquidity.sub(MINIMUM_LIQUIDITY)) - await pair.connect(wallet).burn(wallet.address, overrides) + await pair.connect(dxdao).transfer(pair.address, expectedLiquidity.sub(MINIMUM_LIQUIDITY)) + await pair.connect(dxdao).burn(dxdao.address, overrides) expect(await pair.totalSupply()).to.eq(MINIMUM_LIQUIDITY) }) @@ -308,22 +341,22 @@ describe('DXswapPair', () => { await addLiquidity(token0Amount, token1Amount) const swapAmount = expandTo18Decimals(1) - const expectedOutputAmount = bigNumberify('996006981039903216') + const expectedOutputAmount = BigNumber.from('996006981039903216') await token1.transfer(pair.address, swapAmount) - await pair.connect(wallet).swap(expectedOutputAmount, 0, wallet.address, '0x', overrides) + await pair.connect(dxdao).swap(expectedOutputAmount, 0, dxdao.address, '0x', overrides) const expectedLiquidity = expandTo18Decimals(1000) - await pair.connect(wallet).transfer(pair.address, expectedLiquidity.sub(MINIMUM_LIQUIDITY)) - await pair.connect(wallet).burn(wallet.address, overrides) + await pair.connect(dxdao).transfer(pair.address, expectedLiquidity.sub(MINIMUM_LIQUIDITY)) + await pair.connect(dxdao).burn(dxdao.address, overrides) expect(await pair.totalSupply()).to.eq(MINIMUM_LIQUIDITY.add('149850284580759')) expect(await pair.balanceOf(other.address)).to.eq('149850284580759') // using 1000 here instead of the symbolic MINIMUM_LIQUIDITY because the amounts only happen to be equal... // ...because the initial liquidity amounts were equal - expect(await token0.balanceOf(pair.address)).to.eq(bigNumberify(1000).add('149701010218466')) - expect(await token1.balanceOf(pair.address)).to.eq(bigNumberify(1000).add('150000112387782')) + expect(await token0.balanceOf(pair.address)).to.eq(BigNumber.from(1000).add('149701010218466')) + expect(await token1.balanceOf(pair.address)).to.eq(BigNumber.from(1000).add('150000112387782')) }) - + it('feeTo:on:0.025', async () => { await feeSetter.setFeeTo(other.address) await feeSetter.setProtocolFee(11) @@ -333,14 +366,14 @@ describe('DXswapPair', () => { await addLiquidity(token0Amount, token1Amount) const swapAmount = expandTo18Decimals(1) - const expectedOutputAmount = bigNumberify('996006981039903216') + const expectedOutputAmount = BigNumber.from('996006981039903216') await token1.transfer(pair.address, swapAmount) - await pair.connect(wallet).swap(expectedOutputAmount, 0, wallet.address, '0x', overrides) + await pair.connect(dxdao).swap(expectedOutputAmount, 0, dxdao.address, '0x', overrides) const expectedLiquidity = expandTo18Decimals(1000) - await pair.connect(wallet).transfer(pair.address, expectedLiquidity.sub(MINIMUM_LIQUIDITY)) - await pair.connect(wallet).burn(wallet.address, overrides) - const expectedTotalSupply = bigNumberify('124875234033868') + await pair.connect(dxdao).transfer(pair.address, expectedLiquidity.sub(MINIMUM_LIQUIDITY)) + await pair.connect(dxdao).burn(dxdao.address, overrides) + const expectedTotalSupply = BigNumber.from('124875234033868') expect((await pair.totalSupply()).div(ROUND_EXCEPTION)) .to.eq(MINIMUM_LIQUIDITY.add(expectedTotalSupply).div(ROUND_EXCEPTION)) @@ -350,11 +383,11 @@ describe('DXswapPair', () => { // using 1000 here instead of the symbolic MINIMUM_LIQUIDITY because the amounts only happen to be equal... // ...because the initial liquidity amounts were equal expect((await token0.balanceOf(pair.address)).div(ROUND_EXCEPTION)) - .to.eq(bigNumberify(1000).add('124750841848722').div(ROUND_EXCEPTION)) + .to.eq(BigNumber.from(1000).add('124750841848722').div(ROUND_EXCEPTION)) expect((await token1.balanceOf(pair.address)).div(ROUND_EXCEPTION)) - .to.eq(bigNumberify(1000).add('125000093656485').div(ROUND_EXCEPTION)) + .to.eq(BigNumber.from(1000).add('125000093656485').div(ROUND_EXCEPTION)) }) - + it('feeTo:on:0.1:swapFee:0.20', async () => { await feeSetter.setFeeTo(other.address) await feeSetter.setProtocolFee(1) @@ -367,12 +400,12 @@ describe('DXswapPair', () => { const swapAmount = expandTo18Decimals(1) const expectedOutputAmount = swapAmount.mul(98).div(100) await token1.transfer(pair.address, swapAmount) - await pair.connect(wallet).swap(expectedOutputAmount, 0, wallet.address, '0x', overrides) + await pair.connect(dxdao).swap(expectedOutputAmount, 0, dxdao.address, '0x', overrides) const expectedLiquidity = expandTo18Decimals(1000) - await pair.connect(wallet).transfer(pair.address, expectedLiquidity.sub(MINIMUM_LIQUIDITY)) - await pair.connect(wallet).burn(wallet.address, overrides) - const expectedTotalSupply = bigNumberify('4754954780487545') + await pair.connect(dxdao).transfer(pair.address, expectedLiquidity.sub(MINIMUM_LIQUIDITY)) + await pair.connect(dxdao).burn(dxdao.address, overrides) + const expectedTotalSupply = BigNumber.from('4754954780487545') expect((await pair.totalSupply()).div(ROUND_EXCEPTION)) .to.eq(MINIMUM_LIQUIDITY.add(expectedTotalSupply).div(ROUND_EXCEPTION)) @@ -382,11 +415,11 @@ describe('DXswapPair', () => { // using 1000 here instead of the symbolic MINIMUM_LIQUIDITY because the amounts only happen to be equal... // ...because the initial liquidity amounts were equal expect((await token0.balanceOf(pair.address)).div(ROUND_EXCEPTION)) - .to.eq(bigNumberify(1000).add('4750272337472507').div(ROUND_EXCEPTION)) + .to.eq(BigNumber.from(1000).add('4750272337472507').div(ROUND_EXCEPTION)) expect((await token1.balanceOf(pair.address)).div(ROUND_EXCEPTION)) - .to.eq(bigNumberify(1000).add('4759687103171089').div(ROUND_EXCEPTION)) + .to.eq(BigNumber.from(1000).add('4759687103171089').div(ROUND_EXCEPTION)) }) - + it('fail on trying to set swap fee higher than 10%', async () => { await feeSetter.setSwapFee(pair.address, 0) await feeSetter.setSwapFee(pair.address, 1000) diff --git a/test/DynamicFees.spec.ts b/test/DynamicFees.spec.ts index 65023bee8..1fe8aa5d6 100644 --- a/test/DynamicFees.spec.ts +++ b/test/DynamicFees.spec.ts @@ -1,169 +1,153 @@ -import chai, { expect } from 'chai' -import { Contract } from 'ethers' -import { solidity, MockProvider, createFixtureLoader } from 'ethereum-waffle' -import { BigNumber, bigNumberify } from 'ethers/utils' - -import { expandTo18Decimals, mineBlock, encodePrice } from './shared/utilities' +import { expect } from 'chai' +import { ethers } from "hardhat"; +import { BigNumber } from 'ethers' import { pairFixture } from './shared/fixtures' -import { AddressZero } from 'ethers/constants' +import { DXswapFactory, DXswapFeeReceiver, DXswapFeeSetter, DXswapPair, ERC20 } from './../typechain' +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers' +import '@nomiclabs/hardhat-ethers' +import { calcProtocolFee, expandTo18Decimals, sqrt } from './shared/utilities'; -const MINIMUM_LIQUIDITY = bigNumberify(10).pow(3) -const SWAP_DEN = bigNumberify(10000); +const SWAP_DEN = BigNumber.from(10000); // Using a Round error exception of 0.00000000000001 in ETH Unit, this equals 10000 in WEI unit, same value used as denominator for swap fee calculation -const ROUND_EXCEPTION = bigNumberify(10000) - -chai.use(solidity) +const ROUND_EXCEPTION = BigNumber.from(10).pow(4) const overrides = { gasLimit: 9999999 } -describe('DynamicFees', () => { - const provider = new MockProvider({ - hardfork: 'istanbul', - mnemonic: 'horn horn horn horn horn horn horn horn horn horn horn horn', - gasLimit: 9999999 +describe('DXswapFeeReceiver', () => { + const provider = ethers.provider + let dxdao: SignerWithAddress + let tokenOwner: SignerWithAddress + let protocolFeeReceiver: SignerWithAddress + let fallbackReceiver: SignerWithAddress + let other: SignerWithAddress + let factory: DXswapFactory + let feeSetter: DXswapFeeSetter + let feeReceiver: DXswapFeeReceiver + + let token0: ERC20 + let token1: ERC20 + let pair: DXswapPair + + beforeEach('assign dxdaos', async function () { + const signers = await ethers.getSigners() + dxdao = signers[0] + tokenOwner = signers[1] + protocolFeeReceiver = signers[2] + fallbackReceiver = signers[3] + other = signers[4] }) - const [dxdao, wallet, protocolFeeReceiver, other] = provider.getWallets() - const loadFixture = createFixtureLoader(provider, [dxdao, wallet, protocolFeeReceiver]) - - let factory: Contract - let token0: Contract - let token1: Contract - let pair: Contract - let feeSetter: Contract - - beforeEach(async () => { - const fixture = await loadFixture(pairFixture) - factory = fixture.factory + + beforeEach('deploy fixture', async () => { + const fixture = await pairFixture(provider, [dxdao, protocolFeeReceiver, fallbackReceiver]) + factory = fixture.dxswapFactory + feeSetter = fixture.feeSetter + feeReceiver = fixture.feeReceiver token0 = fixture.token0 token1 = fixture.token1 - pair = fixture.pair - feeSetter = fixture.feeSetter + pair = fixture.dxswapPair01 }) // Adds liquidity to the token pair async function addLiquidity(token0Amount: BigNumber, token1Amount: BigNumber) { await token0.transfer(pair.address, token0Amount) await token1.transfer(pair.address, token1Amount) - await pair.mint(wallet.address, overrides) + await pair.mint(dxdao.address, overrides) } - + // Calculate the total supply based on actual reserves async function calcTotalSupply() { const [token0Reserve, token1Reserve, _] = await pair.getReserves() - return bigNumberify(Math.sqrt(token0Reserve.mul(token1Reserve)).toString()) - } - - // Calculate how much will be payed from liquidity as protocol fee in the next mint/burn - async function calcProtocolFee() { - const [token0Reserve, token1Reserve, _] = await pair.getReserves() - const kLast = await pair.kLast() - const feeTo = await factory.feeTo() - const protocolFeeDenominator = await factory.protocolFeeDenominator() - const totalSupply = await pair.totalSupply() - let rootK, rootKLast; - if (feeTo != AddressZero) { - // Check for math overflow when dealing with big big balances - if (Math.sqrt((token0Reserve).mul(token1Reserve)) > Math.pow(10, 19)) { - const denominator = 10 ** ( Number(Math.log10(Math.sqrt((token0Reserve).mul(token1Reserve))).toFixed(0)) - 18); - rootK = bigNumberify((Math.sqrt( - token0Reserve.mul(token1Reserve) - ) / denominator).toString()) - rootKLast = bigNumberify((Math.sqrt(kLast) / denominator).toString()) - } else { - rootK = bigNumberify(Math.sqrt((token0Reserve).mul(token1Reserve)).toString()) - rootKLast = bigNumberify(Math.sqrt(kLast).toString()) - } - - return (totalSupply.mul(rootK.sub(rootKLast))) - .div(rootK.mul(protocolFeeDenominator).add(rootKLast)) - } else { - return bigNumberify(0) - } - } - + return BigNumber.from(sqrt((token0Reserve.mul(token1Reserve)))) + } + + // Calculate the output of tokens for an specific input - async function calcOutput(token0In : BigNumber, token1In: BigNumber) { + async function calcOutput(token0In: BigNumber, token1In: BigNumber) { const reserves = await pair.getReserves() const token0Reserve = reserves[0] const token1Reserve = reserves[1] const swapFee = await pair.swapFee() const kReserve = token0Reserve.mul(token1Reserve) - + const token0Out = token0Reserve.sub( kReserve.div(token1Reserve.add(token1In.mul(SWAP_DEN.sub(swapFee)).div(SWAP_DEN))) - ).sub(bigNumberify(1)) + ).sub(BigNumber.from(1)) const token1Out = token1Reserve.sub( kReserve.div(token0Reserve.add(token0In.mul(SWAP_DEN.sub(swapFee)).div(SWAP_DEN))) - ).sub(bigNumberify(1)) + ).sub(BigNumber.from(1)) - return [token0Out < 0 ? bigNumberify(0) : token0Out, token1Out < 0 ? bigNumberify(0) : token1Out]; + return [token0Out < BigNumber.from(0) ? BigNumber.from(0) : token0Out, token1Out < BigNumber.from(0) ? BigNumber.from(0) : token1Out]; } - + // Execute a transfer and swap, since the tokens has to be transfered before traded - async function execTransferAndSwap(_token0In : BigNumber, _token1In: BigNumber) { + async function execTransferAndSwap(_token0In: BigNumber, _token1In: BigNumber) { const reserveBefore = await pair.getReserves() - + // check if tokens are sorted + const tkn0address = await pair.token0() + const tkn0 = token0.address === tkn0address ? token0 : token1 + const tkn1 = token0.address === tkn0address ? token1 : token0 + if (_token0In.gt(0)) - await token0.transfer(pair.address, _token0In) + await tkn0.transfer(pair.address, _token0In) if (_token1In.gt(0)) - await token1.transfer(pair.address, _token1In) + await tkn1.transfer(pair.address, _token1In) const outputs = await calcOutput(_token0In, _token1In); - await pair.swap(outputs[0], outputs[1], wallet.address, '0x', overrides) - - // Check value swaped between wallet and pair - expect(await token0.balanceOf(pair.address)).to.eq(reserveBefore[0].add(_token0In).sub(outputs[0])) - expect(await token1.balanceOf(pair.address)).to.eq(reserveBefore[1].add(_token1In).sub(outputs[1])) - const totalSupplyToken0 = await token0.totalSupply() - const totalSupplyToken1 = await token1.totalSupply() - expect(await token0.balanceOf(wallet.address)) + await pair.swap(outputs[0], outputs[1], dxdao.address, '0x', overrides) + + // Check value swaped between dxdao and pair + expect(await tkn0.balanceOf(pair.address)).to.eq(reserveBefore[0].add(_token0In).sub(outputs[0])) + expect(await tkn1.balanceOf(pair.address)).to.eq(reserveBefore[1].add(_token1In).sub(outputs[1])) + const totalSupplyToken0 = await tkn0.totalSupply() + const totalSupplyToken1 = await tkn1.totalSupply() + expect(await tkn0.balanceOf(dxdao.address)) .to.eq(totalSupplyToken0.sub(reserveBefore[0]).sub(_token0In).add(outputs[0])) - expect(await token1.balanceOf(wallet.address)) + expect(await tkn1.balanceOf(dxdao.address)) .to.eq(totalSupplyToken1.sub(reserveBefore[1]).sub(_token1In).add(outputs[1])) - + return outputs; } - + it('feeTo:on, swapFee:default, protocolFeeDenominator:default', async () => { await feeSetter.setFeeTo(other.address) expect(await factory.protocolFeeDenominator()).to.eq(9) await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) - - await execTransferAndSwap(expandTo18Decimals(1), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(1)); - - const toMintForProtocol = await calcProtocolFee(); + + await execTransferAndSwap(expandTo18Decimals(1), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(1)); + + const toMintForProtocol = await calcProtocolFee(pair, factory); await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) - expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) + expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) }) - + it('feeTo:on, swapFee:default, protocolFeeDenominator:0.025%', async () => { await feeSetter.setFeeTo(other.address) await feeSetter.setProtocolFee(11) expect(await factory.protocolFeeDenominator()).to.eq(11) - + await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) - - await execTransferAndSwap(expandTo18Decimals(1), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(1)); - await execTransferAndSwap(expandTo18Decimals(2), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(2)); - await execTransferAndSwap(expandTo18Decimals(4), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(4)); - await execTransferAndSwap(expandTo18Decimals(6), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(6)); - - const toMintForProtocol = await calcProtocolFee(); + + await execTransferAndSwap(expandTo18Decimals(1), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(1)); + await execTransferAndSwap(expandTo18Decimals(2), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(2)); + await execTransferAndSwap(expandTo18Decimals(4), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(4)); + await execTransferAndSwap(expandTo18Decimals(6), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(6)); + + const toMintForProtocol = await calcProtocolFee(pair, factory); await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) - + }) - + it('feeTo:on, swapFee:0.2%, protocolFeeDenominator:0.1%', async () => { await feeSetter.setFeeTo(other.address) await feeSetter.setProtocolFee(1) @@ -172,121 +156,121 @@ describe('DynamicFees', () => { expect(await pair.swapFee()).to.eq(20) await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) - - await execTransferAndSwap(expandTo18Decimals(1), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(1)); - await execTransferAndSwap(expandTo18Decimals(2), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(2)); - - const toMintForProtocol = await calcProtocolFee(); + + await execTransferAndSwap(expandTo18Decimals(1), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(1)); + await execTransferAndSwap(expandTo18Decimals(2), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(2)); + + const toMintForProtocol = await calcProtocolFee(pair, factory); await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) }) - + it('feeTo:on, swapFee:0.2%, protocolFeeDenominator:disabled', async () => { await feeSetter.setSwapFee(pair.address, 20) expect(await factory.protocolFeeDenominator()).to.eq(9) expect(await pair.swapFee()).to.eq(20) await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) - - await execTransferAndSwap(expandTo18Decimals(1), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(1)); - await execTransferAndSwap(expandTo18Decimals(2), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(2)); - - const toMintForProtocol = await calcProtocolFee(); + + await execTransferAndSwap(expandTo18Decimals(1), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(1)); + await execTransferAndSwap(expandTo18Decimals(2), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(2)); + + const toMintForProtocol = await calcProtocolFee(pair, factory); await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(0) }) - + it('MULTIPLE_TRADES:feeTo:on, swapFee:default, protocolFeeDenominator:default', async () => { await feeSetter.setFeeTo(other.address) - + await addLiquidity(expandTo18Decimals(800), expandTo18Decimals(10)) - - await execTransferAndSwap(expandTo18Decimals(100), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(50)); - await execTransferAndSwap(expandTo18Decimals(20), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(200)); - await execTransferAndSwap(expandTo18Decimals(40), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(66)); - await execTransferAndSwap(expandTo18Decimals(1), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(5)); - - const toMintForProtocol = await calcProtocolFee(); + + await execTransferAndSwap(expandTo18Decimals(100), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(50)); + await execTransferAndSwap(expandTo18Decimals(20), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(200)); + await execTransferAndSwap(expandTo18Decimals(40), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(66)); + await execTransferAndSwap(expandTo18Decimals(1), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(5)); + + const toMintForProtocol = await calcProtocolFee(pair, factory); await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) - expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) + expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) }) - + it('MULTIPLE_TRADES:feeTo:on, swapFee:0.01, protocolFeeDenominator:0.0005', async () => { await feeSetter.setFeeTo(other.address) await feeSetter.setSwapFee(pair.address, 1) await feeSetter.setProtocolFee(19) expect(await factory.protocolFeeDenominator()).to.eq(19) expect(await pair.swapFee()).to.eq(1) - + await addLiquidity(expandTo18Decimals(800), expandTo18Decimals(10)) - - await execTransferAndSwap(expandTo18Decimals(100), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(50)); - await execTransferAndSwap(expandTo18Decimals(20), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(200)); - await execTransferAndSwap(expandTo18Decimals(40), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(66)); - await execTransferAndSwap(expandTo18Decimals(1), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(5)); - - const toMintForProtocol = await calcProtocolFee(); + + await execTransferAndSwap(expandTo18Decimals(100), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(50)); + await execTransferAndSwap(expandTo18Decimals(20), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(200)); + await execTransferAndSwap(expandTo18Decimals(40), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(66)); + await execTransferAndSwap(expandTo18Decimals(1), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(5)); + + const toMintForProtocol = await calcProtocolFee(pair, factory); await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) - expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) + expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) }) - + it('MULTIPLE_TRADES:feeTo:on, swapFee:0, protocolFeeDenominator:default', async () => { await feeSetter.setFeeTo(other.address) await feeSetter.setSwapFee(pair.address, 0) expect(await pair.swapFee()).to.eq(0) - + await addLiquidity(expandTo18Decimals(800), expandTo18Decimals(10)) - - await execTransferAndSwap(expandTo18Decimals(100), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(50)); - await execTransferAndSwap(expandTo18Decimals(20), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(200)); - await execTransferAndSwap(expandTo18Decimals(40), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(66)); - await execTransferAndSwap(expandTo18Decimals(1), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(5)); - - const toMintForProtocol = await calcProtocolFee(); - + + await execTransferAndSwap(expandTo18Decimals(100), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(50)); + await execTransferAndSwap(expandTo18Decimals(20), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(200)); + await execTransferAndSwap(expandTo18Decimals(40), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(66)); + await execTransferAndSwap(expandTo18Decimals(1), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(5)); + + const toMintForProtocol = await calcProtocolFee(pair, factory); + await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) - expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) + expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) }) - + it('MULTIPLE_TRADES:feeTo:on, swapFee:0, protocolFeeDenominator:0', async () => { await feeSetter.setSwapFee(pair.address, 0) expect(await pair.swapFee()).to.eq(0) - + await addLiquidity(expandTo18Decimals(800), expandTo18Decimals(10)) - - await execTransferAndSwap(expandTo18Decimals(100), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(50)); - await execTransferAndSwap(expandTo18Decimals(20), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(200)); - await execTransferAndSwap(expandTo18Decimals(40), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(66)); - await execTransferAndSwap(expandTo18Decimals(1), bigNumberify(0)); - await execTransferAndSwap(bigNumberify(0), expandTo18Decimals(5)); - - const toMintForProtocol = await calcProtocolFee(); + + await execTransferAndSwap(expandTo18Decimals(100), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(50)); + await execTransferAndSwap(expandTo18Decimals(20), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(200)); + await execTransferAndSwap(expandTo18Decimals(40), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(66)); + await execTransferAndSwap(expandTo18Decimals(1), BigNumber.from(0)); + await execTransferAndSwap(BigNumber.from(0), expandTo18Decimals(5)); + + const toMintForProtocol = await calcProtocolFee(pair, factory); await addLiquidity(expandTo18Decimals(5), expandTo18Decimals(10)) - expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) + expect((await pair.balanceOf(other.address)).div(ROUND_EXCEPTION)).to.eq(toMintForProtocol.div(ROUND_EXCEPTION)) }) - + }) diff --git a/test/shared/fixtures.ts b/test/shared/fixtures.ts index faa508f5e..3b5ac0446 100644 --- a/test/shared/fixtures.ts +++ b/test/shared/fixtures.ts @@ -1,93 +1,139 @@ -import { Contract, Wallet } from 'ethers' -import { Web3Provider } from 'ethers/providers' -import { defaultAbiCoder } from 'ethers/utils' -import { deployContract } from 'ethereum-waffle' - import { expandTo18Decimals } from './utilities' +import { DXswapFactory, DXswapFactory__factory, DXswapPair, DXswapPair__factory, WETH9, WETH9__factory, DXswapFeeSetter, DXswapFeeReceiver, DXswapFeeSetter__factory, DXswapFeeReceiver__factory, ERC20, DXswapERC20, ERC20__factory, DXswapDeployer__factory, DXswapERC20__factory, DXswapFeeSplitter__factory, DXswapFeeSplitter } from './../../typechain' +import { defaultAbiCoder } from 'ethers/lib/utils'; +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { JsonRpcProvider } from '@ethersproject/providers'; -import ERC20 from '../../build/ERC20.json' -import WETH9 from '../../build/WETH9.json' -import DXswapFactory from '../../build/DXswapFactory.json' -import DXswapPair from '../../build/DXswapPair.json' -import DXswapDeployer from '../../build/DXswapDeployer.json' -import DXswapFeeSetter from '../../build/DXswapFeeSetter.json' -import DXswapFeeReceiver from '../../build/DXswapFeeReceiver.json' -interface FactoryFixture { - factory: Contract - feeSetter: Contract - feeReceiver: Contract - WETH: Contract +const overrides = { + gasLimit: 29999999 } +const TOTAL_SUPPLY = expandTo18Decimals(10000) -const overrides = { - gasLimit: 9999999 +interface FactoryFixture { + dxswapFactory: DXswapFactory + feeSetter: DXswapFeeSetter + feeReceiver: DXswapFeeReceiver + feeSplitter: DXswapFeeSplitter + WETH: WETH9 } -export async function factoryFixture(provider: Web3Provider, [dxdao, ethReceiver]: Wallet[]): Promise { - const WETH = await deployContract(dxdao, WETH9) - const dxSwapDeployer = await deployContract( - dxdao, DXswapDeployer, [ ethReceiver.address, dxdao.address, WETH.address, [], [], [], ], overrides - ) - await dxdao.sendTransaction({to: dxSwapDeployer.address, gasPrice: 0, value: 1}) +export async function factoryFixture(provider: JsonRpcProvider, [dxdao, protocolFeeReceiver, fallbackReceiver]: SignerWithAddress[]): Promise { + // deploy weth + const WETH = await new WETH9__factory(dxdao).deploy() + + const dxSwapDeployer = await new DXswapDeployer__factory(dxdao).deploy(protocolFeeReceiver.address, dxdao.address, WETH.address, [], [], [], overrides) + await dxdao.sendTransaction({ to: dxSwapDeployer.address, gasPrice: 20000000000, value: expandTo18Decimals(1) }) + const deployTx = await dxSwapDeployer.deploy() const deployTxReceipt = await provider.getTransactionReceipt(deployTx.hash); const factoryAddress = deployTxReceipt.logs !== undefined ? defaultAbiCoder.decode(['address'], deployTxReceipt.logs[0].data)[0] : null - const factory = new Contract(factoryAddress, JSON.stringify(DXswapFactory.abi), provider).connect(dxdao) - const feeSetterAddress = await factory.feeToSetter() - const feeSetter = new Contract(feeSetterAddress, JSON.stringify(DXswapFeeSetter.abi), provider).connect(dxdao) - const feeReceiverAddress = await factory.feeTo() - const feeReceiver = new Contract(feeReceiverAddress, JSON.stringify(DXswapFeeReceiver.abi), provider).connect(dxdao) - return { factory, feeSetter, feeReceiver, WETH } + + // deploy DXswapFactory + const dxswapFactory = (await new DXswapFactory__factory(dxdao).deploy(dxdao.address)).attach(factoryAddress) + + // deploy FeeSetter + const feeSetterAddress = await dxswapFactory.feeToSetter() + const feeSetter = (await new DXswapFeeSetter__factory(dxdao).deploy(dxdao.address, dxswapFactory.address)).attach(feeSetterAddress) + + // deploy FeeReceiver + const feeReceiverAddress = await dxswapFactory.feeTo() + const feeReceiver = (await new DXswapFeeReceiver__factory(dxdao).deploy(dxdao.address, dxswapFactory.address, WETH.address, protocolFeeReceiver.address, fallbackReceiver.address)).attach(feeReceiverAddress) + + // TODO import contract address from mainnet + // deplot FeeSplitter + const feeSplitter = await new DXswapFeeSplitter__factory(dxdao).deploy(dxdao.address, dxswapFactory.address, WETH.address, protocolFeeReceiver.address, fallbackReceiver.address) + + + return { dxswapFactory, feeSetter, feeReceiver, feeSplitter, WETH } } interface PairFixture extends FactoryFixture { - token0: Contract - token1: Contract - pair: Contract - wethPair: Contract + token0: ERC20 + token1: ERC20 + token2: ERC20 + token3: ERC20 + dxswapPair01: DXswapPair + dxswapPair23: DXswapPair + dxswapPair03: DXswapPair + wethToken1Pair: DXswapPair + wethToken0Pair: DXswapPair } -export async function pairFixture(provider: Web3Provider, [dxdao, wallet, ethReceiver]: Wallet[]): Promise { - const tokenA = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) - const tokenB = await deployContract(wallet, ERC20, [expandTo18Decimals(10000)], overrides) - const WETH = await deployContract(wallet, WETH9) - await WETH.deposit({value: expandTo18Decimals(1000)}) +export async function pairFixture(provider: JsonRpcProvider, [dxdao, protocolFeeReceiver, fallbackReceiver]: SignerWithAddress[]): Promise { + // deploy tokens + const tokenA = await new ERC20__factory(dxdao).deploy(TOTAL_SUPPLY) + const tokenB = await new ERC20__factory(dxdao).deploy(TOTAL_SUPPLY) + const tokenC = await new ERC20__factory(dxdao).deploy(TOTAL_SUPPLY) + const tokenD = await new ERC20__factory(dxdao).deploy(TOTAL_SUPPLY) + + // deploy weth + const WETH = await new WETH9__factory(dxdao).deploy() + await WETH.connect(dxdao).deposit({ value: expandTo18Decimals(100) }) + + //sort tokens const token0 = tokenA.address < tokenB.address ? tokenA : tokenB const token1 = token0.address === tokenA.address ? tokenB : tokenA - - const dxSwapDeployer = await deployContract( - dxdao, DXswapDeployer, [ - ethReceiver.address, - dxdao.address, - WETH.address, - [token0.address, token1.address], - [token1.address, WETH.address], - [15, 15], - ], overrides - ) - await dxdao.sendTransaction({to: dxSwapDeployer.address, gasPrice: 0, value: 1}) + + const token2 = tokenC.address < tokenD.address ? tokenC : tokenD + const token3 = token2.address === tokenC.address ? tokenD : tokenC + + const dxSwapDeployer = await new DXswapDeployer__factory(dxdao).deploy(protocolFeeReceiver.address, dxdao.address, WETH.address, + [token0.address, token1.address, token2.address, token0.address, token0.address], + [token1.address, WETH.address, token3.address, token3.address, WETH.address], + [15, 15, 15, 15, 15], + overrides) + + await dxdao.sendTransaction({ to: dxSwapDeployer.address, gasPrice: 20000000000, value: expandTo18Decimals(1) }) + const deployTx = await dxSwapDeployer.deploy() const deployTxReceipt = await provider.getTransactionReceipt(deployTx.hash); const factoryAddress = deployTxReceipt.logs !== undefined ? defaultAbiCoder.decode(['address'], deployTxReceipt.logs[0].data)[0] : null - - const factory = new Contract(factoryAddress, JSON.stringify(DXswapFactory.abi), provider).connect(dxdao) - const feeSetterAddress = await factory.feeToSetter() - const feeSetter = new Contract(feeSetterAddress, JSON.stringify(DXswapFeeSetter.abi), provider).connect(dxdao) - const feeReceiverAddress = await factory.feeTo() - const feeReceiver = new Contract(feeReceiverAddress, JSON.stringify(DXswapFeeReceiver.abi), provider).connect(dxdao) - const pair = new Contract( - await factory.getPair(token0.address, token1.address), - JSON.stringify(DXswapPair.abi), provider - ).connect(dxdao) - const wethPair = new Contract( - await factory.getPair(token1.address, WETH.address), - JSON.stringify(DXswapPair.abi), provider - ).connect(dxdao) - - return { factory, feeSetter, feeReceiver, WETH, token0, token1, pair, wethPair } + + // deploy DXswapFactory + const dxswapFactory = (await new DXswapFactory__factory(dxdao).deploy(dxdao.address)).attach(factoryAddress) + + // deploy FeeSetter + const feeSetterAddress = await dxswapFactory.feeToSetter() + const feeSetter = (await new DXswapFeeSetter__factory(dxdao).deploy(dxdao.address, dxswapFactory.address)).attach(feeSetterAddress) + + // deploy FeeReceiver + const feeReceiverAddress = await dxswapFactory.feeTo() + const feeReceiver = (await new DXswapFeeReceiver__factory(dxdao).deploy(dxdao.address, dxswapFactory.address, WETH.address, protocolFeeReceiver.address, fallbackReceiver.address)).attach(feeReceiverAddress) + // set receivers + feeReceiver.connect(dxdao).changeReceivers(protocolFeeReceiver.address, fallbackReceiver.address) + + //deploy FeeSplitter + const feeSplitter = await new DXswapFeeSplitter__factory(dxdao).deploy(dxdao.address, dxswapFactory.address, WETH.address, protocolFeeReceiver.address, fallbackReceiver.address) + // set receivers + feeSplitter.connect(dxdao).changeReceivers(protocolFeeReceiver.address, fallbackReceiver.address) + + // initialize DXswapPair factory + const dxSwapPair_factory = await new DXswapPair__factory(dxdao).deploy() + + // create pairs + const pairAddress1 = await dxswapFactory.getPair(token0.address, token1.address) + const dxswapPair01 = dxSwapPair_factory.attach(pairAddress1) + + // await dxswapFactory.createPair(token2.address, token3.address, overrides) + const pairAddress2 = await dxswapFactory.getPair(token2.address, token3.address) + const dxswapPair23 = dxSwapPair_factory.attach(pairAddress2) + + // await dxswapFactory.createPair(token0.address, token3.address, overrides) + const pairAddress3 = await dxswapFactory.getPair(token0.address, token3.address) + const dxswapPair03 = dxSwapPair_factory.attach(pairAddress3) + + // create weth/erc20 pair + const WETHPairAddress = await dxswapFactory.getPair(token1.address, WETH.address) + const wethToken1Pair = dxSwapPair_factory.attach(WETHPairAddress) + + // create weth/erc20 pair + const WETH0PairAddress = await dxswapFactory.getPair(token0.address, WETH.address) + const wethToken0Pair = dxSwapPair_factory.attach(WETH0PairAddress) + + return { dxswapFactory, feeSetter, feeReceiver, feeSplitter, WETH, token0, token1, token2, token3, dxswapPair01, dxswapPair23, dxswapPair03, wethToken1Pair, wethToken0Pair } } diff --git a/test/shared/utilities.ts b/test/shared/utilities.ts index 81115166c..cc0164bc5 100644 --- a/test/shared/utilities.ts +++ b/test/shared/utilities.ts @@ -1,21 +1,22 @@ -import { Contract } from 'ethers' -import { Web3Provider } from 'ethers/providers' +import { BigNumber, Contract, providers, constants } from 'ethers' import { - BigNumber, - bigNumberify, getAddress, keccak256, defaultAbiCoder, toUtf8Bytes, solidityPack -} from 'ethers/utils' +} from 'ethers/lib/utils' +import { bignumber, log10 } from 'mathjs' +import { DXswapFactory, DXswapPair } from '../../typechain' + +const { AddressZero } = constants const PERMIT_TYPEHASH = keccak256( toUtf8Bytes('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)') ) export function expandTo18Decimals(n: number): BigNumber { - return bigNumberify(n).mul(bigNumberify(10).pow(18)) + return BigNumber.from(n).mul(BigNumber.from(10).pow(18)) } function getDomainSeparator(name: string, tokenAddress: string) { @@ -79,21 +80,59 @@ export async function getApprovalDigest( ) } -export async function mineBlock(provider: Web3Provider, timestamp: number): Promise { - await new Promise(async (resolve, reject) => { - ;(provider._web3Provider.sendAsync as any)( - { jsonrpc: '2.0', method: 'evm_mine', params: [timestamp] }, - (error: any, result: any): void => { - if (error) { - reject(error) - } else { - resolve(result) - } - } - ) - }) +export async function mineBlock(provider: providers.JsonRpcProvider, timestamp: number, force = false): Promise { + if (force) { + await provider.send("evm_setNextBlockTimestamp", [timestamp]) + return provider.send("evm_mine", []) + } + return provider.send('evm_mine', [timestamp]) } export function encodePrice(reserve0: BigNumber, reserve1: BigNumber) { - return [reserve1.mul(bigNumberify(2).pow(112)).div(reserve0), reserve0.mul(bigNumberify(2).pow(112)).div(reserve1)] + return [reserve1.mul(BigNumber.from(2).pow(112)).div(reserve0), reserve0.mul(BigNumber.from(2).pow(112)).div(reserve1)] +} + +export function sqrt(value: BigNumber) { + const ONE = BigNumber.from(1); + const TWO = BigNumber.from(2); + const x = BigNumber.from(value); + let z = x.add(ONE).div(TWO); + let y = x; + while (z.sub(y).isNegative()) { + y = z; + z = x.div(z).add(z).div(TWO); + } + return y; } + +// Calculate how much will be payed from liquidity as protocol fee in the next mint/burn +export async function calcProtocolFee(_pair: DXswapPair, _factory: DXswapFactory) { + const [token0Reserve, token1Reserve, _] = await _pair.getReserves() + const kLast = await _pair.kLast() + const feeTo = await _factory.feeTo() + const protocolFeeDenominator = await _factory.protocolFeeDenominator() + const totalSupply = await _pair.totalSupply() + let rootK: BigNumber + let rootKLast: BigNumber + if (feeTo != AddressZero) { + // Check for math overflow when dealing with big big balances + const balance = sqrt((token0Reserve).mul(token1Reserve)) + const balanceBN = balance ? bignumber(balance.toString()) : bignumber(0) + + if ((BigNumber.from(sqrt(token0Reserve)).mul(token1Reserve)).gt(BigNumber.from(10).pow(19))) { + const balanceBaseLog10 = (log10(balanceBN)).toPrecision(1) + const denominator = BigNumber.from(10).pow(BigNumber.from(Number(balanceBaseLog10)).sub(BigNumber.from(18))); + + rootK = BigNumber.from(sqrt(token0Reserve.mul(token1Reserve)).div(denominator)) + rootKLast = BigNumber.from(sqrt(kLast).div(denominator)) + } else { + rootK = (BigNumber.from(sqrt(token0Reserve)).mul(token1Reserve)) + rootKLast = BigNumber.from(sqrt(kLast)) + } + + return (totalSupply.mul(rootK.sub(rootKLast))) + .div(rootK.mul(protocolFeeDenominator).add(rootKLast)) + } else { + return BigNumber.from(0) + } +} \ No newline at end of file diff --git a/truffle-config.js b/truffle-config.js deleted file mode 100644 index 8043a0b49..000000000 --- a/truffle-config.js +++ /dev/null @@ -1,79 +0,0 @@ -const HDWalletProvider = require('truffle-hdwallet-provider') -require('dotenv').config(); - -mnemonic = process.env.KEY_MNEMONIC; -infuraApiKey = process.env.KEY_INFURA_API_KEY; - -module.exports = { - networks: { - rpc: { - network_id: '*', - host: 'localhost', - port: 8545, - gas: 9000000, - gasPrice: 10000000000 //10 Gwei - }, - develop: { - network_id: '66', - host: 'localhost', - port: 8545, - gas: 9000000, - gasPrice: 10000000000 //10 Gwei - }, - mainnet: { - provider: function () { - return new HDWalletProvider(mnemonic, `https://mainnet.infura.io/v3/${infuraApiKey}`) - }, - network_id: '1', - gas: 9000000, - gasPrice: 10000000000 //10 Gwei - }, - rinkeby: { - provider: function () { - return new HDWalletProvider(mnemonic, `https://rinkeby.infura.io/v3/${infuraApiKey}`) - }, - network_id: '4', - gas: 9000000, - gasPrice: 10000000000 //10 Gwei - }, - ropsten: { - provider: function () { - return new HDWalletProvider(mnemonic, `https://ropsten.infura.io/v3/${infuraApiKey}`) - }, - network_id: '3', - gas: 8000000, - gasPrice: 10000000000 //10 Gwei - }, - kovan: { - provider: function () { - return new HDWalletProvider(mnemonic, `https://kovan.infura.io/v3/${infuraApiKey}`) - }, - network_id: '42', - gas: 9000000, - gasPrice: 10000000000 //10 Gwei - }, - arbitrumTestnetV3: { - provider: function() { - return wrapProvider(new HDWalletProvider(mnemonic, 'https://kovan3.arbitrum.io/rpc')) - }, - network_id: '79377087078960', - gas: 9000000, - gasPrice: 10000000000 //10 Gwei - } - }, - build: {}, - compilers: { - solc: { - version: '0.5.16', - settings: { - evmVersion: 'istanbul', - } - } - }, - solc: { - optimizer: { - enabled: true, - runs: 200 - } - }, -} diff --git a/yarn.lock b/yarn.lock index bfc1c52ac..5ec34e1ef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,49 @@ # yarn lockfile v1 +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/generator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.6.tgz#9ab2d46d3cbf631f0e80f72e72874a04c3fc12a9" + integrity sha512-AIwwoOS8axIC5MZbhNHRLKi3D+DMpvDf9XUcu3pIVAfOHFT45f4AoDAltRbHIQomCipkCZxrNkfpOEHhJz/VKw== + dependencies: + "@babel/types" "^7.18.6" + "@jridgewell/gen-mapping" "^0.3.0" + jsesc "^2.5.1" + +"@babel/helper-environment-visitor@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz#b7eee2b5b9d70602e59d1a6cad7dd24de7ca6cd7" + integrity sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q== + +"@babel/helper-function-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz#8334fecb0afba66e6d87a7e8c6bb7fed79926b83" + integrity sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw== + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.6" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-module-imports@^7.12.5": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" @@ -14,11 +57,37 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-validator-identifier@^7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.18.6", "@babel/parser@^7.7.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.6.tgz#845338edecad65ebffef058d3be851f1d28a63bc" + integrity sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw== + "@babel/plugin-transform-runtime@^7.5.5": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.10.tgz#af0fded4e846c4b37078e8e5d06deac6cd848562" @@ -28,6 +97,13 @@ "@babel/helper-plugin-utils" "^7.10.4" semver "^5.5.1" +"@babel/runtime@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.6.tgz#6a1ef59f838debd670421f8c7f2cbb8da9751580" + integrity sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/runtime@^7.5.5": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" @@ -35,6 +111,31 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/template@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" + integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/types" "^7.18.6" + +"@babel/traverse@^7.7.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.6.tgz#a228562d2f46e89258efa4ddd0416942e2fd671d" + integrity sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/types" "^7.18.6" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@^7.12.5": version "7.12.12" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.12.tgz#4608a6ec313abbd87afa55004d373ad04a96c299" @@ -44,33 +145,193 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" -"@ethereum-waffle/chai@^2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-2.4.1.tgz#47a6cc2eebaca775b169b524a6dc0cfcf3d3c22d" - integrity sha512-EMH8UtwhsSaCeUIlH72JPaUGhYTIeHJW0aVSM9EXKh0SMNJpptaHCz5dFpjoRwvhtVwOynuCc7SpFXMq7p8T0A== +"@babel/types@^7.18.6", "@babel/types@^7.7.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.6.tgz#5d781dd10a3f0c9f1f931bd19de5eb26ec31acf0" + integrity sha512-NdBNzPDwed30fZdDQtVR7ZgaO4UKjuaQFH9VArS+HMnurlOY0JWN+4ROlu/iapMFwjRQU4pOG4StZfDmulEwGA== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + +"@cspotcode/source-map-consumer@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" + integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== + +"@cspotcode/source-map-support@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5" + integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA== dependencies: - ethers "^4.0.45" + "@cspotcode/source-map-consumer" "0.8.0" -"@ethereum-waffle/compiler@^2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/compiler/-/compiler-2.4.1.tgz#8a1f0b4c5be8e22408a391944d3ecc7fc92e49a5" - integrity sha512-f+o79gKFzXaan2IOvjYRFlnR2ae3bzDET6otiH9N27hYUx5w0AQRNDkQEpVcS+sjUL9WV6ZzcFlXcVsM6144fg== +"@ensdomains/ens@^0.4.4": + version "0.4.5" + resolved "https://registry.yarnpkg.com/@ensdomains/ens/-/ens-0.4.5.tgz#e0aebc005afdc066447c6e22feb4eda89a5edbfc" + integrity sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw== + dependencies: + bluebird "^3.5.2" + eth-ens-namehash "^2.0.8" + solc "^0.4.20" + testrpc "0.0.1" + web3-utils "^1.0.0-beta.31" + +"@ensdomains/resolver@^0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" + integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== + +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@ethereum-waffle/chai@^3.4.4": + version "3.4.4" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.4.4.tgz#16c4cc877df31b035d6d92486dfdf983df9138ff" + integrity sha512-/K8czydBtXXkcM9X6q29EqEkc5dN3oYenyH2a9hF7rGAApAJUpH8QBtojxOY/xQ2up5W332jqgxwp0yPiYug1g== + dependencies: + "@ethereum-waffle/provider" "^3.4.4" + ethers "^5.5.2" + +"@ethereum-waffle/compiler@^3.4.4": + version "3.4.4" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/compiler/-/compiler-3.4.4.tgz#d568ee0f6029e68b5c645506079fbf67d0dfcf19" + integrity sha512-RUK3axJ8IkD5xpWjWoJgyHclOeEzDLQFga6gKpeGxiS/zBu+HB0W2FvsrrLalTFIaPw/CGYACRBSIxqiCqwqTQ== dependencies: "@resolver-engine/imports" "^0.3.3" "@resolver-engine/imports-fs" "^0.3.3" + "@typechain/ethers-v5" "^2.0.0" "@types/mkdirp" "^0.5.2" "@types/node-fetch" "^2.5.5" + ethers "^5.0.1" mkdirp "^0.5.1" - node-fetch "^2.6.0" + node-fetch "^2.6.1" solc "^0.6.3" + ts-generator "^0.1.1" + typechain "^3.0.0" + +"@ethereum-waffle/ens@^3.4.4": + version "3.4.4" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/ens/-/ens-3.4.4.tgz#db97ea2c9decbb70b9205d53de2ccbd6f3182ba1" + integrity sha512-0m4NdwWxliy3heBYva1Wr4WbJKLnwXizmy5FfSSr5PMbjI7SIGCdCB59U7/ZzY773/hY3bLnzLwvG5mggVjJWg== + dependencies: + "@ensdomains/ens" "^0.4.4" + "@ensdomains/resolver" "^0.2.4" + ethers "^5.5.2" + +"@ethereum-waffle/mock-contract@^3.4.4": + version "3.4.4" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/mock-contract/-/mock-contract-3.4.4.tgz#fc6ffa18813546f4950a69f5892d4dd54b2c685a" + integrity sha512-Mp0iB2YNWYGUV+VMl5tjPsaXKbKo8MDH9wSJ702l9EBjdxFf/vBvnMBAC1Fub1lLtmD0JHtp1pq+mWzg/xlLnA== + dependencies: + "@ethersproject/abi" "^5.5.0" + ethers "^5.5.2" + +"@ethereum-waffle/provider@^3.4.4": + version "3.4.4" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/provider/-/provider-3.4.4.tgz#398fc1f7eb91cc2df7d011272eacba8af0c7fffb" + integrity sha512-GK8oKJAM8+PKy2nK08yDgl4A80mFuI8zBkE0C9GqTRYQqvuxIyXoLmJ5NZU9lIwyWVv5/KsoA11BgAv2jXE82g== + dependencies: + "@ethereum-waffle/ens" "^3.4.4" + ethers "^5.5.2" + ganache-core "^2.13.2" + patch-package "^6.2.2" + postinstall-postinstall "^2.1.0" + +"@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.6.2", "@ethereumjs/block@^3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.6.3.tgz#d96cbd7af38b92ebb3424223dbf773f5ccd27f84" + integrity sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg== + dependencies: + "@ethereumjs/common" "^2.6.5" + "@ethereumjs/tx" "^3.5.2" + ethereumjs-util "^7.1.5" + merkle-patricia-tree "^4.2.4" + +"@ethereumjs/blockchain@^5.5.2", "@ethereumjs/blockchain@^5.5.3": + version "5.5.3" + resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz#aa49a6a04789da6b66b5bcbb0d0b98efc369f640" + integrity sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw== + dependencies: + "@ethereumjs/block" "^3.6.2" + "@ethereumjs/common" "^2.6.4" + "@ethereumjs/ethash" "^1.1.0" + debug "^4.3.3" + ethereumjs-util "^7.1.5" + level-mem "^5.0.1" + lru-cache "^5.1.1" + semaphore-async-await "^1.5.1" -"@ethereum-waffle/provider@^2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/provider/-/provider-2.4.1.tgz#5480be31f9c655864e3eede374759973d20947ef" - integrity sha512-OhRQfQlR6BsgGUEaeeaQXztbRQ0v/AmwEdmWHmBwJN6NX/FjLmOTIyF3LBWBFHH4K5GgSCDhFs6w5Khz+ojRKg== +"@ethereumjs/common@^2.3.0", "@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.6.4", "@ethereumjs/common@^2.6.5": + version "2.6.5" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" + integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.1.5" + +"@ethereumjs/ethash@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-1.1.0.tgz#7c5918ffcaa9cb9c1dc7d12f77ef038c11fb83fb" + integrity sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA== + dependencies: + "@ethereumjs/block" "^3.5.0" + "@types/levelup" "^4.3.0" + buffer-xor "^2.0.1" + ethereumjs-util "^7.1.1" + miller-rabin "^4.0.0" + +"@ethereumjs/tx@^3.2.1", "@ethereumjs/tx@^3.3.0", "@ethereumjs/tx@^3.5.1", "@ethereumjs/tx@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" + integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== dependencies: - ethers "^4.0.45" - ganache-core "^2.10.2" + "@ethereumjs/common" "^2.6.4" + ethereumjs-util "^7.1.5" + +"@ethereumjs/vm@^5.9.0": + version "5.9.3" + resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.9.3.tgz#6d69202e4c132a4a1e1628ac246e92062e230823" + integrity sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg== + dependencies: + "@ethereumjs/block" "^3.6.3" + "@ethereumjs/blockchain" "^5.5.3" + "@ethereumjs/common" "^2.6.5" + "@ethereumjs/tx" "^3.5.2" + async-eventemitter "^0.2.4" + core-js-pure "^3.0.1" + debug "^4.3.3" + ethereumjs-util "^7.1.5" + functional-red-black-tree "^1.0.1" + mcl-wasm "^0.7.1" + merkle-patricia-tree "^4.2.4" + rustbn.js "~0.2.0" + +"@ethersproject/abi@5.0.0-beta.153": + version "5.0.0-beta.153" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.0-beta.153.tgz#43a37172b33794e4562999f6e2d555b7599a8eee" + integrity sha512-aXweZ1Z7vMNzJdLpR1CZUAIgnwjrZeUSvN9syCwlBaEBUFJmFY+HHnfuTI5vIhVs/mRkfJVrbEyl51JZQqyjAg== + dependencies: + "@ethersproject/address" ">=5.0.0-beta.128" + "@ethersproject/bignumber" ">=5.0.0-beta.130" + "@ethersproject/bytes" ">=5.0.0-beta.129" + "@ethersproject/constants" ">=5.0.0-beta.128" + "@ethersproject/hash" ">=5.0.0-beta.128" + "@ethersproject/keccak256" ">=5.0.0-beta.127" + "@ethersproject/logger" ">=5.0.0-beta.129" + "@ethersproject/properties" ">=5.0.0-beta.131" + "@ethersproject/strings" ">=5.0.0-beta.130" "@ethersproject/abi@5.0.7": version "5.0.7" @@ -87,6 +348,34 @@ "@ethersproject/properties" "^5.0.3" "@ethersproject/strings" "^5.0.4" +"@ethersproject/abi@5.6.4", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.6.3": + version "5.6.4" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.6.4.tgz#f6e01b6ed391a505932698ecc0d9e7a99ee60362" + integrity sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg== + dependencies: + "@ethersproject/address" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/hash" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.1" + +"@ethersproject/abstract-provider@5.6.1", "@ethersproject/abstract-provider@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz#02ddce150785caf0c77fe036a0ebfcee61878c59" + integrity sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/networks" "^5.6.3" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/transactions" "^5.6.2" + "@ethersproject/web" "^5.6.1" + "@ethersproject/abstract-provider@^5.0.8": version "5.0.8" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.0.8.tgz#880793c29bfed33dff4c2b2be7ecb9ba966d52c0" @@ -100,6 +389,17 @@ "@ethersproject/transactions" "^5.0.9" "@ethersproject/web" "^5.0.12" +"@ethersproject/abstract-signer@5.6.2", "@ethersproject/abstract-signer@^5.4.1", "@ethersproject/abstract-signer@^5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz#491f07fc2cbd5da258f46ec539664713950b0b33" + integrity sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ== + dependencies: + "@ethersproject/abstract-provider" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/abstract-signer@^5.0.10": version "5.0.11" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.0.11.tgz#675da9ec168905c60ee79a6da95f7157ca956f46" @@ -111,6 +411,17 @@ "@ethersproject/logger" "^5.0.8" "@ethersproject/properties" "^5.0.7" +"@ethersproject/address@5.6.1", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.4.0", "@ethersproject/address@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.1.tgz#ab57818d9aefee919c5721d28cd31fd95eff413d" + integrity sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/rlp" "^5.6.1" + "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.0.9": version "5.0.9" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.9.tgz#347ef30dc8243c682574a3f23ff63f73c8f8cbf1" @@ -122,6 +433,13 @@ "@ethersproject/logger" "^5.0.8" "@ethersproject/rlp" "^5.0.7" +"@ethersproject/base64@5.6.1", "@ethersproject/base64@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.6.1.tgz#2c40d8a0310c9d1606c2c37ae3092634b41d87cb" + integrity sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/base64@^5.0.7": version "5.0.7" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.0.7.tgz#d5da73699b4a33dc92bd8e5056ad1880b262057d" @@ -129,6 +447,23 @@ dependencies: "@ethersproject/bytes" "^5.0.9" +"@ethersproject/basex@5.6.1", "@ethersproject/basex@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.6.1.tgz#badbb2f1d4a6f52ce41c9064f01eab19cc4c5305" + integrity sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/properties" "^5.6.0" + +"@ethersproject/bignumber@5.6.2", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.4.1", "@ethersproject/bignumber@^5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.6.2.tgz#72a0717d6163fab44c47bcc82e0c550ac0315d66" + integrity sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + bn.js "^5.2.1" + "@ethersproject/bignumber@^5.0.13", "@ethersproject/bignumber@^5.0.7": version "5.0.13" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.13.tgz#a5466412b3b80104097b9c694f6ae827df4353fe" @@ -138,6 +473,13 @@ "@ethersproject/logger" "^5.0.8" bn.js "^4.4.0" +"@ethersproject/bytes@5.6.1", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.4.0", "@ethersproject/bytes@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" + integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g== + dependencies: + "@ethersproject/logger" "^5.6.0" + "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.0.9": version "5.0.9" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.9.tgz#2748247402ad20df69f3a3e935dc7b58c0d75c08" @@ -145,6 +487,13 @@ dependencies: "@ethersproject/logger" "^5.0.8" +"@ethersproject/constants@5.6.1", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.4.0", "@ethersproject/constants@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.6.1.tgz#e2e974cac160dd101cf79fdf879d7d18e8cb1370" + integrity sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.0.8": version "5.0.8" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.8.tgz#50f2e23f48c0d1d0de3759ea79b68ec3e06435a1" @@ -152,6 +501,36 @@ dependencies: "@ethersproject/bignumber" "^5.0.13" +"@ethersproject/contracts@5.6.2", "@ethersproject/contracts@^5.4.1": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.6.2.tgz#20b52e69ebc1b74274ff8e3d4e508de971c287bc" + integrity sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g== + dependencies: + "@ethersproject/abi" "^5.6.3" + "@ethersproject/abstract-provider" "^5.6.1" + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/address" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/transactions" "^5.6.2" + +"@ethersproject/hash@5.6.1", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.6.1.tgz#224572ea4de257f05b4abf8ae58b03a67e99b0f4" + integrity sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA== + dependencies: + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/address" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.1" + "@ethersproject/hash@^5.0.4": version "5.0.10" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.10.tgz#41bf37428e8ddbc229ffd81c47af667174cb491a" @@ -166,6 +545,51 @@ "@ethersproject/properties" "^5.0.7" "@ethersproject/strings" "^5.0.8" +"@ethersproject/hdnode@5.6.2", "@ethersproject/hdnode@^5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.6.2.tgz#26f3c83a3e8f1b7985c15d1db50dc2903418b2d2" + integrity sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q== + dependencies: + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/basex" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/pbkdf2" "^5.6.1" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/sha2" "^5.6.1" + "@ethersproject/signing-key" "^5.6.2" + "@ethersproject/strings" "^5.6.1" + "@ethersproject/transactions" "^5.6.2" + "@ethersproject/wordlists" "^5.6.1" + +"@ethersproject/json-wallets@5.6.1", "@ethersproject/json-wallets@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz#3f06ba555c9c0d7da46756a12ac53483fe18dd91" + integrity sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ== + dependencies: + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/address" "^5.6.1" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/hdnode" "^5.6.2" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/pbkdf2" "^5.6.1" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/random" "^5.6.1" + "@ethersproject/strings" "^5.6.1" + "@ethersproject/transactions" "^5.6.2" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.6.1", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.6.1.tgz#b867167c9b50ba1b1a92bccdd4f2d6bd168a91cc" + integrity sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA== + dependencies: + "@ethersproject/bytes" "^5.6.1" + js-sha3 "0.8.0" + "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.0.7": version "5.0.7" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.0.7.tgz#2eedb5e4c160fcdf0079660f8ae362d7855ea943" @@ -174,11 +598,23 @@ "@ethersproject/bytes" "^5.0.9" js-sha3 "0.5.7" +"@ethersproject/logger@5.6.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" + integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== + "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.0.8": version "5.0.8" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.8.tgz#135c1903d35c878265f3cbf2b287042c4c20d5d4" integrity sha512-SkJCTaVTnaZ3/ieLF5pVftxGEFX56pTH+f2Slrpv7cU0TNpUZNib84QQdukd++sWUp/S7j5t5NW+WegbXd4U/A== +"@ethersproject/networks@5.6.4", "@ethersproject/networks@^5.6.3": + version "5.6.4" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.4.tgz#51296d8fec59e9627554f5a8a9c7791248c8dc07" + integrity sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ== + dependencies: + "@ethersproject/logger" "^5.6.0" + "@ethersproject/networks@^5.0.7": version "5.0.7" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.0.7.tgz#8d06e41197b27c2404d89a29ca21f741a01acbfc" @@ -186,6 +622,21 @@ dependencies: "@ethersproject/logger" "^5.0.8" +"@ethersproject/pbkdf2@5.6.1", "@ethersproject/pbkdf2@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz#f462fe320b22c0d6b1d72a9920a3963b09eb82d1" + integrity sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/sha2" "^5.6.1" + +"@ethersproject/properties@5.6.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.6.0.tgz#38904651713bc6bdd5bdd1b0a4287ecda920fa04" + integrity sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg== + dependencies: + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.0.7": version "5.0.7" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.7.tgz#951d11ba592ff90bbe8ec34c5a03a5157e3b3360" @@ -193,6 +644,48 @@ dependencies: "@ethersproject/logger" "^5.0.8" +"@ethersproject/providers@5.6.8", "@ethersproject/providers@^5.4.4": + version "5.6.8" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.8.tgz#22e6c57be215ba5545d3a46cf759d265bb4e879d" + integrity sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w== + dependencies: + "@ethersproject/abstract-provider" "^5.6.1" + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/address" "^5.6.1" + "@ethersproject/base64" "^5.6.1" + "@ethersproject/basex" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/hash" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/networks" "^5.6.3" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/random" "^5.6.1" + "@ethersproject/rlp" "^5.6.1" + "@ethersproject/sha2" "^5.6.1" + "@ethersproject/strings" "^5.6.1" + "@ethersproject/transactions" "^5.6.2" + "@ethersproject/web" "^5.6.1" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@5.6.1", "@ethersproject/random@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.6.1.tgz#66915943981bcd3e11bbd43733f5c3ba5a790255" + integrity sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/rlp@5.6.1", "@ethersproject/rlp@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.6.1.tgz#df8311e6f9f24dcb03d59a2bac457a28a4fe2bd8" + integrity sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/rlp@^5.0.7": version "5.0.7" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.7.tgz#cfa4fa6415960a435b7814e1a29bdfea657e2b6e" @@ -201,6 +694,27 @@ "@ethersproject/bytes" "^5.0.9" "@ethersproject/logger" "^5.0.8" +"@ethersproject/sha2@5.6.1", "@ethersproject/sha2@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.1.tgz#211f14d3f5da5301c8972a8827770b6fd3e51656" + integrity sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.6.2", "@ethersproject/signing-key@^5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.6.2.tgz#8a51b111e4d62e5a62aee1da1e088d12de0614a3" + integrity sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + "@ethersproject/signing-key@^5.0.8": version "5.0.8" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.0.8.tgz#156522e542916b9aa9135527b40c5b6f9235af02" @@ -211,6 +725,27 @@ "@ethersproject/properties" "^5.0.7" elliptic "6.5.3" +"@ethersproject/solidity@5.6.1", "@ethersproject/solidity@^5.4.0": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.6.1.tgz#5845e71182c66d32e6ec5eefd041fca091a473e2" + integrity sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/sha2" "^5.6.1" + "@ethersproject/strings" "^5.6.1" + +"@ethersproject/strings@5.6.1", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.6.1.tgz#dbc1b7f901db822b5cafd4ebf01ca93c373f8952" + integrity sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.0.8": version "5.0.8" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.8.tgz#11a1b0ed1e8417408693789839f0b5f4e323c0c9" @@ -220,6 +755,21 @@ "@ethersproject/constants" "^5.0.8" "@ethersproject/logger" "^5.0.8" +"@ethersproject/transactions@5.6.2", "@ethersproject/transactions@^5.4.0", "@ethersproject/transactions@^5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.6.2.tgz#793a774c01ced9fe7073985bb95a4b4e57a6370b" + integrity sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q== + dependencies: + "@ethersproject/address" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/rlp" "^5.6.1" + "@ethersproject/signing-key" "^5.6.2" + "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.0.9": version "5.0.9" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.9.tgz#ccfcc1d395b5e3ce7342545fa28bfe5541182fd6" @@ -235,6 +785,47 @@ "@ethersproject/rlp" "^5.0.7" "@ethersproject/signing-key" "^5.0.8" +"@ethersproject/units@5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.6.1.tgz#ecc590d16d37c8f9ef4e89e2005bda7ddc6a4e6f" + integrity sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/wallet@5.6.2", "@ethersproject/wallet@^5.4.0": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.6.2.tgz#cd61429d1e934681e413f4bc847a5f2f87e3a03c" + integrity sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg== + dependencies: + "@ethersproject/abstract-provider" "^5.6.1" + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/address" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/hash" "^5.6.1" + "@ethersproject/hdnode" "^5.6.2" + "@ethersproject/json-wallets" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/random" "^5.6.1" + "@ethersproject/signing-key" "^5.6.2" + "@ethersproject/transactions" "^5.6.2" + "@ethersproject/wordlists" "^5.6.1" + +"@ethersproject/web@5.6.1", "@ethersproject/web@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.6.1.tgz#6e2bd3ebadd033e6fe57d072db2b69ad2c9bdf5d" + integrity sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA== + dependencies: + "@ethersproject/base64" "^5.6.1" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.1" + "@ethersproject/web@^5.0.12": version "5.0.12" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.0.12.tgz#f123397c107f863c31fce5f31a97c66ec155e755" @@ -246,369 +837,140 @@ "@ethersproject/properties" "^5.0.7" "@ethersproject/strings" "^5.0.8" -"@firebase/analytics-types@0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@firebase/analytics-types/-/analytics-types-0.4.0.tgz#d6716f9fa36a6e340bc0ecfe68af325aa6f60508" - integrity sha512-Jj2xW+8+8XPfWGkv9HPv/uR+Qrmq37NPYT352wf7MvE9LrstpLVmFg3LqG6MCRr5miLAom5sen2gZ+iOhVDeRA== - -"@firebase/analytics@0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@firebase/analytics/-/analytics-0.6.0.tgz#49f508d3f9f419f08c503f1171ef5fa1c3ba52eb" - integrity sha512-6qYEOPUVYrMhqvJ46Z5Uf1S4uULd6d7vGpMP5Qz+u8kIWuOQGcPdJKQap+Hla6Rq164or9gC2HRXuYXKlgWfpw== +"@ethersproject/wordlists@5.6.1", "@ethersproject/wordlists@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.6.1.tgz#1e78e2740a8a21e9e99947e47979d72e130aeda1" + integrity sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw== dependencies: - "@firebase/analytics-types" "0.4.0" - "@firebase/component" "0.1.19" - "@firebase/installations" "0.4.17" - "@firebase/logger" "0.2.6" - "@firebase/util" "0.3.2" - tslib "^1.11.1" - -"@firebase/app-types@0.6.1": - version "0.6.1" - resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.6.1.tgz#dcbd23030a71c0c74fc95d4a3f75ba81653850e9" - integrity sha512-L/ZnJRAq7F++utfuoTKX4CLBG5YR7tFO3PLzG1/oXXKEezJ0kRL3CMRoueBEmTCzVb/6SIs2Qlaw++uDgi5Xyg== - -"@firebase/app@0.6.11": - version "0.6.11" - resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.6.11.tgz#f73f9e4571ba62f4029d8f9c9880a97e5a94eb1d" - integrity sha512-FH++PaoyTzfTAVuJ0gITNYEIcjT5G+D0671La27MU8Vvr6MTko+5YUZ4xS9QItyotSeRF4rMJ1KR7G8LSyySiA== - dependencies: - "@firebase/app-types" "0.6.1" - "@firebase/component" "0.1.19" - "@firebase/logger" "0.2.6" - "@firebase/util" "0.3.2" - dom-storage "2.1.0" - tslib "^1.11.1" - xmlhttprequest "1.8.0" - -"@firebase/auth-interop-types@0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@firebase/auth-interop-types/-/auth-interop-types-0.1.5.tgz#9fc9bd7c879f16b8d1bb08373a0f48c3a8b74557" - integrity sha512-88h74TMQ6wXChPA6h9Q3E1Jg6TkTHep2+k63OWg3s0ozyGVMeY+TTOti7PFPzq5RhszQPQOoCi59es4MaRvgCw== - -"@firebase/auth-types@0.10.1": - version "0.10.1" - resolved "https://registry.yarnpkg.com/@firebase/auth-types/-/auth-types-0.10.1.tgz#7815e71c9c6f072034415524b29ca8f1d1770660" - integrity sha512-/+gBHb1O9x/YlG7inXfxff/6X3BPZt4zgBv4kql6HEmdzNQCodIRlEYnI+/da+lN+dha7PjaFH7C7ewMmfV7rw== + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/hash" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.1" -"@firebase/auth@0.15.0": - version "0.15.0" - resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.15.0.tgz#45d6def6d6d9444432c005710df442991828275f" - integrity sha512-IFuzhxS+HtOQl7+SZ/Mhaghy/zTU7CENsJFWbC16tv2wfLZbayKF5jYGdAU3VFLehgC8KjlcIWd10akc3XivfQ== +"@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== dependencies: - "@firebase/auth-types" "0.10.1" + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@firebase/component@0.1.19": - version "0.1.19" - resolved "https://registry.yarnpkg.com/@firebase/component/-/component-0.1.19.tgz#bd2ac601652c22576b574c08c40da245933dbac7" - integrity sha512-L0S3g8eqaerg8y0zox3oOHSTwn/FE8RbcRHiurnbESvDViZtP5S5WnhuAPd7FnFxa8ElWK0z1Tr3ikzWDv1xdQ== +"@jridgewell/gen-mapping@^0.3.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== dependencies: - "@firebase/util" "0.3.2" - tslib "^1.11.1" + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" -"@firebase/database-types@0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.5.2.tgz#23bec8477f84f519727f165c687761e29958b63c" - integrity sha512-ap2WQOS3LKmGuVFKUghFft7RxXTyZTDr0Xd8y2aqmWsbJVjgozi0huL/EUMgTjGFrATAjcf2A7aNs8AKKZ2a8g== - dependencies: - "@firebase/app-types" "0.6.1" - -"@firebase/database@0.6.13": - version "0.6.13" - resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.6.13.tgz#b96fe0c53757dd6404ee085fdcb45c0f9f525c17" - integrity sha512-NommVkAPzU7CKd1gyehmi3lz0K78q0KOfiex7Nfy7MBMwknLm7oNqKovXSgQV1PCLvKXvvAplDSFhDhzIf9obA== - dependencies: - "@firebase/auth-interop-types" "0.1.5" - "@firebase/component" "0.1.19" - "@firebase/database-types" "0.5.2" - "@firebase/logger" "0.2.6" - "@firebase/util" "0.3.2" - faye-websocket "0.11.3" - tslib "^1.11.1" - -"@firebase/firestore-types@1.14.0": - version "1.14.0" - resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-1.14.0.tgz#4516249d3c181849fd3c856831944dbd5c8c55fc" - integrity sha512-WF8IBwHzZDhwyOgQnmB0pheVrLNP78A8PGxk1nxb/Nrgh1amo4/zYvFMGgSsTeaQK37xMYS/g7eS948te/dJxw== - -"@firebase/firestore@1.18.0": - version "1.18.0" - resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-1.18.0.tgz#3430e8c60d3e6be1d174b3a258838b1944c93a4d" - integrity sha512-maMq4ltkrwjDRusR2nt0qS4wldHQMp+0IDSfXIjC+SNmjnWY/t/+Skn9U3Po+dB38xpz3i7nsKbs+8utpDnPSw== - dependencies: - "@firebase/component" "0.1.19" - "@firebase/firestore-types" "1.14.0" - "@firebase/logger" "0.2.6" - "@firebase/util" "0.3.2" - "@firebase/webchannel-wrapper" "0.4.0" - "@grpc/grpc-js" "^1.0.0" - "@grpc/proto-loader" "^0.5.0" - node-fetch "2.6.1" - tslib "^1.11.1" - -"@firebase/functions-types@0.3.17": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@firebase/functions-types/-/functions-types-0.3.17.tgz#348bf5528b238eeeeeae1d52e8ca547b21d33a94" - integrity sha512-DGR4i3VI55KnYk4IxrIw7+VG7Q3gA65azHnZxo98Il8IvYLr2UTBlSh72dTLlDf25NW51HqvJgYJDKvSaAeyHQ== - -"@firebase/functions@0.5.1": - version "0.5.1" - resolved "https://registry.yarnpkg.com/@firebase/functions/-/functions-0.5.1.tgz#fa0568bdcdf7dfa7e5f4f66c1e06e376dc7e25b6" - integrity sha512-yyjPZXXvzFPjkGRSqFVS5Hc2Y7Y48GyyMH+M3i7hLGe69r/59w6wzgXKqTiSYmyE1pxfjxU4a1YqBDHNkQkrYQ== - dependencies: - "@firebase/component" "0.1.19" - "@firebase/functions-types" "0.3.17" - "@firebase/messaging-types" "0.5.0" - node-fetch "2.6.1" - tslib "^1.11.1" - -"@firebase/installations-types@0.3.4": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@firebase/installations-types/-/installations-types-0.3.4.tgz#589a941d713f4f64bf9f4feb7f463505bab1afa2" - integrity sha512-RfePJFovmdIXb6rYwtngyxuEcWnOrzdZd9m7xAW0gRxDIjBT20n3BOhjpmgRWXo/DAxRmS7bRjWAyTHY9cqN7Q== - -"@firebase/installations@0.4.17": - version "0.4.17" - resolved "https://registry.yarnpkg.com/@firebase/installations/-/installations-0.4.17.tgz#1367b721e2c6c4880646bbc4f257e8616986a004" - integrity sha512-AE/TyzIpwkC4UayRJD419xTqZkKzxwk0FLht3Dci8WI2OEKHSwoZG9xv4hOBZebe+fDzoV2EzfatQY8c/6Avig== - dependencies: - "@firebase/component" "0.1.19" - "@firebase/installations-types" "0.3.4" - "@firebase/util" "0.3.2" - idb "3.0.2" - tslib "^1.11.1" - -"@firebase/logger@0.2.6": - version "0.2.6" - resolved "https://registry.yarnpkg.com/@firebase/logger/-/logger-0.2.6.tgz#3aa2ca4fe10327cabf7808bd3994e88db26d7989" - integrity sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw== +"@jridgewell/resolve-uri@^3.0.3": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz#687cc2bbf243f4e9a868ecf2262318e2658873a1" + integrity sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w== -"@firebase/messaging-types@0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@firebase/messaging-types/-/messaging-types-0.5.0.tgz#c5d0ef309ced1758fda93ef3ac70a786de2e73c4" - integrity sha512-QaaBswrU6umJYb/ZYvjR5JDSslCGOH6D9P136PhabFAHLTR4TWjsaACvbBXuvwrfCXu10DtcjMxqfhdNIB1Xfg== +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@firebase/messaging@0.7.1": - version "0.7.1" - resolved "https://registry.yarnpkg.com/@firebase/messaging/-/messaging-0.7.1.tgz#debbe7eb17c5b789231da6c166c506e19ecf1ed4" - integrity sha512-iev/ST9v0xd/8YpGYrZtDcqdD9J6ZWzSuceRn8EKy5vIgQvW/rk2eTQc8axzvDpQ36ZfphMYuhW6XuNrR3Pd2Q== - dependencies: - "@firebase/component" "0.1.19" - "@firebase/installations" "0.4.17" - "@firebase/messaging-types" "0.5.0" - "@firebase/util" "0.3.2" - idb "3.0.2" - tslib "^1.11.1" - -"@firebase/performance-types@0.0.13": - version "0.0.13" - resolved "https://registry.yarnpkg.com/@firebase/performance-types/-/performance-types-0.0.13.tgz#58ce5453f57e34b18186f74ef11550dfc558ede6" - integrity sha512-6fZfIGjQpwo9S5OzMpPyqgYAUZcFzZxHFqOyNtorDIgNXq33nlldTL/vtaUZA8iT9TT5cJlCrF/jthKU7X21EA== - -"@firebase/performance@0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@firebase/performance/-/performance-0.4.2.tgz#d5f134674b429d095ce0edfb50fcb4ab279c3cbe" - integrity sha512-irHTCVWJ/sxJo0QHg+yQifBeVu8ZJPihiTqYzBUz/0AGc51YSt49FZwqSfknvCN2+OfHaazz/ARVBn87g7Ex8g== - dependencies: - "@firebase/component" "0.1.19" - "@firebase/installations" "0.4.17" - "@firebase/logger" "0.2.6" - "@firebase/performance-types" "0.0.13" - "@firebase/util" "0.3.2" - tslib "^1.11.1" - -"@firebase/polyfill@0.3.36": - version "0.3.36" - resolved "https://registry.yarnpkg.com/@firebase/polyfill/-/polyfill-0.3.36.tgz#c057cce6748170f36966b555749472b25efdb145" - integrity sha512-zMM9oSJgY6cT2jx3Ce9LYqb0eIpDE52meIzd/oe/y70F+v9u1LDqk5kUF5mf16zovGBWMNFmgzlsh6Wj0OsFtg== - dependencies: - core-js "3.6.5" - promise-polyfill "8.1.3" - whatwg-fetch "2.0.4" +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@firebase/remote-config-types@0.1.9": - version "0.1.9" - resolved "https://registry.yarnpkg.com/@firebase/remote-config-types/-/remote-config-types-0.1.9.tgz#fe6bbe4d08f3b6e92fce30e4b7a9f4d6a96d6965" - integrity sha512-G96qnF3RYGbZsTRut7NBX0sxyczxt1uyCgXQuH/eAfUCngxjEGcZQnBdy6mvSdqdJh5mC31rWPO4v9/s7HwtzA== - -"@firebase/remote-config@0.1.28": - version "0.1.28" - resolved "https://registry.yarnpkg.com/@firebase/remote-config/-/remote-config-0.1.28.tgz#1c39916446f1ed82b4c07e556455bd232fcfd8e1" - integrity sha512-4zSdyxpt94jAnFhO8toNjG8oMKBD+xTuBIcK+Nw8BdQWeJhEamgXlupdBARUk1uf3AvYICngHH32+Si/dMVTbw== - dependencies: - "@firebase/component" "0.1.19" - "@firebase/installations" "0.4.17" - "@firebase/logger" "0.2.6" - "@firebase/remote-config-types" "0.1.9" - "@firebase/util" "0.3.2" - tslib "^1.11.1" - -"@firebase/storage-types@0.3.13": - version "0.3.13" - resolved "https://registry.yarnpkg.com/@firebase/storage-types/-/storage-types-0.3.13.tgz#cd43e939a2ab5742e109eb639a313673a48b5458" - integrity sha512-pL7b8d5kMNCCL0w9hF7pr16POyKkb3imOW7w0qYrhBnbyJTdVxMWZhb0HxCFyQWC0w3EiIFFmxoz8NTFZDEFog== - -"@firebase/storage@0.3.43": - version "0.3.43" - resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.3.43.tgz#107fb5db2eff2561b5c4e35ee4cbff48f28c7e77" - integrity sha512-Jp54jcuyimLxPhZHFVAhNbQmgTu3Sda7vXjXrNpPEhlvvMSq4yuZBR6RrZxe/OrNVprLHh/6lTCjwjOVSo3bWA== - dependencies: - "@firebase/component" "0.1.19" - "@firebase/storage-types" "0.3.13" - "@firebase/util" "0.3.2" - tslib "^1.11.1" - -"@firebase/util@0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@firebase/util/-/util-0.3.2.tgz#87de27f9cffc2324651cabf6ec133d0a9eb21b52" - integrity sha512-Dqs00++c8rwKky6KCKLLY2T1qYO4Q+X5t+lF7DInXDNF4ae1Oau35bkD+OpJ9u7l1pEv7KHowP6CUKuySCOc8g== +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.14" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" + integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== dependencies: - tslib "^1.11.1" + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" -"@firebase/webchannel-wrapper@0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.4.0.tgz#becce788818d3f47f0ac1a74c3c061ac1dcf4f6d" - integrity sha512-8cUA/mg0S+BxIZ72TdZRsXKBP5n5uRcE3k29TZhZw6oIiHBt9JA7CTb/4pE1uKtE/q5NeTY2tBDcagoZ+1zjXQ== - -"@grpc/grpc-js@^1.0.0": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.2.4.tgz#04f0bbefb2636296d17e821f3d52152fbe2f6989" - integrity sha512-z+EI20HYHLd3/uERtwOqP8Q4EPhGbz5RKUpiyo6xPWfR3pcjpf8sfNvY9XytDQ4xo1wNz7NqH1kh2UBonwzbfg== +"@metamask/eth-sig-util@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" + integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== dependencies: - "@types/node" "^12.12.47" - google-auth-library "^6.1.1" - semver "^6.2.0" - -"@grpc/proto-loader@^0.5.0": - version "0.5.6" - resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.5.6.tgz#1dea4b8a6412b05e2d58514d507137b63a52a98d" - integrity sha512-DT14xgw3PSzPxwS13auTEwxhMMOoz33DPUKNtmYK/QYbBSpLXJy78FGGs5yVoxVobEqPm4iW9MOIoz0A3bLTRQ== - dependencies: - lodash.camelcase "^4.3.0" - protobufjs "^6.8.6" - -"@openzeppelin/cli@^2.8.1": - version "2.8.2" - resolved "https://registry.yarnpkg.com/@openzeppelin/cli/-/cli-2.8.2.tgz#b569c55f8c291ac4c7a16ca1b584ee2b4063a7f2" - integrity sha512-K0m1UAywnweAwzbwwmqI+JSezDRnqDRWkKQMI2VV6T03LOXcG/L9oqO9KRORI8md+KbxBW9v5rmNV63wGQIRlA== - dependencies: - "@openzeppelin/fuzzy-solidity-import-parser" "^0.1.2" - "@openzeppelin/upgrades" "2.8.0" - "@types/fs-extra" "^7.0.0" - "@types/npm" "^2.0.29" - "@types/semver" "^5.5.0" - ajv "^6.10.0" - axios "^0.18.0" - bignumber.js "^8.0.2" - chalk "^2.4.1" - cheerio "^1.0.0-rc.2" - commander "^2.15.1" - env-paths "^2.2.0" - ethereumjs-util "^6.1.0" - find-up "^3.0.0" - firebase "^7.8.0" - fs-extra "^7.0.1" - glob "^7.1.6" - inquirer "^6.4.1" - is-url "^1.2.4" - lockfile "^1.0.4" - npm-programmatic "0.0.12" - rlp "^2.2.3" - semver "^5.5.0" - simple-git "^1.110.0" - solc-wrapper "^0.6.3" - spinnies "^0.3.0" - toposort "^2.0.2" - truffle-config "1.1.16" - ts-generator "^0.0.8" - typechain "^1.0.3" - typechain-target-truffle "^1.0.1" - typechain-target-web3-v1 "^1.0.1" - underscore "^1.9.1" - uuid "^3.3.3" - web3 "1.2.2" - web3-eth "1.2.2" - web3-eth-contract "1.2.2" - web3-utils "1.2.2" - -"@openzeppelin/fuzzy-solidity-import-parser@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@openzeppelin/fuzzy-solidity-import-parser/-/fuzzy-solidity-import-parser-0.1.2.tgz#3b9f524d6028ca73df60474a313e0295e5610c51" - integrity sha512-leqEwfs8GlrPDrVcVc8Hv6LJ62ZzR0RgjwQNCkpT6H5jW9RB8YdR0a3inHoricSvw+sKI1b1hOqsCtPPZNnhng== - -"@openzeppelin/upgrades@2.8.0": - version "2.8.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades/-/upgrades-2.8.0.tgz#8086ab9c99d9f8dac7205030b0f9e7e4a280c4a3" - integrity sha512-LzjTQPeljPsgHDPdZyH9cMCbIHZILgd2cpNcYEkdsC2IylBYRHShlbEDXJV9snnqg9JWfzPiKIqyj3XVliwtqQ== - dependencies: - "@types/cbor" "^2.0.0" - axios "^0.18.0" - bignumber.js "^7.2.0" - cbor "^4.1.5" - chalk "^2.4.1" - ethers "^4.0.20" - glob "^7.1.3" - lodash "^4.17.15" - semver "^5.5.1" - spinnies "^0.4.2" - truffle-flattener "^1.4.0" - web3 "1.2.2" - web3-eth "1.2.2" - web3-eth-contract "1.2.2" - web3-utils "1.2.2" - -"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" - integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78= + ethereumjs-abi "^0.6.8" + ethereumjs-util "^6.2.1" + ethjs-util "^0.1.6" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.1" -"@protobufjs/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" - integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== +"@metamask/safe-event-emitter@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz#af577b477c683fad17c619a78208cede06f9605c" + integrity sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q== -"@protobufjs/codegen@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" - integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== +"@noble/hashes@1.0.0", "@noble/hashes@~1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.0.0.tgz#d5e38bfbdaba174805a4e649f13be9a9ed3351ae" + integrity sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg== -"@protobufjs/eventemitter@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" - integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A= +"@noble/secp256k1@1.5.5", "@noble/secp256k1@~1.5.2": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.5.5.tgz#315ab5745509d1a8c8e90d0bdf59823ccf9bcfc3" + integrity sha512-sZ1W6gQzYnu45wPrWx8D3kwI2/U29VYTx9OjbDAd7jwRItJ0cSTMPRL/C8AWZFn9kWFLQGqEXVEE86w4Z8LpIQ== -"@protobufjs/fetch@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" - integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU= +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: - "@protobufjs/aspromise" "^1.1.1" - "@protobufjs/inquire" "^1.1.0" - -"@protobufjs/float@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" - integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E= + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" -"@protobufjs/inquire@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" - integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik= +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@protobufjs/path@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" - integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0= +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nomiclabs/hardhat-ethers@npm:hardhat-deploy-ethers", hardhat-deploy-ethers@^0.3.0-beta.10: + version "0.3.0-beta.13" + resolved "https://registry.yarnpkg.com/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.13.tgz#b96086ff768ddf69928984d5eb0a8d78cfca9366" + integrity sha512-PdWVcKB9coqWV1L7JTpfXRCI91Cgwsm7KLmBcwZ8f0COSm1xtABHZTyz3fvF6p42cTnz1VM0QnfDvMFlIRkSNw== + +"@nomiclabs/hardhat-etherscan@^2.1.6": + version "2.1.8" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.8.tgz#e206275e96962cd15e5ba9148b44388bc922d8c2" + integrity sha512-0+rj0SsZotVOcTLyDOxnOc3Gulo8upo0rsw/h+gBPcmtj91YqYJNhdARHoBxOhhE8z+5IUQPx+Dii04lXT14PA== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@ethersproject/address" "^5.0.2" + cbor "^5.0.2" + debug "^4.1.1" + fs-extra "^7.0.1" + node-fetch "^2.6.0" + semver "^6.3.0" -"@protobufjs/pool@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" - integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q= +"@nomiclabs/hardhat-waffle@^2.0.1": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz#9c538a09c5ed89f68f5fd2dc3f78f16ed1d6e0b1" + integrity sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg== + dependencies: + "@types/sinon-chai" "^3.2.3" + "@types/web3" "1.0.19" -"@protobufjs/utf8@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" - integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= +"@openzeppelin/contracts@^4.2.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.6.0.tgz#c91cf64bc27f573836dba4122758b4743418c1b3" + integrity sha512-8vi4d50NNya/bQqCmaVzvHNmwHvS0OBKb7HNtuNwEE3scXWrP31fKQoGxNMT+KbzmrNZzatE3QK5p2gFONI/hg== "@resolver-engine/core@^0.2.1": version "0.2.1" @@ -681,21 +1043,113 @@ path-browserify "^1.0.0" url "^0.11.0" +"@scure/base@~1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.0.0.tgz#109fb595021de285f05a7db6806f2f48296fcee7" + integrity sha512-gIVaYhUsy+9s58m/ETjSJVKHhKTBMmcRb9cEV5/5dwvfDlfORjKrFsDeDHWRrm6RjcPvCLZFwGJjAjLj1gg4HA== + +"@scure/bip32@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.0.1.tgz#1409bdf9f07f0aec99006bb0d5827693418d3aa5" + integrity sha512-AU88KKTpQ+YpTLoicZ/qhFhRRIo96/tlb+8YmDDHR9yiKVjSsFZiefJO4wjS2PMTkz5/oIcw84uAq/8pleQURA== + dependencies: + "@noble/hashes" "~1.0.0" + "@noble/secp256k1" "~1.5.2" + "@scure/base" "~1.0.0" + +"@scure/bip39@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.0.0.tgz#47504e58de9a56a4bbed95159d2d6829fa491bb0" + integrity sha512-HrtcikLbd58PWOkl02k9V6nXWQyoa7A0+Ek9VF7z17DDk9XZAFUcIdqfh0jJXLypmizc5/8P6OxoUeKliiWv4w== + dependencies: + "@noble/hashes" "~1.0.0" + "@scure/base" "~1.0.0" + +"@sentry/core@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/hub@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== + dependencies: + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/minimal@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sentry/node@^5.18.1": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" + integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + dependencies: + "@sentry/core" "5.30.0" + "@sentry/hub" "5.30.0" + "@sentry/tracing" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" + integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== + +"@sentry/utils@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== + dependencies: + "@sentry/types" "5.30.0" + tslib "^1.9.3" + "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@solidity-parser/parser@^0.14.0", "@solidity-parser/parser@^0.14.1": + version "0.14.2" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.2.tgz#2d8f2bddb217621df882ceeae7d7b42ae8664db3" + integrity sha512-10cr0s+MtRtqjEw0WFJrm2rwULN30xx7btd/v9cmqME2617/2M5MbHDkFIGIGTa7lwNw4bN9mVGfhlLzrYw8pA== + dependencies: + antlr4ts "^0.5.0-alpha.4" + "@solidity-parser/parser@^0.6.0": version "0.6.2" resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.6.2.tgz#49707fc4e06649d39d6b25bdab2e9093d372ce50" integrity sha512-kUVUvrqttndeprLoXjI5arWHeiP3uh4XODAKbG+ZaWHCVQeelxCbnXBeWxZ2BPHdXgH0xR9dU1b916JhDhbgAA== -"@solidity-parser/parser@^0.8.0": - version "0.8.2" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.8.2.tgz#a6a5e93ac8dca6884a99a532f133beba59b87b69" - integrity sha512-8LySx3qrNXPgB5JiULfG10O3V7QTxI/TLzSw5hFQhXWSkVxZBAv4rZQ0sYgLEbc8g3L2lmnujj1hKul38Eu5NQ== - "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -703,142 +1157,145 @@ dependencies: defer-to-connect "^1.0.1" -"@truffle/error@^0.0.6": - version "0.0.6" - resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.0.6.tgz#75d499845b4b3a40537889e7d04c663afcaee85d" - integrity sha512-QUM9ZWiwlXGixFGpV18g5I6vua6/r+ZV9W/5DQA5go9A3eZUNPHPaTKMIQPJLYn6+ZV5jg5H28zCHq56LHF3yA== - -"@truffle/hdwallet-provider@^1.0.33": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@truffle/hdwallet-provider/-/hdwallet-provider-1.2.1.tgz#164f027f688123b991a3fa64ca3519635b65200b" - integrity sha512-EijX9JgcR3IaM1978ysHqJpObZNBgFWyBPzwy7YxMfWUaCp6PyM/g2w/b/DGmMHT56D56KVu+1PtHpEG0sbjtg== - dependencies: - "@trufflesuite/web3-provider-engine" "15.0.13-1" - "@types/web3" "^1.0.20" - any-promise "^1.3.0" - bindings "^1.5.0" - ethereum-cryptography "^0.1.3" +"@truffle/error@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.1.0.tgz#5e9fed79e6cda624c926d314b280a576f8b22a36" + integrity sha512-RbUfp5VreNhsa2Q4YbBjz18rOQI909pG32bghl1hulO7IpvcqTS+C3Ge5cNbiWQ1WGzy1wIeKLW0tmQtHFB7qg== + +"@truffle/hdwallet-provider@latest": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@truffle/hdwallet-provider/-/hdwallet-provider-2.0.9.tgz#90a259481554aed74aa0015dfe5c03c87ff5c11a" + integrity sha512-eDii/9/CmlXVtTq4iCouIgoLRzu3CB3XnxVHCZz0OTCBxwQ+sZZVJ99oQJJ8g8xb7aycd87YeMm5tXLhhH3XdA== + dependencies: + "@ethereumjs/common" "^2.4.0" + "@ethereumjs/tx" "^3.3.0" + eth-sig-util "^3.0.1" + ethereum-cryptography "1.0.3" ethereum-protocol "^1.0.1" - ethereumjs-tx "^1.0.0" ethereumjs-util "^6.1.0" ethereumjs-wallet "^1.0.1" - source-map-support "^0.5.19" + web3-provider-engine "16.0.3" -"@trufflesuite/eth-json-rpc-filters@^4.1.2-1": - version "4.1.2-1" - resolved "https://registry.yarnpkg.com/@trufflesuite/eth-json-rpc-filters/-/eth-json-rpc-filters-4.1.2-1.tgz#61ab78c52e98a883e5cf086925b34a30297b1824" - integrity sha512-/MChvC5dw2ck9NU1cZmdovCz2VKbOeIyR4tcxDvA5sT+NaL0rA2/R5U0yI7zsbo1zD+pgqav77rQHTzpUdDNJQ== +"@truffle/interface-adapter@^0.5.17": + version "0.5.17" + resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.5.17.tgz#34e7e28930f6aa4c722f1b2ede127d379f891e70" + integrity sha512-2MJ+YLAL4y2QqlWc90NKizBLpavcETTzV8EpYkYJgAM326xKrAt+N3wx3f3tgRPSsbdtiEVKf1JRXHmDYQ+xIg== dependencies: - "@trufflesuite/eth-json-rpc-middleware" "^4.4.2-0" - await-semaphore "^0.1.3" - eth-query "^2.1.2" - json-rpc-engine "^5.1.3" - lodash.flatmap "^4.5.0" - safe-event-emitter "^1.0.1" + bn.js "^5.1.3" + ethers "^4.0.32" + web3 "1.5.3" -"@trufflesuite/eth-json-rpc-infura@^4.0.3-0": - version "4.0.3-0" - resolved "https://registry.yarnpkg.com/@trufflesuite/eth-json-rpc-infura/-/eth-json-rpc-infura-4.0.3-0.tgz#6d22122937cf60ec9d21a02351c101fdc608c4fe" - integrity sha512-xaUanOmo0YLqRsL0SfXpFienhdw5bpQ1WEXxMTRi57az4lwpZBv4tFUDvcerdwJrxX9wQqNmgUgd1BrR01dumw== +"@truffle/provider@^0.2.24": + version "0.2.55" + resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.2.55.tgz#044c7555fcae05128565096571bce44895aa9c5c" + integrity sha512-Tjs2cZsmRnzgBtFNXwO8cc1W7jIv0UaaLt3fOzks7rSUETo7M11GJ4U+uoCHSntrIW7E6sYS3KecOpzqJPw3Hg== dependencies: - "@trufflesuite/eth-json-rpc-middleware" "^4.4.2-1" - cross-fetch "^2.1.1" - eth-json-rpc-errors "^1.0.1" - json-rpc-engine "^5.1.3" + "@truffle/error" "^0.1.0" + "@truffle/interface-adapter" "^0.5.17" + web3 "1.5.3" -"@trufflesuite/eth-json-rpc-middleware@^4.4.2-0", "@trufflesuite/eth-json-rpc-middleware@^4.4.2-1": - version "4.4.2-1" - resolved "https://registry.yarnpkg.com/@trufflesuite/eth-json-rpc-middleware/-/eth-json-rpc-middleware-4.4.2-1.tgz#8c3638ed8a7ed89a1e5e71407de068a65bef0df2" - integrity sha512-iEy9H8ja7/8aYES5HfrepGBKU9n/Y4OabBJEklVd/zIBlhCCBAWBqkIZgXt11nBXO/rYAeKwYuE3puH3ByYnLA== +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + +"@typechain/ethers-v5@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz#cd3ca1590240d587ca301f4c029b67bfccd08810" + integrity sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw== dependencies: - "@trufflesuite/eth-sig-util" "^1.4.2" - btoa "^1.2.1" - clone "^2.1.1" - eth-json-rpc-errors "^1.0.1" - eth-query "^2.1.2" - ethereumjs-block "^1.6.0" - ethereumjs-tx "^1.3.7" - ethereumjs-util "^5.1.2" - ethereumjs-vm "^2.6.0" - fetch-ponyfill "^4.0.0" - json-rpc-engine "^5.1.3" - json-stable-stringify "^1.0.1" - pify "^3.0.0" - safe-event-emitter "^1.0.1" + ethers "^5.0.2" -"@trufflesuite/eth-sig-util@^1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@trufflesuite/eth-sig-util/-/eth-sig-util-1.4.2.tgz#b529e2f38ac08e652116f48981132a26242a4f08" - integrity sha512-+GyfN6b0LNW77hbQlH3ufZ/1eCON7mMrGym6tdYf7xiNw9Vv3jBO72bmmos1EId2NgBvPMhmYYm6DSLQFTmzrA== +"@typechain/ethers-v5@^7.0.1": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-7.2.0.tgz#d559cffe0efe6bdbc20e644b817f6fa8add5e8f8" + integrity sha512-jfcmlTvaaJjng63QsT49MT6R1HFhtO/TBMWbyzPFSzMmVIqb2tL6prnKBs4ZJrSvmgIXWy+ttSjpaxCTq8D/Tw== dependencies: - ethereumjs-abi "^0.6.8" - ethereumjs-util "^5.1.1" + lodash "^4.17.15" + ts-essentials "^7.0.1" -"@trufflesuite/web3-provider-engine@15.0.13-1": - version "15.0.13-1" - resolved "https://registry.yarnpkg.com/@trufflesuite/web3-provider-engine/-/web3-provider-engine-15.0.13-1.tgz#f6a7f7131a2fdc4ab53976318ed13ce83e8e4bcb" - integrity sha512-6u3x/iIN5fyj8pib5QTUDmIOUiwAGhaqdSTXdqCu6v9zo2BEwdCqgEJd1uXDh3DBmPRDfiZ/ge8oUPy7LerpHg== +"@typechain/hardhat@^2.1.2": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-2.3.1.tgz#1e8a6e3795e115a5d5348526282b5c597fab0b78" + integrity sha512-BQV8OKQi0KAzLXCdsPO0pZBNQQ6ra8A2ucC26uFX/kquRBtJu1yEyWnVSmtr07b5hyRoJRpzUeINLnyqz4/MAw== dependencies: - "@trufflesuite/eth-json-rpc-filters" "^4.1.2-1" - "@trufflesuite/eth-json-rpc-infura" "^4.0.3-0" - "@trufflesuite/eth-json-rpc-middleware" "^4.4.2-1" - "@trufflesuite/eth-sig-util" "^1.4.2" - async "^2.5.0" - backoff "^2.5.0" - clone "^2.0.0" - cross-fetch "^2.1.0" - eth-block-tracker "^4.4.2" - eth-json-rpc-errors "^2.0.2" - ethereumjs-block "^1.2.2" - ethereumjs-tx "^1.2.0" - ethereumjs-util "^5.1.5" - ethereumjs-vm "^2.3.4" - json-stable-stringify "^1.0.1" - promise-to-callback "^1.0.0" - readable-stream "^2.2.9" - request "^2.85.0" - semaphore "^1.0.3" - ws "^5.1.1" - xhr "^2.2.0" - xtend "^4.0.1" + fs-extra "^9.1.0" -"@types/bignumber.js@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@types/bignumber.js/-/bignumber.js-5.0.0.tgz#d9f1a378509f3010a3255e9cc822ad0eeb4ab969" - integrity sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA== +"@types/abstract-leveldown@*": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#f055979a99f7654e84d6b8e6267419e9c4cfff87" + integrity sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ== + +"@types/bn.js@*", "@types/bn.js@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" + integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== dependencies: - bignumber.js "*" + "@types/node" "*" -"@types/bn.js@^4.11.3", "@types/bn.js@^4.11.4", "@types/bn.js@^4.11.5": +"@types/bn.js@^4.11.3", "@types/bn.js@^4.11.5": version "4.11.6" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== dependencies: "@types/node" "*" -"@types/cbor@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/cbor/-/cbor-2.0.0.tgz#c627afc2ee22f23f2337fecb34628a4f97c6afbb" - integrity sha1-xievwu4i8j8jN/7LNGKKT5fGr7s= +"@types/chai@*", "@types/chai@^4.2.14": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.1.tgz#e2c6e73e0bdeb2521d00756d099218e9f5d90a04" + integrity sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ== + +"@types/glob@^7.1.1", "@types/glob@^7.1.3": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== dependencies: + "@types/minimatch" "*" "@types/node" "*" -"@types/chai@^4.2.6": - version "4.2.7" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.7.tgz#1c8c25cbf6e59ffa7d6b9652c78e547d9a41692d" - integrity sha512-luq8meHGYwvky0O7u0eQZdA7B4Wd9owUCqvbw2m3XCrCU8mplYOujMBbvyS547AxJkC+pGnd0Cm15eNxEUNU8g== +"@types/json-schema@^7.0.7": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== -"@types/fs-extra@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-7.0.0.tgz#9c4ad9e1339e7448a76698829def1f159c1b636c" - integrity sha512-ndoMMbGyuToTy4qB6Lex/inR98nPiNHacsgMPvy+zqMLgSxbt8VtWpDArpGp69h1fEDQHn1KB+9DWD++wgbwYA== +"@types/level-errors@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/level-errors/-/level-errors-3.0.0.tgz#15c1f4915a5ef763b51651b15e90f6dc081b96a8" + integrity sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ== + +"@types/levelup@^4.3.0": + version "4.3.3" + resolved "https://registry.yarnpkg.com/@types/levelup/-/levelup-4.3.3.tgz#4dc2b77db079b1cf855562ad52321aa4241b8ef4" + integrity sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA== dependencies: + "@types/abstract-leveldown" "*" + "@types/level-errors" "*" "@types/node" "*" -"@types/long@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" - integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== +"@types/lru-cache@^5.1.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== + +"@types/minimatch@*": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/mkdirp@^0.5.2": version "0.5.2" @@ -847,10 +1304,15 @@ dependencies: "@types/node" "*" -"@types/mocha@^5.2.7": - version "5.2.7" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.7.tgz#315d570ccb56c53452ff8638738df60726d5b6ea" - integrity sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ== +"@types/mocha@^8.0.4": + version "8.2.3" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.3.tgz#bbeb55fbc73f28ea6de601fbfa4613f58d785323" + integrity sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw== + +"@types/mustache@^4.1.2": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@types/mustache/-/mustache-4.1.3.tgz#467119da74ef48d9dd21c0a2f6dd398e1337421f" + integrity sha512-Bc3wzdDGfHE8kcf6HsDwqq/IDUginRlWLHbs8dYFAo/2jj91lip6/XJFgKvcCbFO6aEVpOBT1RGF72LZgNIbKQ== "@types/node-fetch@^2.5.5": version "2.5.6" @@ -865,33 +1327,16 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-13.11.1.tgz#49a2a83df9d26daacead30d0ccc8762b128d53c7" integrity sha512-eWQGP3qtxwL8FGneRrC5DwrJLGN4/dH1clNTuLfN81HCrxVtxRjygDTUoZJ5ASlDEeo0ppYFQjQIlXhtXpOn6g== -"@types/node@^10.12.18", "@types/node@^10.3.2": +"@types/node@^10.3.2": version "10.17.19" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.19.tgz#1d31ddd5503dba2af7a901aafef3392e4955620e" integrity sha512-46/xThm3zvvc9t9/7M3AaLEqtOpqlYYYcCZbpYVAQHG20+oMZBkae/VMrn4BTi6AJ8cpack0mEXhGiKmDNbLrQ== -"@types/node@^12.12.47", "@types/node@^12.12.6": +"@types/node@^12.12.6": version "12.19.15" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.15.tgz#0de7e978fb43db62da369db18ea088a63673c182" integrity sha512-lowukE3GUI+VSYSu6VcBXl14d61Rp5hA1D+61r16qnwC0lYNSqdxcvRh0pswejorHfS+HgwBasM8jLXz0/aOsw== -"@types/node@^12.6.1": - version "12.12.35" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.35.tgz#1e61b226c14380f4384f70cfe49a65c2c553ad2b" - integrity sha512-ASYsaKecA7TUsDrqIGPNk3JeEox0z/0XR/WsJJ8BIX/9+SkMSImQXKWfU/yBrSyc7ZSE/NPqLu36Nur0miCFfQ== - -"@types/node@^13.7.0": - version "13.13.40" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.40.tgz#f655ef327362cc83912f2e69336ddc62a24a9f88" - integrity sha512-eKaRo87lu1yAXrzEJl0zcJxfUMDT5/mZalFyOkT44rnQps41eS2pfWzbaulSPpQLFNy29bFqn+Y5lOTL8ATlEQ== - -"@types/npm@^2.0.29": - version "2.0.31" - resolved "https://registry.yarnpkg.com/@types/npm/-/npm-2.0.31.tgz#aad3aef7e165f2911a052abf548fbcc1bb468577" - integrity sha512-v4JpUx83wVGItleYsnYeZrM8NTLSnYDfTE/iGm4owy6zZPNFNmnsvvrxiYtG3cVHt/XutzTjUBQ9Bh8bnvEkCw== - dependencies: - "@types/node" "*" - "@types/pbkdf2@^3.0.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" @@ -899,10 +1344,15 @@ dependencies: "@types/node" "*" -"@types/prettier@^1.13.2": - version "1.19.1" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" - integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== +"@types/prettier@^2.1.1": + version "2.6.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.3.tgz#68ada76827b0010d0db071f739314fa429943d0a" + integrity sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg== + +"@types/qs@^6.9.7": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== "@types/resolve@^0.0.8": version "0.0.8" @@ -918,36 +1368,128 @@ dependencies: "@types/node" "*" -"@types/semver@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-5.5.0.tgz#146c2a29ee7d3bae4bf2fcb274636e264c813c45" - integrity sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ== - -"@types/web3@^1.0.20": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/web3/-/web3-1.2.2.tgz#d95a101547ce625c5ebd0470baa5dbd4b9f3c015" - integrity sha512-eFiYJKggNrOl0nsD+9cMh2MLk4zVBfXfGnVeRFbpiZzBE20eet4KLA3fXcjSuHaBn0RnQzwLAGdgzgzdet4C0A== +"@types/sinon-chai@^3.2.3": + version "3.2.8" + resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.8.tgz#5871d09ab50d671d8e6dd72e9073f8e738ac61dc" + integrity sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g== dependencies: - web3 "*" + "@types/chai" "*" + "@types/sinon" "*" -"@web3-js/scrypt-shim@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@web3-js/scrypt-shim/-/scrypt-shim-0.1.0.tgz#0bf7529ab6788311d3e07586f7d89107c3bea2cc" - integrity sha512-ZtZeWCc/s0nMcdx/+rZwY1EcuRdemOK9ag21ty9UsHkFxsNb/AaoucUz0iPuyGe0Ku+PFuRmWZG7Z7462p9xPw== +"@types/sinon@*": + version "10.0.11" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.11.tgz#8245827b05d3fc57a6601bd35aee1f7ad330fc42" + integrity sha512-dmZsHlBsKUtBpHriNjlK0ndlvEh8dcb9uV9Afsbt89QIyydpC7NcR+nWlAhASfy3GHnxTl4FX/aKE7XZUt/B4g== dependencies: - scryptsy "^2.1.0" - semver "^6.3.0" + "@types/sinonjs__fake-timers" "*" -"@web3-js/websocket@^1.0.29": - version "1.0.30" - resolved "https://registry.yarnpkg.com/@web3-js/websocket/-/websocket-1.0.30.tgz#9ea15b7b582cf3bf3e8bc1f4d3d54c0731a87f87" - integrity sha512-fDwrD47MiDrzcJdSeTLF75aCcxVVt8B1N74rA+vh2XCAvFy4tEWJjtnUtj2QG7/zlQ6g9cQ88bZFBxwd9/FmtA== +"@types/sinonjs__fake-timers@*": + version "8.1.2" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz#bf2e02a3dbd4aecaf95942ecd99b7402e03fad5e" + integrity sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA== + +"@types/underscore@*": + version "1.11.4" + resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.11.4.tgz#62e393f8bc4bd8a06154d110c7d042a93751def3" + integrity sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg== + +"@types/web3@1.0.19": + version "1.0.19" + resolved "https://registry.yarnpkg.com/@types/web3/-/web3-1.0.19.tgz#46b85d91d398ded9ab7c85a5dd57cb33ac558924" + integrity sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A== + dependencies: + "@types/bn.js" "*" + "@types/underscore" "*" + +"@typescript-eslint/eslint-plugin@^4.29.3": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" + integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== + dependencies: + "@typescript-eslint/experimental-utils" "4.33.0" + "@typescript-eslint/scope-manager" "4.33.0" + debug "^4.3.1" + functional-red-black-tree "^1.0.1" + ignore "^5.1.8" + regexpp "^3.1.0" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/experimental-utils@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" + integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== + dependencies: + "@types/json-schema" "^7.0.7" + "@typescript-eslint/scope-manager" "4.33.0" + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/typescript-estree" "4.33.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/parser@^4.29.3": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" + integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== + dependencies: + "@typescript-eslint/scope-manager" "4.33.0" + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/typescript-estree" "4.33.0" + debug "^4.3.1" + +"@typescript-eslint/scope-manager@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" + integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== + dependencies: + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/visitor-keys" "4.33.0" + +"@typescript-eslint/types@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" + integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== + +"@typescript-eslint/typescript-estree@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" + integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== + dependencies: + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/visitor-keys" "4.33.0" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/visitor-keys@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" + integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== dependencies: - debug "^2.2.0" - es5-ext "^0.10.50" - nan "^2.14.0" - typedarray-to-buffer "^3.1.5" - yaeti "^0.0.6" + "@typescript-eslint/types" "4.33.0" + eslint-visitor-keys "^2.0.0" + +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q== abort-controller@^3.0.0: version "3.0.0" @@ -977,6 +1519,17 @@ abstract-leveldown@^5.0.0, abstract-leveldown@~5.0.0: dependencies: xtend "~4.0.0" +abstract-leveldown@^6.2.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" + integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== + dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + abstract-leveldown@~2.6.0: version "2.6.3" resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8" @@ -984,6 +1537,17 @@ abstract-leveldown@~2.6.0: dependencies: xtend "~4.0.0" +abstract-leveldown@~6.2.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" + integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== + dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -992,12 +1556,47 @@ accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" +acorn-jsx@^5.0.0, acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^6.0.7: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + +acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.4.1: + version "8.7.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" + integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== + +address@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/address/-/address-1.2.0.tgz#d352a62c92fee90f89a693eccd2a8b2139ab02d9" + integrity sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig== + +adm-zip@^0.4.16: + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + aes-js@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0= -aes-js@^3.1.1: +aes-js@^3.1.1, aes-js@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a" integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== @@ -1009,7 +1608,15 @@ agent-base@6: dependencies: debug "4" -ajv@^6.10.0: +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.6.1, ajv@^6.9.1: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1029,6 +1636,21 @@ ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^8.0.1: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== + ansi-colors@3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" @@ -1039,11 +1661,23 @@ ansi-colors@4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -1059,6 +1693,11 @@ ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -1071,30 +1710,42 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.1.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" +antlr4@4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.7.1.tgz#69984014f096e9e775f53dd9744bf994d8959773" + integrity sha512-haHyTW7Y9joE5MVs37P2lNYfU2RWBLfcRDD8OWldcdZm5TiCE91B5Xl1oWSwiDUSd4rlExpt2pu1fksYQjRBYQ== + +antlr4ts@^0.5.0-alpha.4: + version "0.5.0-alpha.4" + resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" + integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== + any-promise@1.3.0, any-promise@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" -app-module-path@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5" - integrity sha1-ZBqlXft9am8KgUHEucCqULbCTdU= +apollo-fetch@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/apollo-fetch/-/apollo-fetch-0.7.0.tgz#63c255a0ccb1b4c473524d8f9b536d72438bd3e7" + integrity sha512-0oHsDW3Zxx+Of1wuqcOXruNj4Kv55WN69tkIjwkCQDEIrgCpgA2scjChFsgflSVMy/1mkTKCY1Mc0TYJhNRzmw== + dependencies: + cross-fetch "^1.0.0" arb-ethers-web3-bridge@^0.7.3: version "0.7.3" @@ -1116,6 +1767,26 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== + array-back@^1.0.3, array-back@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/array-back/-/array-back-1.0.4.tgz#644ba7f095f7ffcf7c43b5f0dc39d3c1f03c063b" @@ -1140,21 +1811,15 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= -array.prototype.map@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.3.tgz#1609623618d3d84134a37d4a220030c2bd18420b" - integrity sha512-nNcb30v0wfDyIe26Yif3PcV1JXQp4zEeEfupG7L4SRjnD6HLbO5b2a7eVSba53bOx4YCHYMBHt+Fp4vYstneRA== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.5" +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -arrify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== asn1.js@^4.0.0: version "4.10.1" @@ -1182,7 +1847,27 @@ assertion-error@^1.1.0: resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== -async-eventemitter@^0.2.2: +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== + +ast-parents@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/ast-parents/-/ast-parents-0.0.1.tgz#508fd0f05d0c48775d9eccda2e174423261e8dd3" + integrity sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA== + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-eventemitter@^0.2.2, async-eventemitter@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== @@ -1194,6 +1879,18 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== +async-mutex@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.2.6.tgz#0d7a3deb978bc2b984d5908a2038e1ae2e54ff40" + integrity sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw== + dependencies: + tslib "^2.0.0" + +async@1.x, async@^1.4.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + async@2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" @@ -1201,11 +1898,6 @@ async@2.6.2: dependencies: lodash "^4.17.11" -async@^1.4.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0, async@^2.6.1: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -1218,6 +1910,16 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + available-typed-arrays@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5" @@ -1225,10 +1927,20 @@ available-typed-arrays@^1.0.2: dependencies: array-filter "^1.0.0" -await-semaphore@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/await-semaphore/-/await-semaphore-0.1.3.tgz#2b88018cc8c28e06167ae1cdff02504f1f9688d3" - integrity sha512-d1W2aNSYcz/sxYO4pMGX9vq65qOTu0P800epMud+6cYYX0QcT7zyqcxec3VWzpgvdXo57UWmVbZpLMjX2m1I7Q== +aws-sdk@^2.980.0: + version "2.1163.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1163.0.tgz#2c24b82987c6a842d9bec8a0d61a13cb36b26bba" + integrity sha512-vSCPTNduqxv5cGe3al/0V6dxPr+hpDRR7B9AADtVp+iHS+HdLCeNZbGhT66VfFjXVXXEfbAuF4ME9fYSc5/mOg== + dependencies: + buffer "4.9.2" + events "1.1.1" + ieee754 "1.1.13" + jmespath "0.16.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + uuid "8.0.0" + xml2js "0.4.19" aws-sign2@~0.7.0: version "0.7.0" @@ -1240,13 +1952,12 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== -axios@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3" - integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g== +axios@^0.21.1: + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== dependencies: - follow-redirects "1.5.10" - is-buffer "^2.0.2" + follow-redirects "^1.14.0" babel-code-frame@^6.26.0: version "6.26.0" @@ -1282,6 +1993,18 @@ babel-core@^6.0.14, babel-core@^6.26.0: slash "^1.0.0" source-map "^0.5.7" +babel-eslint@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + babel-generator@^6.26.0: version "6.26.1" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" @@ -1661,6 +2384,15 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" +babel-polyfill@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + integrity sha512-F2rZGQnAdaHWQ8YAoeRbukc7HS9QgdgeyJ0rQDd485v9opwuPvjpPFcOOT/WmkKTdgy9ESgSPXDcTNpzrGr6iQ== + dependencies: + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" + babel-preset-env@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" @@ -1791,11 +2523,24 @@ base64-js@^1.0.2: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== -base64-js@^1.3.0, base64-js@^1.3.1: +base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -1803,26 +2548,21 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -bignumber.js@*: - version "9.0.0" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.0.tgz#805880f84a329b5eac6e7cb6f8274b6d82bdf075" - integrity sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A== - -bignumber.js@^7.2.0: - version "7.2.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" - integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== - -bignumber.js@^8.0.2: - version "8.1.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-8.1.1.tgz#4b072ae5aea9c20f6730e4e5d529df1271c4d885" - integrity sha512-QD46ppGintwPGuL1KqmwhR0O+N2cZUg8JG/VzwI2e28sM9TqHjQB10lI4QAaMHVbLzwVLLAwEglpKPViWX+5NQ== +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== bignumber.js@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== +bignumber.js@^9.0.1: + version "9.0.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" + integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -1866,7 +2606,7 @@ blakejs@^1.1.0: resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" integrity sha1-ad+S75U6qIylGjLfarHFShVfx6U= -bluebird@^3.4.1, bluebird@^3.5.0: +bluebird@^3.5.0, bluebird@^3.5.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -1891,6 +2631,11 @@ bn.js@^5.1.2: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== +bn.js@^5.1.3, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + body-parser@1.19.0, body-parser@^1.16.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" @@ -1907,11 +2652,6 @@ body-parser@1.19.0, body-parser@^1.16.0: raw-body "2.4.0" type-is "~1.6.17" -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1920,14 +2660,30 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@~3.0.2: +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" -brorand@^1.0.1: +brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= @@ -2005,11 +2761,6 @@ browserslist@^3.2.6: caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" -bs58@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-2.0.1.tgz#55908d58f1982aba2008fa1bed8f91998a29bf8d" - integrity sha1-VZCNWPGYKrogCPob7Y+RmYopv40= - bs58@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" @@ -2049,11 +2800,6 @@ buffer-crc32@~0.2.3: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= - buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" @@ -2074,6 +2820,22 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= +buffer-xor@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-2.0.2.tgz#34f7c64f04c777a1f8aac5e661273bb9dd320289" + integrity sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ== + dependencies: + safe-buffer "^5.1.1" + +buffer@4.9.2: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + buffer@^5.0.5, buffer@^5.2.1: version "5.6.0" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" @@ -2102,6 +2864,11 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + bytewise-core@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/bytewise-core/-/bytewise-core-1.2.3.tgz#3fb410c7e91558eb1ab22a82834577aa6bd61d42" @@ -2117,6 +2884,21 @@ bytewise@~1.1.0: bytewise-core "^1.2.2" typewise "^1.0.3" +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" @@ -2146,11 +2928,45 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" -camelcase@^5.0.0, camelcase@^5.3.1: +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ== + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A== + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ== + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + integrity sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg== + +camelcase@^5.0.0: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +camelcase@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + caniuse-lite@^1.0.30000844: version "1.0.30001041" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001041.tgz#c2ea138dafc6fe03877921ddcddd4a02a14daf76" @@ -2161,26 +2977,25 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -cbor@^4.1.5: - version "4.3.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-4.3.0.tgz#0217c1cadd067d9112f44336dca07e72020bb804" - integrity sha512-CvzaxQlaJVa88sdtTWvLJ++MbdtPHtZOBBNjm7h3YKUHILMs9nQyD4AC6hvFZy7GBVB3I6bRibJcxeHydyT2IQ== +cbor@^5.0.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c" + integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== dependencies: - bignumber.js "^9.0.0" - commander "^3.0.0" - json-text-sequence "^0.1" - nofilter "^1.0.3" + bignumber.js "^9.0.1" + nofilter "^1.0.4" -chai@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" - integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== +chai@^4.3.4: + version "4.3.6" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" + integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== dependencies: assertion-error "^1.1.0" check-error "^1.0.2" deep-eql "^3.0.1" get-func-name "^2.0.0" - pathval "^1.1.0" + loupe "^2.3.1" + pathval "^1.1.1" type-detect "^4.0.5" chalk@^1.1.3: @@ -2194,7 +3009,7 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2211,6 +3026,14 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -2228,50 +3051,31 @@ checkpoint-store@^1.1.0: dependencies: functional-red-black-tree "^1.0.1" -cheerio-select-tmp@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz#55bbef02a4771710195ad736d5e346763ca4e646" - integrity sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ== - dependencies: - css-select "^3.1.2" - css-what "^4.0.0" - domelementtype "^2.1.0" - domhandler "^4.0.0" - domutils "^2.4.4" - -cheerio@^1.0.0-rc.2: - version "1.0.0-rc.5" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.5.tgz#88907e1828674e8f9fee375188b27dadd4f0fa2f" - integrity sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw== - dependencies: - cheerio-select-tmp "^0.1.0" - dom-serializer "~1.2.0" - domhandler "^4.0.0" - entities "~2.1.0" - htmlparser2 "^6.0.0" - parse5 "^6.0.0" - parse5-htmlparser2-tree-adapter "^6.0.0" - -chokidar@3.4.2: - version "3.4.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" - integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== - dependencies: - anymatch "~3.1.1" +chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.2: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" braces "~3.0.2" - glob-parent "~5.1.0" + glob-parent "~5.1.2" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.4.0" + readdirp "~3.6.0" optionalDependencies: - fsevents "~2.1.2" + fsevents "~2.3.2" chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + cids@^0.7.1: version "0.7.5" resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" @@ -2296,6 +3100,21 @@ class-is@^1.1.0: resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -2303,18 +3122,20 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" -cli-cursor@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - cli-width@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w== + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -2324,6 +3145,15 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" @@ -2336,13 +3166,18 @@ clone@2.1.2, clone@^2.0.0, clone@^2.1.1: resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= -coinstring@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/coinstring/-/coinstring-2.3.0.tgz#cdb63363a961502404a25afb82c2e26d5ff627a4" - integrity sha1-zbYzY6lhUCQEolr7gsLibV/2J6Q= +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== dependencies: - bs58 "^2.0.1" - create-hash "^1.1.1" + map-visit "^1.0.0" + object-visit "^1.0.0" color-convert@^1.9.0: version "1.9.3" @@ -2389,16 +3224,16 @@ command-line-args@^4.0.7: find-replace "^1.0.3" typical "^2.6.1" -commander@3.0.2, commander@^3.0.0: +commander@2.18.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" + integrity sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ== + +commander@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== -commander@^2.15.1: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - commander@~2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" @@ -2406,6 +3241,16 @@ commander@~2.8.1: dependencies: graceful-readlink ">= 1.0.0" +complex.js@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.1.1.tgz#0675dac8e464ec431fb2ab7d30f41d889fb25c31" + integrity sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg== + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -2421,18 +3266,6 @@ concat-stream@^1.5.1: readable-stream "^2.2.2" typedarray "^0.0.6" -configstore@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-4.0.0.tgz#5933311e95d3687efb592c528b922d9262d227e7" - integrity sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ== - dependencies: - dot-prop "^4.1.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -2471,21 +3304,26 @@ cookie@0.4.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + cookiejar@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== + core-js-pure@^3.0.1: version "3.6.5" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== -core-js@3.6.5: - version "3.6.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" - integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== - core-js@^2.4.0, core-js@^2.5.0: version "2.6.11" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" @@ -2504,6 +3342,21 @@ cors@^2.8.1: object-assign "^4" vary "^1" +cosmiconfig@^5.0.7: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + create-ecdh@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" @@ -2512,7 +3365,7 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.0.0" -create-hash@^1.1.0, create-hash@^1.1.1, create-hash@^1.1.2, create-hash@^1.2.0: +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== @@ -2535,6 +3388,19 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-fetch@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-1.1.1.tgz#dede6865ae30f37eae62ac90ebb7bdac002b05a0" + integrity sha512-+VJE04+UfxxmBfcnmAu/lKor53RUCx/1ilOti4p+JgrnLQ4AZZIRoe2OEd76VaHyWQmQxqKnV+TaqjHC4r0HWw== + dependencies: + node-fetch "1.7.3" + whatwg-fetch "2.0.3" + cross-fetch@^2.1.0, cross-fetch@^2.1.1: version "2.2.3" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.3.tgz#e8a0b3c54598136e037f8650f8e823ccdfac198e" @@ -2543,6 +3409,26 @@ cross-fetch@^2.1.0, cross-fetch@^2.1.1: node-fetch "2.1.2" whatwg-fetch "2.0.4" +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + crypto-browserify@3.12.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -2560,27 +3446,6 @@ crypto-browserify@3.12.0: randombytes "^2.0.0" randomfill "^1.0.3" -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= - -css-select@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-3.1.2.tgz#d52cbdc6fee379fba97fb0d3925abbd18af2d9d8" - integrity sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA== - dependencies: - boolbase "^1.0.0" - css-what "^4.0.0" - domhandler "^4.0.0" - domutils "^2.4.3" - nth-check "^2.0.0" - -css-what@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-4.0.0.tgz#35e73761cab2eeb3d3661126b23d7aa0e8432233" - integrity sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A== - d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" @@ -2596,7 +3461,12 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -debug@2.6.9, debug@^2.2.0, debug@^2.6.8, debug@^2.6.9: +death@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" + integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w== + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2617,31 +3487,34 @@ debug@4, debug@^4.0.1: dependencies: ms "2.1.2" -debug@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -debug@=3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== +debug@4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== dependencies: - ms "2.0.0" + ms "2.1.2" -debug@^3.0.1: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: - ms "^2.1.1" + ms "2.1.2" -decamelize@^1.2.0: +decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decimal.js@^10.3.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" + integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== decode-uri-component@^0.2.0: version "0.2.0" @@ -2727,6 +3600,11 @@ deep-equal@~1.1.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + defer-to-connect@^1.0.1: version "1.1.3" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" @@ -2747,6 +3625,14 @@ deferred-leveldown@~4.0.0: abstract-leveldown "~5.0.0" inherits "^2.0.3" +deferred-leveldown@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" + integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== + dependencies: + abstract-leveldown "~6.2.1" + inherits "^2.0.3" + define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -2754,6 +3640,28 @@ define-properties@^1.1.2, define-properties@^1.1.3: dependencies: object-keys "^1.0.12" +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + defined@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" @@ -2764,10 +3672,10 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -delimit-stream@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/delimit-stream/-/delimit-stream-0.1.0.tgz#9b8319477c0e5f8aeb3ce357ae305fc25ea1cd2b" - integrity sha1-m4MZR3wOX4rrPONXrjBfwl6hzSs= +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== depd@~1.1.2: version "1.1.2" @@ -2794,12 +3702,25 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" +detect-port@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" + integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== + dependencies: + address "^1.0.1" + debug "^2.6.0" + diff@3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== -diff@4.0.2, diff@^4.0.1: +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== @@ -2813,57 +3734,29 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" -dom-serializer@^1.0.1, dom-serializer@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.2.0.tgz#3433d9136aeb3c627981daa385fc7f32d27c48f1" - integrity sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA== +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - entities "^2.0.0" + path-type "^4.0.0" -dom-storage@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/dom-storage/-/dom-storage-2.1.0.tgz#00fb868bc9201357ea243c7bcfd3304c1e34ea39" - integrity sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q== +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" dom-walk@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== -domelementtype@^2.0.1, domelementtype@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" - integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== - -domhandler@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.0.0.tgz#01ea7821de996d85f69029e81fa873c21833098e" - integrity sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA== - dependencies: - domelementtype "^2.1.0" - -domutils@^2.4.3, domutils@^2.4.4: - version "2.4.4" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.4.tgz#282739c4b150d022d34699797369aad8d19bbbd3" - integrity sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.0.1" - domhandler "^4.0.0" - -dot-prop@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" - integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ== - dependencies: - is-obj "^1.0.0" - -dotenv@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" - integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== +dotenv@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== dotignore@~0.1.2: version "0.1.2" @@ -2894,13 +3787,6 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -2921,10 +3807,10 @@ elliptic@6.3.3: hash.js "^1.0.0" inherits "^2.0.1" -elliptic@6.5.2, elliptic@^6.0.0, elliptic@^6.4.0, elliptic@^6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" - integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== +elliptic@6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -2934,10 +3820,23 @@ elliptic@6.5.2, elliptic@^6.0.0, elliptic@^6.4.0, elliptic@^6.5.2: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" -elliptic@6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" - integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== +elliptic@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +elliptic@^6.0.0, elliptic@^6.4.0, elliptic@^6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" + integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -2947,11 +3846,26 @@ elliptic@6.5.3: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" +emoji-regex@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.1.0.tgz#d50e383743c0f7a5945c47087295afc112e3cf66" + integrity sha512-xAEnNCT3w2Tg6MA7ly6QqYJvEoY1tm9iIjJ3yMKK9JPlWuRHAMoe5iETwQnx3M9TVbFMfsrBgWKR+IsmswwNjg== + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encode-utf8@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -2968,6 +3882,16 @@ encoding-down@5.0.4, encoding-down@~5.0.0: level-errors "^2.0.0" xtend "^4.0.1" +encoding-down@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" + integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== + dependencies: + abstract-leveldown "^6.2.1" + inherits "^2.0.3" + level-codec "^9.0.0" + level-errors "^2.0.0" + encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" @@ -2982,10 +3906,12 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -entities@^2.0.0, entities@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" - integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== +enquirer@^2.3.0, enquirer@^2.3.5, enquirer@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" env-paths@^2.2.0: version "2.2.0" @@ -2999,6 +3925,13 @@ errno@~0.1.1: dependencies: prr "~1.0.1" +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: version "1.17.5" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" @@ -3036,25 +3969,6 @@ es-abstract@^1.18.0-next.1: string.prototype.trimend "^1.0.3" string.prototype.trimstart "^1.0.3" -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - -es-get-iterator@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.1.tgz#b93ddd867af16d5118e00881396533c1c6647ad9" - integrity sha512-qorBw8Y7B15DVLaJWy6WdEV/ZkieBcu6QCq/xzWzGOKJqgG1j754vXRfZ3NY7HSShneqU43mPB4OkQBTkvHhFw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.1" - has-symbols "^1.0.1" - is-arguments "^1.0.4" - is-map "^2.0.1" - is-set "^2.0.1" - is-string "^1.0.5" - isarray "^2.0.5" - es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -3090,26 +4004,235 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.3: d "^1.0.1" ext "^1.1.2" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= +escape-latex@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/escape-latex/-/escape-latex-1.2.0.tgz#07c03818cf7dac250cce517f4fda1b001ef2bca1" + integrity sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw== + escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escape-string-regexp@4.0.0: +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escodegen@1.8.x: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + integrity sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A== + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^1.3.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint@^5.6.0: + version "5.16.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" + integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.9.1" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^4.0.3" + eslint-utils "^1.3.1" + eslint-visitor-keys "^1.0.0" + espree "^5.0.1" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^6.2.2" + js-yaml "^3.13.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.11" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^5.5.1" + strip-ansi "^4.0.0" + strip-json-comments "^2.0.1" + table "^5.2.3" + text-table "^0.2.0" + +eslint@^7.32.0: + version "7.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.1.2" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" + integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== + dependencies: + acorn "^6.0.7" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@2.7.x, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A== + esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== +esquery@^1.0.1, esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0, esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + integrity sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA== + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -3145,27 +4268,25 @@ eth-block-tracker@^4.4.2: pify "^3.0.0" safe-event-emitter "^1.0.1" -eth-ens-namehash@2.0.8: +eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" - integrity sha1-IprEbsqG1S4MmR58sq74P/D2i88= + integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== dependencies: idna-uts46-hx "^2.3.1" js-sha3 "^0.5.7" -eth-json-rpc-errors@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/eth-json-rpc-errors/-/eth-json-rpc-errors-1.1.1.tgz#148377ef55155585981c21ff574a8937f9d6991f" - integrity sha512-WT5shJ5KfNqHi9jOZD+ID8I1kuYWNrigtZat7GOQkvwo99f8SzAVaEcWhJUv656WiZOAg3P1RiJQANtUmDmbIg== - dependencies: - fast-safe-stringify "^2.0.6" - -eth-json-rpc-errors@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/eth-json-rpc-errors/-/eth-json-rpc-errors-2.0.2.tgz#c1965de0301fe941c058e928bebaba2e1285e3c4" - integrity sha512-uBCRM2w2ewusRHGxN8JhcuOb2RN3ueAOYH/0BhqdFmQkZx5lj5+fLKTz0mIVOzd4FG5/kUksCzCD7eTEim6gaA== +eth-json-rpc-filters@^4.2.1: + version "4.2.2" + resolved "https://registry.yarnpkg.com/eth-json-rpc-filters/-/eth-json-rpc-filters-4.2.2.tgz#eb35e1dfe9357ace8a8908e7daee80b2cd60a10d" + integrity sha512-DGtqpLU7bBg63wPMWg1sCpkKCf57dJ+hj/k3zF26anXMzkmtSBDExL8IhUu7LUd34f0Zsce3PYNO2vV2GaTzaw== dependencies: - fast-safe-stringify "^2.0.6" + "@metamask/safe-event-emitter" "^2.0.0" + async-mutex "^0.2.6" + eth-json-rpc-middleware "^6.0.0" + eth-query "^2.1.2" + json-rpc-engine "^6.1.0" + pify "^5.0.0" eth-json-rpc-infura@^3.1.0: version "3.2.1" @@ -3177,6 +4298,16 @@ eth-json-rpc-infura@^3.1.0: json-rpc-engine "^3.4.0" json-rpc-error "^2.0.0" +eth-json-rpc-infura@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/eth-json-rpc-infura/-/eth-json-rpc-infura-5.1.0.tgz#e6da7dc47402ce64c54e7018170d89433c4e8fb6" + integrity sha512-THzLye3PHUSGn1EXMhg6WTLW9uim7LQZKeKaeYsS9+wOBcamRiCQVGHa6D2/4P0oS0vSaxsBnU/J6qvn0MPdow== + dependencies: + eth-json-rpc-middleware "^6.0.0" + eth-rpc-errors "^3.0.0" + json-rpc-engine "^5.3.0" + node-fetch "^2.6.0" + eth-json-rpc-middleware@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/eth-json-rpc-middleware/-/eth-json-rpc-middleware-1.6.0.tgz#5c9d4c28f745ccb01630f0300ba945f4bef9593f" @@ -3196,6 +4327,23 @@ eth-json-rpc-middleware@^1.5.0: promise-to-callback "^1.0.0" tape "^4.6.3" +eth-json-rpc-middleware@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/eth-json-rpc-middleware/-/eth-json-rpc-middleware-6.0.0.tgz#4fe16928b34231a2537856f08a5ebbc3d0c31175" + integrity sha512-qqBfLU2Uq1Ou15Wox1s+NX05S9OcAEL4JZ04VZox2NS0U+RtCMjSxzXhLFWekdShUPZ+P8ax3zCO2xcPrp6XJQ== + dependencies: + btoa "^1.2.1" + clone "^2.1.1" + eth-query "^2.1.2" + eth-rpc-errors "^3.0.0" + eth-sig-util "^1.4.2" + ethereumjs-util "^5.1.2" + json-rpc-engine "^5.3.0" + json-stable-stringify "^1.0.1" + node-fetch "^2.6.1" + pify "^3.0.0" + safe-event-emitter "^1.0.1" + eth-lib@0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.7.tgz#2f93f17b1e23aec3759cd4a3fe20c1286a3fc1ca" @@ -3241,10 +4389,17 @@ eth-rpc-errors@^3.0.0: dependencies: fast-safe-stringify "^2.0.6" -eth-sig-util@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-2.3.0.tgz#c54a6ac8e8796f7e25f59cf436982a930e645231" - integrity sha512-ugD1AvaggvKaZDgnS19W5qOfepjGc7qHrt7TrAaL54gJw9SHvgIXJ3r2xOMW30RWJZNP+1GlTOy5oye7yXA4xA== +eth-rpc-errors@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz#6ddb6190a4bf360afda82790bb7d9d5e724f423a" + integrity sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg== + dependencies: + fast-safe-stringify "^2.0.6" + +eth-sig-util@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-3.0.0.tgz#75133b3d7c20a5731af0690c385e184ab942b97e" + integrity sha512-4eFkMOhpGbTxBQ3AMzVf0haUX2uTur7DpWiHzWyTURa28BVJJtOkcb9Ok5TV0YvEPG61DODPW7ZUATbJTslioQ== dependencies: buffer "^5.2.1" elliptic "^6.4.0" @@ -3261,6 +4416,16 @@ eth-sig-util@^1.4.2: ethereumjs-abi "git+https://github.com/ethereumjs/ethereumjs-abi.git" ethereumjs-util "^5.1.1" +eth-sig-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-3.0.1.tgz#8753297c83a3f58346bd13547b59c4b2cd110c96" + integrity sha512-0Us50HiGGvZgjtWTyAI/+qTzYPMLy5Q451D0Xy68bxq1QMWdoOddDwGvsqcFT27uohKgalM9z/yxplyt+mY2iQ== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^5.1.1" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.0" + eth-tx-summary@^3.1.2: version "3.2.4" resolved "https://registry.yarnpkg.com/eth-tx-summary/-/eth-tx-summary-3.2.4.tgz#e10eb95eb57cdfe549bf29f97f1e4f1db679035c" @@ -3304,7 +4469,17 @@ ethereum-common@^0.0.18: resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f" integrity sha1-L9w1dvIykDNYl26znaeDIT/5Uj8= -ethereum-cryptography@^0.1.3: +ethereum-cryptography@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.0.3.tgz#b1f8f4e702434b2016248dbb2f9fdd60c54772d8" + integrity sha512-NQLTW0x0CosoVb/n79x/TRHtfvS3hgNUPTUSCu0vM+9k6IIhHFFrAOJReneexjZsoZxMjJHnJn4lrE8EbnSyqQ== + dependencies: + "@noble/hashes" "1.0.0" + "@noble/secp256k1" "1.5.5" + "@scure/bip32" "1.0.1" + "@scure/bip39" "1.0.0" + +ethereum-cryptography@^0.1.2, ethereum-cryptography@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== @@ -3330,15 +4505,16 @@ ethereum-protocol@^1.0.1: resolved "https://registry.yarnpkg.com/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz#b7d68142f4105e0ae7b5e178cf42f8d4dc4b93cf" integrity sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg== -ethereum-waffle@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-2.4.1.tgz#db13376d5d366a0b3e8813cb64956a4682cbe144" - integrity sha512-52HOubO/V80LDGN+N3FVb6yBq8L5vV2+kP7wjR5AgDoEeQHIrwqumcjJ22tE+FvzR8+eHTh3ItXjQPqJrMp+Mw== +ethereum-waffle@^3.4.0: + version "3.4.4" + resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-3.4.4.tgz#1378b72040697857b7f5e8f473ca8f97a37b5840" + integrity sha512-PA9+jCjw4WC3Oc5ocSMBj5sXvueWQeAbvCA+hUlb6oFgwwKyq5ka3bWQ7QZcjzIX+TdFkxP4IbFmoY2D8Dkj9Q== dependencies: - "@ethereum-waffle/chai" "^2.4.1" - "@ethereum-waffle/compiler" "^2.4.1" - "@ethereum-waffle/provider" "^2.4.1" - ethers "^4.0.45" + "@ethereum-waffle/chai" "^3.4.4" + "@ethereum-waffle/compiler" "^3.4.4" + "@ethereum-waffle/mock-contract" "^3.4.4" + "@ethereum-waffle/provider" "^3.4.4" + ethers "^5.0.1" ethereumjs-abi@0.6.5: version "0.6.5" @@ -3348,15 +4524,7 @@ ethereumjs-abi@0.6.5: bn.js "^4.10.0" ethereumjs-util "^4.3.0" -ethereumjs-abi@0.6.7: - version "0.6.7" - resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.7.tgz#d1d1c5cdb8d910a7d97645ba9e93be5d153bba2e" - integrity sha512-EMLOA8ICO5yAaXDhjVEfYjsJIXYutY8ufTE93eEKwsVtp2usQreKwsDTJ9zvam3omYqNuffr8IONIqb2uUslGQ== - dependencies: - bn.js "^4.11.8" - ethereumjs-util "^6.0.0" - -ethereumjs-abi@^0.6.8, "ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": +ethereumjs-abi@0.6.8, ethereumjs-abi@^0.6.8, "ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": version "0.6.8" resolved "git+https://github.com/ethereumjs/ethereumjs-abi.git#1cfbb13862f90f0b391d8a699544d5fe4dfb8c7b" dependencies: @@ -3432,7 +4600,7 @@ ethereumjs-tx@2.1.2, ethereumjs-tx@^2.1.1, ethereumjs-tx@^2.1.2: ethereumjs-common "^1.5.0" ethereumjs-util "^6.0.0" -ethereumjs-tx@^1.0.0, ethereumjs-tx@^1.1.1, ethereumjs-tx@^1.2.0, ethereumjs-tx@^1.2.2, ethereumjs-tx@^1.3.3, ethereumjs-tx@^1.3.7: +ethereumjs-tx@^1.1.1, ethereumjs-tx@^1.2.0, ethereumjs-tx@^1.2.2, ethereumjs-tx@^1.3.3: version "1.3.7" resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz#88323a2d875b10549b8347e09f4862b546f3d89a" integrity sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA== @@ -3440,18 +4608,18 @@ ethereumjs-tx@^1.0.0, ethereumjs-tx@^1.1.1, ethereumjs-tx@^1.2.0, ethereumjs-tx@ ethereum-common "^0.0.18" ethereumjs-util "^5.0.0" -ethereumjs-util@6.2.0, ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.0.tgz#23ec79b2488a7d041242f01e25f24e5ad0357960" - integrity sha512-vb0XN9J2QGdZGIEKG2vXM+kUdEivUfU6Wmi5y0cg+LRhDYKnXIZ/Lz7XjFbHRR9VIKq2lVGLzGBkA++y2nOdOQ== +ethereumjs-util@6.2.1, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== dependencies: "@types/bn.js" "^4.11.3" bn.js "^4.11.0" create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" ethjs-util "0.1.6" - keccak "^2.0.0" rlp "^2.2.3" - secp256k1 "^3.0.1" ethereumjs-util@^4.0.1, ethereumjs-util@^4.3.0: version "4.5.0" @@ -3477,18 +4645,42 @@ ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereum safe-buffer "^5.1.1" secp256k1 "^3.0.1" -ethereumjs-util@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" - integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== +ethereumjs-util@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz#a833f0e5fca7e5b361384dc76301a721f537bf65" + integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== dependencies: - "@types/bn.js" "^4.11.3" bn.js "^4.11.0" create-hash "^1.1.2" elliptic "^6.5.2" ethereum-cryptography "^0.1.3" + ethjs-util "^0.1.3" + rlp "^2.0.0" + safe-buffer "^5.1.1" + +ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.0.tgz#23ec79b2488a7d041242f01e25f24e5ad0357960" + integrity sha512-vb0XN9J2QGdZGIEKG2vXM+kUdEivUfU6Wmi5y0cg+LRhDYKnXIZ/Lz7XjFbHRR9VIKq2lVGLzGBkA++y2nOdOQ== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" ethjs-util "0.1.6" + keccak "^2.0.0" rlp "^2.2.3" + secp256k1 "^3.0.1" + +ethereumjs-util@^7.0.10, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.3, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: + version "7.1.5" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" ethereumjs-util@^7.0.2: version "7.0.7" @@ -3515,10 +4707,10 @@ ethereumjs-util@~6.1.0: safe-buffer "^5.1.1" secp256k1 "^3.0.1" -ethereumjs-vm@4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-4.1.3.tgz#dc8eb45f47d775da9f0b2437d5e20896fdf66f37" - integrity sha512-RTrD0y7My4O6Qr1P2ZIsMfD6RzL6kU/RhBZ0a5XrPzAeR61crBS7or66ohDrvxDI/rDBxMi+6SnsELih6fzalw== +ethereumjs-vm@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-4.2.0.tgz#e885e861424e373dbc556278f7259ff3fca5edab" + integrity sha512-X6qqZbsY33p5FTuZqCnQ4+lo957iUJMM6Mpa6bL4UW0dxM6WmDSHuI4j/zOp1E2TDKImBGCJA9QPfc08PaNubA== dependencies: async "^2.1.2" async-eventemitter "^0.2.2" @@ -3553,18 +4745,18 @@ ethereumjs-vm@^2.1.0, ethereumjs-vm@^2.3.4, ethereumjs-vm@^2.6.0: rustbn.js "~0.2.0" safe-buffer "^5.1.1" -ethereumjs-wallet@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-0.6.3.tgz#b0eae6f327637c2aeb9ccb9047b982ac542e6ab1" - integrity sha512-qiXPiZOsStem+Dj/CQHbn5qex+FVkuPmGH7SvSnA9F3tdRDt8dLMyvIj3+U05QzVZNPYh4HXEdnzoYI4dZkr9w== +ethereumjs-wallet@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-0.6.5.tgz#685e9091645cee230ad125c007658833991ed474" + integrity sha512-MDwjwB9VQVnpp/Dc1XzA6J1a3wgHQ4hSvA1uWNatdpOrtCbPVuQSKSyRnjLvS0a+KKMw2pvQ9Ybqpb3+eW8oNA== dependencies: aes-js "^3.1.1" bs58check "^2.1.2" + ethereum-cryptography "^0.1.3" ethereumjs-util "^6.0.0" - hdkey "^1.1.0" randombytes "^2.0.6" safe-buffer "^5.1.2" - scrypt.js "^0.3.0" + scryptsy "^1.2.1" utf8 "^3.0.0" uuid "^3.3.2" @@ -3582,6 +4774,20 @@ ethereumjs-wallet@^1.0.1: utf8 "^3.0.0" uuid "^3.3.2" +ethereumjs-wallet@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz#2c000504b4c71e8f3782dabe1113d192522e99b6" + integrity sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA== + dependencies: + aes-js "^3.1.2" + bs58check "^2.1.2" + ethereum-cryptography "^0.1.3" + ethereumjs-util "^7.1.2" + randombytes "^2.1.0" + scrypt-js "^3.0.1" + utf8 "^3.0.0" + uuid "^8.3.2" + ethers-providers@^2.1.19: version "2.1.19" resolved "https://registry.yarnpkg.com/ethers-providers/-/ethers-providers-2.1.19.tgz#d597e298f70cfbf8da207c303af0a5cbed5b4cd2" @@ -3617,7 +4823,7 @@ ethers@4.0.0-beta.3: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^4.0.20, ethers@^4.0.32: +ethers@^4.0.32: version "4.0.48" resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.48.tgz#330c65b8133e112b0613156e57e92d9009d8fbbe" integrity sha512-sZD5K8H28dOrcidzx9f8KYh8083n5BexIO3+SbE4jK83L85FxtpXZBCQdXb8gkg+7sBqomcLhhkU7UHL+F7I2g== @@ -3632,20 +4838,41 @@ ethers@^4.0.20, ethers@^4.0.32: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^4.0.45: - version "4.0.46" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.46.tgz#13cd3ed099487f43ece00194b89a8a8781f71507" - integrity sha512-/dPMzzpInhtiip4hKFvsDiJKeRk64IhyA+Po7CtNXneQFSOCYXg8eBFt+jXbxUQyApgWnWOtYxWdfn9+CvvxDA== - dependencies: - aes-js "3.0.0" - bn.js "^4.4.0" - elliptic "6.5.2" - hash.js "1.1.3" - js-sha3 "0.5.7" - scrypt-js "2.0.4" - setimmediate "1.0.4" - uuid "2.0.1" - xmlhttprequest "1.8.0" +ethers@^5.0.1, ethers@^5.0.2, ethers@^5.4.6, ethers@^5.5.2: + version "5.6.9" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.6.9.tgz#4e12f8dfcb67b88ae7a78a9519b384c23c576a4d" + integrity sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA== + dependencies: + "@ethersproject/abi" "5.6.4" + "@ethersproject/abstract-provider" "5.6.1" + "@ethersproject/abstract-signer" "5.6.2" + "@ethersproject/address" "5.6.1" + "@ethersproject/base64" "5.6.1" + "@ethersproject/basex" "5.6.1" + "@ethersproject/bignumber" "5.6.2" + "@ethersproject/bytes" "5.6.1" + "@ethersproject/constants" "5.6.1" + "@ethersproject/contracts" "5.6.2" + "@ethersproject/hash" "5.6.1" + "@ethersproject/hdnode" "5.6.2" + "@ethersproject/json-wallets" "5.6.1" + "@ethersproject/keccak256" "5.6.1" + "@ethersproject/logger" "5.6.0" + "@ethersproject/networks" "5.6.4" + "@ethersproject/pbkdf2" "5.6.1" + "@ethersproject/properties" "5.6.0" + "@ethersproject/providers" "5.6.8" + "@ethersproject/random" "5.6.1" + "@ethersproject/rlp" "5.6.1" + "@ethersproject/sha2" "5.6.1" + "@ethersproject/signing-key" "5.6.2" + "@ethersproject/solidity" "5.6.1" + "@ethersproject/strings" "5.6.1" + "@ethersproject/transactions" "5.6.2" + "@ethersproject/units" "5.6.1" + "@ethersproject/wallet" "5.6.2" + "@ethersproject/web" "5.6.1" + "@ethersproject/wordlists" "5.6.1" ethjs-unit@0.1.6: version "0.1.6" @@ -3655,7 +4882,7 @@ ethjs-unit@0.1.6: bn.js "4.11.6" number-to-bn "1.7.0" -ethjs-util@0.1.6, ethjs-util@^0.1.3: +ethjs-util@0.1.6, ethjs-util@^0.1.3, ethjs-util@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== @@ -3678,6 +4905,11 @@ eventemitter3@4.0.4: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== +events@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== + events@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" @@ -3691,6 +4923,19 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + express@^4.14.0: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -3734,7 +4979,22 @@ ext@^1.1.2: dependencies: type "^2.0.0" -extend@^3.0.2, extend@~3.0.2: +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -3748,6 +5008,20 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -3770,27 +5044,48 @@ fast-deep-equal@^3.1.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== +fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@^3.0.3, fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + fast-safe-stringify@^2.0.6: version "2.0.7" resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== -fast-text-encoding@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz#ec02ac8e01ab8a319af182dae2681213cfe9ce53" - integrity sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig== - -faye-websocket@0.11.3: - version "0.11.3" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" - integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== dependencies: - websocket-driver ">=0.5.1" + reusify "^1.0.4" fd-slicer@~1.1.0: version "1.1.0" @@ -3813,6 +5108,20 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + file-type@^3.8.0: version "3.9.0" resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" @@ -3833,6 +5142,16 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -3876,6 +5195,14 @@ find-up@5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA== + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -3883,25 +5210,37 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" -firebase@^7.8.0: - version "7.24.0" - resolved "https://registry.yarnpkg.com/firebase/-/firebase-7.24.0.tgz#dab53b9c0f1c9538d2d6f4f51769897b0b6d60d8" - integrity sha512-j6jIyGFFBlwWAmrlUg9HyQ/x+YpsPkc/TTkbTyeLwwAJrpAmmEHNPT6O9xtAnMV4g7d3RqLL/u9//aZlbY4rQA== - dependencies: - "@firebase/analytics" "0.6.0" - "@firebase/app" "0.6.11" - "@firebase/app-types" "0.6.1" - "@firebase/auth" "0.15.0" - "@firebase/database" "0.6.13" - "@firebase/firestore" "1.18.0" - "@firebase/functions" "0.5.1" - "@firebase/installations" "0.4.17" - "@firebase/messaging" "0.7.1" - "@firebase/performance" "0.4.2" - "@firebase/polyfill" "0.3.36" - "@firebase/remote-config" "0.1.28" - "@firebase/storage" "0.3.43" - "@firebase/util" "0.3.2" +find-yarn-workspace-root@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db" + integrity sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q== + dependencies: + fs-extra "^4.0.3" + micromatch "^3.1.4" + +find-yarn-workspace-root@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd" + integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== + dependencies: + micromatch "^4.0.2" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" flat@^4.1.0: version "4.1.0" @@ -3910,17 +5249,37 @@ flat@^4.1.0: dependencies: is-buffer "~2.0.3" +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + +flatted@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" + integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== + flow-stoplight@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/flow-stoplight/-/flow-stoplight-1.0.0.tgz#4a292c5bcff8b39fa6cc0cb1a853d86f27eeff7b" integrity sha1-SiksW8/4s5+mzAyxqFPYbyfu/3s= -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== +fmix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" + integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== dependencies: - debug "=3.1.0" + imul "^1.0.0" + +follow-redirects@^1.12.1, follow-redirects@^1.14.0: + version "1.15.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" + integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== for-each@~0.3.3: version "0.3.3" @@ -3929,6 +5288,11 @@ for-each@~0.3.3: dependencies: is-callable "^1.1.3" +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== + foreach@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" @@ -3948,6 +5312,15 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -3962,6 +5335,28 @@ forwarded@~0.1.2: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= +fp-ts@1.19.3: + version "1.19.3" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" + integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== + +fp-ts@^1.0.0: + version "1.19.5" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" + integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== + +fraction.js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== + dependencies: + map-cache "^0.2.2" + fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -3983,7 +5378,16 @@ fs-extra@^0.30.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" -fs-extra@^4.0.2: +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^4.0.2, fs-extra@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== @@ -4001,6 +5405,25 @@ fs-extra@^7.0.0, fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-minipass@^1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" @@ -4013,10 +5436,10 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@~2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1, function-bind@~1.1.1: version "1.1.1" @@ -4028,10 +5451,10 @@ functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -ganache-core@^2.10.2: - version "2.10.2" - resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.10.2.tgz#17c171c6c0195b6734a0dd741a9d2afd4f74e292" - integrity sha512-4XEO0VsqQ1+OW7Za5fQs9/Kk7o8M0T1sRfFSF8h9NeJ2ABaqMO5waqxf567ZMcSkRKaTjUucBSz83xNfZv1HDg== +ganache-core@^2.13.2: + version "2.13.2" + resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.13.2.tgz#27e6fc5417c10e6e76e2e646671869d7665814a3" + integrity sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw== dependencies: abstract-leveldown "3.0.0" async "2.6.2" @@ -4040,48 +5463,37 @@ ganache-core@^2.10.2: clone "2.1.2" debug "3.2.6" encoding-down "5.0.4" - eth-sig-util "2.3.0" - ethereumjs-abi "0.6.7" + eth-sig-util "3.0.0" + ethereumjs-abi "0.6.8" ethereumjs-account "3.0.0" ethereumjs-block "2.2.2" ethereumjs-common "1.5.0" ethereumjs-tx "2.1.2" - ethereumjs-util "6.2.0" - ethereumjs-vm "4.1.3" + ethereumjs-util "6.2.1" + ethereumjs-vm "4.2.0" heap "0.2.6" + keccak "3.0.1" level-sublevel "6.6.4" levelup "3.1.1" - lodash "4.17.14" - merkle-patricia-tree "2.3.2" + lodash "4.17.20" + lru-cache "5.1.1" + merkle-patricia-tree "3.0.0" + patch-package "6.2.2" seedrandom "3.0.1" source-map-support "0.5.12" tmp "0.1.0" web3-provider-engine "14.2.1" - websocket "1.0.29" + websocket "1.0.32" optionalDependencies: - ethereumjs-wallet "0.6.3" - web3 "1.2.4" - -gaxios@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-4.1.0.tgz#e8ad466db5a4383c70b9d63bfd14dfaa87eb0099" - integrity sha512-vb0to8xzGnA2qcgywAjtshOKKVDf2eQhJoiL6fHhgW5tVN7wNk7egnYIO9zotfn3lQ3De1VPdf7V5/BWfCtCmg== - dependencies: - abort-controller "^3.0.0" - extend "^3.0.2" - https-proxy-agent "^5.0.0" - is-stream "^2.0.0" - node-fetch "^2.3.0" + ethereumjs-wallet "0.6.5" + web3 "1.2.11" -gcp-metadata@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-4.2.1.tgz#31849fbcf9025ef34c2297c32a89a1e7e9f2cd62" - integrity sha512-tSk+REe5iq/N+K+SK1XjZJUrFPuDqGZVzCy2vocIHIGmPlTGsa8owXMJwGkrXr73NO0AzhPW4MF2DEHz7P2AVw== - dependencies: - gaxios "^4.0.0" - json-bigint "^1.0.0" +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -4091,7 +5503,7 @@ get-func-name@^2.0.0: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= -get-intrinsic@^1.0.1, get-intrinsic@^1.0.2: +get-intrinsic@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49" integrity sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg== @@ -4127,6 +5539,11 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -4134,13 +5551,28 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glob-parent@~5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== +ghost-testrpc@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz#c4de9557b1d1ae7b2d20bbe474a91378ca90ce92" + integrity sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ== + dependencies: + chalk "^2.4.2" + node-emoji "^1.10.0" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" +glob-promise@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/glob-promise/-/glob-promise-4.2.2.tgz#15f44bcba0e14219cd93af36da6bb905ff007877" + integrity sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw== + dependencies: + "@types/glob" "^7.1.3" + glob@7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" @@ -4153,7 +5585,42 @@ glob@7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@7.1.6, glob@^7.1.2, glob@^7.1.3, glob@^7.1.6, glob@~7.1.6: +glob@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^5.0.15: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.1.7: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.2, glob@^7.1.3, glob@^7.1.6, glob@~7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -4165,6 +5632,22 @@ glob@7.1.6, glob@^7.1.2, glob@^7.1.3, glob@^7.1.6, glob@~7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + global@~4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" @@ -4173,32 +5656,48 @@ global@~4.3.0: min-document "^2.19.0" process "~0.5.1" +globals@^11.1.0, globals@^11.7.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.6.0, globals@^13.9.0: + version "13.15.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac" + integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog== + dependencies: + type-fest "^0.20.2" + globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== -google-auth-library@^6.1.1: - version "6.1.4" - resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-6.1.4.tgz#bc70c4f3b6681ae5273343466bcef37577b7ee44" - integrity sha512-q0kYtGWnDd9XquwiQGAZeI2Jnglk7NDi0cChE4tWp6Kpo/kbqnt9scJb0HP+/xqt03Beqw/xQah1OPrci+pOxw== - dependencies: - arrify "^2.0.0" - base64-js "^1.3.0" - ecdsa-sig-formatter "^1.0.11" - fast-text-encoding "^1.0.0" - gaxios "^4.0.0" - gcp-metadata "^4.2.0" - gtoken "^5.0.4" - jws "^4.0.0" - lru-cache "^6.0.0" - -google-p12-pem@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-3.0.3.tgz#673ac3a75d3903a87f05878f3c75e06fc151669e" - integrity sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA== +globby@^10.0.1: + version "10.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" + integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== dependencies: - node-forge "^0.10.0" + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +globby@^11.0.3: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" got@9.6.0: version "9.6.0" @@ -4247,6 +5746,11 @@ graceful-fs@^4.1.11: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +graceful-fs@^4.2.0: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + "graceful-readlink@>= 1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" @@ -4257,15 +5761,17 @@ growl@1.10.5: resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== -gtoken@^5.0.4: - version "5.2.0" - resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-5.2.0.tgz#7f1e029f9472bb8899d6911c03c66f7ad985c849" - integrity sha512-qbf6JWEYFMj3WMAluvYXl8GAiji6w8d9OmAGCbBg0xF4xD/yu6ZaO6BhoXNddRjKcOUpZD81iea1H5B45gAo1g== +handlebars@^4.0.1: + version "4.7.7" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== dependencies: - gaxios "^4.0.0" - google-p12-pem "^3.0.3" - jws "^4.0.0" - mime "^2.2.0" + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" har-schema@^2.0.0: version "2.0.0" @@ -4280,6 +5786,88 @@ har-validator@~5.1.3: ajv "^6.5.5" har-schema "^2.0.0" +hardhat-deploy@^0.9.0: + version "0.9.29" + resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.9.29.tgz#b1177d4f3077f335ad3f50c55825d9417ec75968" + integrity sha512-8tIGszPFmOaXtyloCbASiZPvoAgLNGGL/Ubys3YW/oj4dvoPa8G6YDyaOCdsAhsENZ+QgR280NFSG9JdN7SU9Q== + dependencies: + "@ethersproject/abi" "^5.4.0" + "@ethersproject/abstract-signer" "^5.4.1" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.1" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/contracts" "^5.4.1" + "@ethersproject/providers" "^5.4.4" + "@ethersproject/solidity" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/wallet" "^5.4.0" + "@types/qs" "^6.9.7" + axios "^0.21.1" + chalk "^4.1.2" + chokidar "^3.5.2" + debug "^4.3.2" + enquirer "^2.3.6" + form-data "^4.0.0" + fs-extra "^10.0.0" + match-all "^1.2.6" + murmur-128 "^0.2.1" + qs "^6.9.4" + +hardhat@^2.9.5: + version "2.9.9" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.9.9.tgz#05c1015eb73e0230309534b00deeb080724aace0" + integrity sha512-Qv7SXnRc0zq1kGXruNnSKpP3eFccXMR5Qv6GVX9hBIJ5efN0PflKPq92aQ5Cv3jrjJeRevLznWZVz7bttXhVfw== + dependencies: + "@ethereumjs/block" "^3.6.2" + "@ethereumjs/blockchain" "^5.5.2" + "@ethereumjs/common" "^2.6.4" + "@ethereumjs/tx" "^3.5.1" + "@ethereumjs/vm" "^5.9.0" + "@ethersproject/abi" "^5.1.2" + "@metamask/eth-sig-util" "^4.0.0" + "@sentry/node" "^5.18.1" + "@solidity-parser/parser" "^0.14.1" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "^5.1.0" + abort-controller "^3.0.0" + adm-zip "^0.4.16" + aggregate-error "^3.0.0" + ansi-escapes "^4.3.0" + chalk "^2.4.2" + chokidar "^3.4.0" + ci-info "^2.0.0" + debug "^4.1.1" + enquirer "^2.3.0" + env-paths "^2.2.0" + ethereum-cryptography "^0.1.2" + ethereumjs-abi "^0.6.8" + ethereumjs-util "^7.1.4" + find-up "^2.1.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + glob "7.2.0" + immutable "^4.0.0-rc.12" + io-ts "1.10.4" + lodash "^4.17.11" + merkle-patricia-tree "^4.2.4" + mnemonist "^0.38.0" + mocha "^9.2.0" + p-map "^4.0.0" + qs "^6.7.0" + raw-body "^2.4.1" + resolve "1.17.0" + semver "^6.3.0" + slash "^3.0.0" + solc "0.7.3" + source-map-support "^0.5.13" + stacktrace-parser "^0.1.10" + "true-case-path" "^2.2.1" + tsort "0.0.1" + undici "^5.4.0" + uuid "^8.3.2" + ws "^7.4.6" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -4287,6 +5875,11 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -4314,6 +5907,37 @@ has-to-string-tag-x@^1.2.0: dependencies: has-symbol-support-x "^1.4.1" +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + has@^1.0.3, has@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -4337,7 +5961,7 @@ hash.js@1.1.3: inherits "^2.0.3" minimalistic-assert "^1.0.0" -hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== @@ -4345,15 +5969,6 @@ hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: inherits "^2.0.3" minimalistic-assert "^1.0.1" -hdkey@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-1.1.1.tgz#c2b3bfd5883ff9529b72f2f08b28be0972a9f64a" - integrity sha512-DvHZ5OuavsfWs5yfVJZestsnc3wzPvLWNk6c2nRUfo6X+OtxypGt20vDDf7Ba+MJzjL3KS1og2nw2eBbLCOUTA== - dependencies: - coinstring "^2.0.0" - safe-buffer "^5.1.1" - secp256k1 "^3.0.1" - he@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -4364,7 +5979,7 @@ heap@0.2.6: resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw= -hmac-drbg@^1.0.0: +hmac-drbg@^1.0.0, hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= @@ -4381,21 +5996,16 @@ home-or-tmp@^2.0.0: os-homedir "^1.0.0" os-tmpdir "^1.0.1" +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + hosted-git-info@^2.6.0: version "2.8.8" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== -htmlparser2@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.0.0.tgz#c2da005030390908ca4c91e5629e418e0665ac01" - integrity sha512-numTQtDZMoh78zJpaNdJ9MXb2cv5G3jwUoe3dMQODubZvLoGvTE/Ofp6sHvH8OGKcN/8A47pGLi/k58xHP/Tfw== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.4.4" - entities "^2.0.0" - http-cache-semantics@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" @@ -4412,6 +6022,17 @@ http-errors@1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + http-errors@~1.7.2: version "1.7.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" @@ -4428,11 +6049,6 @@ http-https@^1.0.0: resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs= -http-parser-js@>=0.5.1: - version "0.5.3" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" - integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== - http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -4457,11 +6073,6 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13: dependencies: safer-buffer ">= 2.1.2 < 3" -idb@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/idb/-/idb-3.0.2.tgz#c8e9122d5ddd40f13b60ae665e4862f8b13fa384" - integrity sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw== - idna-uts46-hx@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" @@ -4469,26 +6080,67 @@ idna-uts46-hx@^2.3.1: dependencies: punycode "2.1.0" +ieee754@1.1.13, ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.1, ignore@^5.1.8, ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== immediate@^3.2.3, immediate@~3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw= +immutable@^4.0.0-rc.12: + version "4.1.0" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" + integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg== + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imul@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" + integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -4512,7 +6164,12 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -inquirer@^6.4.1: +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inquirer@^6.2.2: version "6.5.2" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== @@ -4531,6 +6188,11 @@ inquirer@^6.4.1: strip-ansi "^5.1.0" through "^2.3.6" +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -4538,16 +6200,47 @@ invariant@^2.2.2: dependencies: loose-envify "^1.0.0" +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ== + +io-ts@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" + integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== + dependencies: + fp-ts "^1.0.0" + ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + is-arguments@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -4555,10 +6248,10 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-buffer@^2.0.2: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-buffer@~2.0.3: version "2.0.4" @@ -4575,6 +6268,13 @@ is-callable@^1.2.2: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + is-core-module@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" @@ -4582,11 +6282,72 @@ is-core-module@^2.1.0: dependencies: has "^1.0.3" +is-core-module@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" + integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + is-date-object@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== + +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -4602,11 +6363,23 @@ is-fn@^1.0.0: resolved "https://registry.yarnpkg.com/is-fn/-/is-fn-1.0.0.tgz#9543d5de7bcf5b08a22ec8a20bae6e286d510d8c" integrity sha1-lUPV3nvPWwiiLsiiC65uKG1RDYw= +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== + dependencies: + number-is-nan "^1.0.0" + is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-function@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" @@ -4617,6 +6390,13 @@ is-generator-function@^1.0.7: resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.8.tgz#dfb5c2b120e02b0a8d9d2c6806cd5621aa922f7b" integrity sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ== +is-glob@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" @@ -4629,11 +6409,6 @@ is-hex-prefixed@1.0.0: resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= -is-map@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - is-natural-number@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" @@ -4644,16 +6419,18 @@ is-negative-zero@^2.0.1: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== + dependencies: + kind-of "^3.0.2" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - is-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" @@ -4664,6 +6441,18 @@ is-plain-obj@^1.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + is-regex@^1.0.4, is-regex@^1.0.5, is-regex@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" @@ -4683,26 +6472,11 @@ is-retry-allowed@^1.0.0: resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== -is-set@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= -is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== - is-symbol@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" @@ -4726,31 +6500,60 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-url@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isarray@~1.0.0: +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -4764,18 +6567,15 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" -iterate-iterator@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/iterate-iterator/-/iterate-iterator-1.0.1.tgz#1693a768c1ddd79c969051459453f082fe82e9f6" - integrity sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw== +javascript-natural-sort@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" + integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw== -iterate-value@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/iterate-value/-/iterate-value-1.0.2.tgz#935115bd37d006a52046535ebc8d07e9c9337f57" - integrity sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ== - dependencies: - es-get-iterator "^1.0.2" - iterate-iterator "^1.0.1" +jmespath@0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076" + integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw== js-sha3@0.5.7, js-sha3@^0.5.7: version "0.5.7" @@ -4792,7 +6592,7 @@ js-sha3@^0.6.1: resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.6.1.tgz#5b89f77a7477679877f58c4a075240934b1f95c0" integrity sha1-W4n3enR3Z5h39YxKB1JAk0sflcA= -"js-tokens@^3.0.0 || ^4.0.0": +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== @@ -4810,14 +6610,21 @@ js-yaml@3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@3.14.0: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== +js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -4828,23 +6635,26 @@ jsesc@^1.3.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -json-bigint@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" - integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== - dependencies: - bignumber.js "^9.0.0" - json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + json-rpc-engine@^3.4.0, json-rpc-engine@^3.6.0: version "3.8.0" resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-3.8.0.tgz#9d4ff447241792e1d0a232f6ef927302bb0c62a9" @@ -4857,7 +6667,7 @@ json-rpc-engine@^3.4.0, json-rpc-engine@^3.6.0: promise-to-callback "^1.0.0" safe-event-emitter "^1.0.1" -json-rpc-engine@^5.1.3: +json-rpc-engine@^5.3.0: version "5.4.0" resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz#75758609d849e1dba1e09021ae473f3ab63161e5" integrity sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g== @@ -4865,6 +6675,14 @@ json-rpc-engine@^5.1.3: eth-rpc-errors "^3.0.0" safe-event-emitter "^1.0.1" +json-rpc-engine@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz#bf5ff7d029e1c1bf20cb6c0e9f348dcd8be5a393" + integrity sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ== + dependencies: + "@metamask/safe-event-emitter" "^2.0.0" + eth-rpc-errors "^4.0.2" + json-rpc-error@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/json-rpc-error/-/json-rpc-error-2.0.0.tgz#a7af9c202838b5e905c7250e547f1aff77258a02" @@ -4882,11 +6700,21 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" @@ -4899,13 +6727,6 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json-text-sequence@^0.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/json-text-sequence/-/json-text-sequence-0.1.1.tgz#a72f217dc4afc4629fff5feb304dc1bd51a2f3d2" - integrity sha1-py8hfcSvxGKf/1/rME3BvVGi89I= - dependencies: - delimit-stream "0.1.0" - json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -4925,11 +6746,25 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= +jsonschema@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" + integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -4940,22 +6775,13 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jwa@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc" - integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4" - integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== +keccak@3.0.1, keccak@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" + integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== dependencies: - jwa "^2.0.0" - safe-buffer "^5.0.1" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" keccak@^1.0.2: version "1.4.0" @@ -4977,14 +6803,6 @@ keccak@^2.0.0: nan "^2.14.0" safe-buffer "^5.2.0" -keccak@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" - integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== - dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - keccakjs@^0.2.0: version "0.2.3" resolved "https://registry.yarnpkg.com/keccakjs/-/keccakjs-0.2.3.tgz#5e4e969ce39689a3861f445d7752ee3477f9fe72" @@ -5000,6 +6818,37 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +klaw-sync@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" + integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== + dependencies: + graceful-fs "^4.1.11" + klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" @@ -5007,6 +6856,13 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw== + dependencies: + invert-kv "^1.0.0" + level-codec@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.1.tgz#042f4aa85e56d4328ace368c950811ba802b7247" @@ -5017,6 +6873,11 @@ level-codec@~7.0.0: resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7" integrity sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ== +level-concat-iterator@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" + integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== + level-errors@^1.0.3: version "1.1.2" resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.2.tgz#4399c2f3d3ab87d0625f7e3676e2d807deff404d" @@ -5066,6 +6927,15 @@ level-iterator-stream@~3.0.0: readable-stream "^2.3.6" xtend "^4.0.0" +level-iterator-stream@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" + integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== + dependencies: + inherits "^2.0.4" + readable-stream "^3.4.0" + xtend "^4.0.2" + level-mem@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-3.0.1.tgz#7ce8cf256eac40f716eb6489654726247f5a89e5" @@ -5074,6 +6944,22 @@ level-mem@^3.0.1: level-packager "~4.0.0" memdown "~3.0.0" +level-mem@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-5.0.1.tgz#c345126b74f5b8aa376dc77d36813a177ef8251d" + integrity sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg== + dependencies: + level-packager "^5.0.3" + memdown "^5.0.0" + +level-packager@^5.0.3: + version "5.1.1" + resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" + integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== + dependencies: + encoding-down "^6.3.0" + levelup "^4.3.2" + level-packager@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-4.0.1.tgz#7e7d3016af005be0869bc5fa8de93d2a7f56ffe6" @@ -5105,6 +6991,13 @@ level-sublevel@6.6.4: typewiselite "~1.0.0" xtend "~4.0.0" +level-supports@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" + integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== + dependencies: + xtend "^4.0.2" + level-ws@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-0.0.0.tgz#372e512177924a00424b0b43aef2bb42496d228b" @@ -5113,6 +7006,24 @@ level-ws@0.0.0: readable-stream "~1.0.15" xtend "~2.1.1" +level-ws@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-1.0.0.tgz#19a22d2d4ac57b18cc7c6ecc4bd23d899d8f603b" + integrity sha512-RXEfCmkd6WWFlArh3X8ONvQPm8jNpfA0s/36M4QzLqrLEIt1iJE9WBHLZ5vZJK6haMjJPJGJCQWfjMNnRcq/9Q== + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.8" + xtend "^4.0.1" + +level-ws@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-2.0.0.tgz#207a07bcd0164a0ec5d62c304b4615c54436d339" + integrity sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA== + dependencies: + inherits "^2.0.3" + readable-stream "^3.1.0" + xtend "^4.0.1" + levelup@3.1.1, levelup@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/levelup/-/levelup-3.1.1.tgz#c2c0b3be2b4dc316647c53b42e2f559e232d2189" @@ -5136,6 +7047,44 @@ levelup@^1.2.1: semver "~5.4.1" xtend "~4.0.0" +levelup@^4.3.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" + integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== + dependencies: + deferred-leveldown "~5.3.0" + level-errors "~2.0.0" + level-iterator-stream "~4.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A== + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -5159,42 +7108,35 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lockfile@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" - integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== - dependencies: - signal-exit "^3.0.2" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= +lodash.assign@^4.0.3, lodash.assign@^4.0.6: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + integrity sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw== -lodash.flatmap@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz#ef8cbf408f6e48268663345305c6acc0b778702e" - integrity sha1-74y/QI9uSCaGYzRTBcaswLd4cC4= +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== -lodash@4.17.14: - version "4.17.14" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" - integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== +lodash@4.17.20, lodash@^4.17.12, lodash@^4.17.19: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== -lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.19: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@2.2.0: version "2.2.0" @@ -5203,17 +7145,13 @@ log-symbols@2.2.0: dependencies: chalk "^2.0.1" -log-symbols@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" - integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== +log-symbols@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: - chalk "^4.0.0" - -long@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" - integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + chalk "^4.1.0" + is-unicode-supported "^0.1.0" looper@^2.0.0: version "2.0.0" @@ -5232,6 +7170,13 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +loupe@^2.3.1: + version "2.3.4" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" + integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== + dependencies: + get-func-name "^2.0.0" + lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" @@ -5242,6 +7187,13 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lru-cache@5.1.1, lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + lru-cache@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee" @@ -5249,13 +7201,6 @@ lru-cache@^3.2.0: dependencies: pseudomap "^1.0.1" -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -5263,6 +7208,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + ltgt@^2.1.2, ltgt@~2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" @@ -5285,6 +7235,43 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== + dependencies: + object-visit "^1.0.0" + +match-all@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.6.tgz#66d276ad6b49655551e63d3a6ee53e8be0566f8d" + integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== + +mathjs@^10.6.1: + version "10.6.4" + resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-10.6.4.tgz#1b87a1268781d64f0c8b4e5e1b36cf7ecf58bb05" + integrity sha512-omQyvRE1jIy+3k2qsqkWASOcd45aZguXZDckr3HtnTYyXk5+2xpVfC3kATgbO2Srjxlqww3TVdhD0oUdZ/hiFA== + dependencies: + "@babel/runtime" "^7.18.6" + complex.js "^2.1.1" + decimal.js "^10.3.1" + escape-latex "^1.2.0" + fraction.js "^4.2.0" + javascript-natural-sort "^0.7.1" + seedrandom "^3.0.5" + tiny-emitter "^2.1.0" + typed-function "^2.1.0" + +mcl-wasm@^0.7.1: + version "0.7.9" + resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" + integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -5311,6 +7298,18 @@ memdown@^1.0.0: ltgt "~2.2.0" safe-buffer "~5.1.1" +memdown@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/memdown/-/memdown-5.1.0.tgz#608e91a9f10f37f5b5fe767667a8674129a833cb" + integrity sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw== + dependencies: + abstract-leveldown "~6.2.1" + functional-red-black-tree "~1.0.1" + immediate "~3.2.3" + inherits "~2.0.1" + ltgt "~2.2.0" + safe-buffer "~5.2.0" + memdown@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/memdown/-/memdown-3.0.0.tgz#93aca055d743b20efc37492e9e399784f2958309" @@ -5333,7 +7332,25 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= -merkle-patricia-tree@2.3.2, merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: +merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +merkle-patricia-tree@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-3.0.0.tgz#448d85415565df72febc33ca362b8b614f5a58f8" + integrity sha512-soRaMuNf/ILmw3KWbybaCjhx86EYeBbD8ph0edQCTed0JN/rxDt1EBN52Ajre3VyGo+91f8+/rfPIRQnnGMqmQ== + dependencies: + async "^2.6.1" + ethereumjs-util "^5.2.0" + level-mem "^3.0.1" + level-ws "^1.0.0" + readable-stream "^3.0.6" + rlp "^2.0.0" + semaphore ">=1.0.1" + +merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz#982ca1b5a0fde00eed2f6aeed1f9152860b8208a" integrity sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g== @@ -5347,11 +7364,50 @@ merkle-patricia-tree@2.3.2, merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2 rlp "^2.0.0" semaphore ">=1.0.1" +merkle-patricia-tree@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz#ff988d045e2bf3dfa2239f7fabe2d59618d57413" + integrity sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w== + dependencies: + "@types/levelup" "^4.3.0" + ethereumjs-util "^7.1.4" + level-mem "^5.0.1" + level-ws "^2.0.0" + readable-stream "^3.6.0" + semaphore-async-await "^1.5.1" + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= +micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -5377,21 +7433,11 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.2.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.0.tgz#2b4af934401779806ee98026bb42e8c1ae1876b1" - integrity sha512-ft3WayFSFUVBuJj7BMLKAQcSlItKtfjsKDDsii3rqFDAZ7t11zRe8ASw/GlmivGwVUYtwkQrxiGGpL6gFvB0ag== - mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" @@ -5414,6 +7460,13 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= +"minimatch@2 || 3", minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + minimatch@3.0.4, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -5421,11 +7474,23 @@ minimatch@3.0.4, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +minimatch@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" + integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== + dependencies: + brace-expansion "^1.1.7" + minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + minimist@^1.2.5, minimist@~1.2.0: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" @@ -5446,6 +7511,14 @@ minizlib@^1.2.1: dependencies: minipass "^2.9.0" +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + mkdirp-promise@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" @@ -5465,6 +7538,13 @@ mkdirp@0.5.1: dependencies: minimist "0.0.8" +mkdirp@0.5.x: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" @@ -5472,36 +7552,12 @@ mkdirp@^0.5.0, mkdirp@^0.5.1: dependencies: minimist "^1.2.5" -mocha@8.1.2: - version "8.1.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.1.2.tgz#d67fad13300e4f5cd48135a935ea566f96caf827" - integrity sha512-I8FRAcuACNMLQn3lS4qeWLxXqLvGf6r2CaLstDpZmMUUSmvW6Cnm1AuHxgbc7ctZVRcfwspCRbDHymPsi3dkJw== +mnemonist@^0.38.0: + version "0.38.5" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" + integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== dependencies: - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.4.2" - debug "4.1.1" - diff "4.0.2" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.1.6" - growl "1.10.5" - he "1.2.0" - js-yaml "3.14.0" - log-symbols "4.0.0" - minimatch "3.0.4" - ms "2.1.2" - object.assign "4.1.0" - promise.allsettled "1.0.2" - serialize-javascript "4.0.0" - strip-json-comments "3.0.1" - supports-color "7.1.0" - which "2.0.2" - wide-align "1.1.3" - workerpool "6.0.0" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.1" + obliterator "^2.0.0" mocha@^6.2.2: version "6.2.2" @@ -5532,6 +7588,36 @@ mocha@^6.2.2: yargs-parser "13.1.1" yargs-unparser "1.6.0" +mocha@^9.2.0: + version "9.2.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" + integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.3" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + growl "1.10.5" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "4.2.1" + ms "2.1.3" + nanoid "3.3.1" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + which "2.0.2" + workerpool "6.2.0" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + mock-fs@^4.1.0: version "4.11.0" resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.11.0.tgz#0828107e4b843a6ba855ecebfe3c6e073b69db92" @@ -5552,6 +7638,11 @@ ms@2.1.2, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + multibase@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" @@ -5592,6 +7683,20 @@ multihashes@^0.4.15, multihashes@~0.4.15: multibase "^0.7.0" varint "^5.0.0" +murmur-128@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/murmur-128/-/murmur-128-0.2.1.tgz#a9f6568781d2350ecb1bf80c14968cadbeaa4b4d" + integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== + dependencies: + encode-utf8 "^1.0.2" + fmix "^0.1.0" + imul "^1.0.0" + +mustache@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" + integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== + mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -5602,7 +7707,7 @@ nan@2.13.2: resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== -nan@^2.0.8, nan@^2.14.0, nan@^2.2.1: +nan@^2.14.0, nan@^2.2.1: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== @@ -5612,21 +7717,65 @@ nano-json-stream-parser@^0.1.2: resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18= +nanoid@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" + integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +neo-async@^2.6.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + next-tick@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + node-addon-api@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== +node-emoji@^1.10.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== + dependencies: + lodash "^4.17.21" + node-environment-flags@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" @@ -5635,44 +7784,58 @@ node-environment-flags@1.0.5: object.getownpropertydescriptors "^2.0.3" semver "^5.7.0" +node-fetch@1.7.3, node-fetch@~1.7.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + node-fetch@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5" integrity sha1-q4hOjn5X44qUR1POxwb3iNF2i7U= -node-fetch@2.6.1, node-fetch@^2.3.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - node-fetch@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== -node-fetch@~1.7.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" - integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== +node-fetch@^2.6.1: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - -node-forge@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + whatwg-url "^5.0.0" node-gyp-build@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== -nofilter@^1.0.3: +nofilter@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== +nopt@3.x: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -5681,21 +7844,12 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: normalize-url@^4.1.0: version "4.5.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" - integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== - -npm-programmatic@0.0.12: - version "0.0.12" - resolved "https://registry.yarnpkg.com/npm-programmatic/-/npm-programmatic-0.0.12.tgz#566ba2452c886c7fd3a41586bd559cdc872fa77e" - integrity sha512-fvZdiJS038ZH31z59cEiIywOcgX1u23aLc0wAKF4btyhbYQxE93wTQjzs/URERK+GhS/QghDILQmEvgxu77/zQ== - dependencies: - bluebird "^3.4.1" + integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== -nth-check@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" - integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== - dependencies: - boolbase "^1.0.0" +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== number-to-bn@1.7.0: version "1.7.0" @@ -5715,6 +7869,15 @@ object-assign@^4, object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1 resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + object-inspect@^1.7.0, object-inspect@~1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" @@ -5743,6 +7906,13 @@ object-keys@~0.4.0: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== + dependencies: + isobject "^3.0.0" + object.assign@4.1.0, object.assign@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" @@ -5771,6 +7941,18 @@ object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0 define-properties "^1.1.3" es-abstract "^1.17.0-next.1" +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== + dependencies: + isobject "^3.0.1" + +obliterator@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" + integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== + oboe@2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.4.tgz#20c88cdb0c15371bb04119257d4fdd34b0aa49f6" @@ -5792,7 +7974,7 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -5806,23 +7988,50 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -original-require@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/original-require/-/original-require-1.0.1.tgz#0f130471584cd33511c5ec38c8d59213f9ac5e20" - integrity sha1-DxMEcVhM0zURxew4yNWSE/msXiA= +open@^7.4.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +optionator@^0.8.1, optionator@^0.8.2: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + integrity sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g== + dependencies: + lcid "^1.0.0" + os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -5885,6 +8094,13 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + p-timeout@^1.1.1: version "1.2.1" resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" @@ -5902,6 +8118,13 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + parse-asn1@^5.0.0: version "5.1.5" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" @@ -5919,28 +8142,80 @@ parse-headers@^2.0.0: resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA== -parse5-htmlparser2-tree-adapter@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" - integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== dependencies: - parse5 "^6.0.1" + error-ex "^1.2.0" -parse5@^6.0.0, parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== + +patch-package@6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.2.2.tgz#71d170d650c65c26556f0d0fbbb48d92b6cc5f39" + integrity sha512-YqScVYkVcClUY0v8fF0kWOjDYopzIM8e3bj/RU1DPeEF14+dCGm6UeOYm4jvCyxqIEQ5/eJzmbWfDWnUleFNMg== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + chalk "^2.4.2" + cross-spawn "^6.0.5" + find-yarn-workspace-root "^1.2.1" + fs-extra "^7.0.1" + is-ci "^2.0.0" + klaw-sync "^6.0.0" + minimist "^1.2.0" + rimraf "^2.6.3" + semver "^5.6.0" + slash "^2.0.0" + tmp "^0.0.33" + +patch-package@^6.2.2: + version "6.4.7" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.4.7.tgz#2282d53c397909a0d9ef92dae3fdeb558382b148" + integrity sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + chalk "^2.4.2" + cross-spawn "^6.0.5" + find-yarn-workspace-root "^2.0.0" + fs-extra "^7.0.1" + is-ci "^2.0.0" + klaw-sync "^6.0.0" + minimist "^1.2.0" + open "^7.4.2" + rimraf "^2.6.3" + semver "^5.6.0" + slash "^2.0.0" + tmp "^0.0.33" + path-browserify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ== + dependencies: + pinkie-promise "^2.0.0" + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -5956,20 +8231,54 @@ path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== + +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= -pathval@^1.1.0: +path-type@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" - integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA= + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg== + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== pbkdf2@^3.0.17: version "3.1.1" @@ -6008,7 +8317,12 @@ picomatch@^2.0.4, picomatch@^2.2.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== -pify@^2.3.0: +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= @@ -6018,6 +8332,16 @@ pify@^3.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -6030,11 +8354,31 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== + +postinstall-postinstall@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3" + integrity sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ== + precond@0.2: version "0.2.3" resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" integrity sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw= +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + prepend-http@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" @@ -6045,11 +8389,35 @@ prepend-http@^2.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= -prettier@^1.14.2, prettier@^1.19.1: +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier-plugin-solidity@^1.0.0-beta.17: + version "1.0.0-beta.19" + resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-beta.19.tgz#7c3607fc4028f5e6a425259ff03e45eedf733df3" + integrity sha512-xxRQ5ZiiZyUoMFLE9h7HnUDXI/daf1tnmL1msEdcKmyh7ZGQ4YklkYLC71bfBpYU2WruTb5/SFLUaEb3RApg5g== + dependencies: + "@solidity-parser/parser" "^0.14.0" + emoji-regex "^10.0.0" + escape-string-regexp "^4.0.0" + semver "^7.3.5" + solidity-comments-extractor "^0.0.7" + string-width "^4.2.3" + +prettier@^1.14.3: version "1.19.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== +prettier@^2.1.2, prettier@^2.3.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + private@^0.1.6, private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -6065,10 +8433,10 @@ process@~0.5.1: resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8= -promise-polyfill@8.1.3: - version "8.1.3" - resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.1.3.tgz#8c99b3cf53f3a91c68226ffde7bde81d7f904116" - integrity sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g== +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== promise-to-callback@^1.0.0: version "1.0.0" @@ -6078,36 +8446,6 @@ promise-to-callback@^1.0.0: is-fn "^1.0.0" set-immediate-shim "^1.0.1" -promise.allsettled@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.2.tgz#d66f78fbb600e83e863d893e98b3d4376a9c47c9" - integrity sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg== - dependencies: - array.prototype.map "^1.0.1" - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - iterate-value "^1.0.0" - -protobufjs@^6.8.6: - version "6.10.2" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.10.2.tgz#b9cb6bd8ec8f87514592ba3fdfd28e93f33a469b" - integrity sha512-27yj+04uF6ya9l+qfpH187aqEzfCF4+Uit0I9ZBQVqK09hk/SQzKa2MUqUpXaVa7LOFRg1TSSr3lVxGOk6c0SQ== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/long" "^4.0.1" - "@types/node" "^13.7.0" - long "^4.0.0" - proxy-addr@~2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" @@ -6219,6 +8557,13 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +qs@^6.7.0, qs@^6.9.4: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" @@ -6238,6 +8583,11 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.0.6, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -6273,6 +8623,33 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" +raw-body@^2.4.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A== + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ== + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + readable-stream@^1.0.33: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" @@ -6283,7 +8660,7 @@ readable-stream@^1.0.33: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: +readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.2.2, readable-stream@^2.2.8, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -6296,6 +8673,15 @@ readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.2.2, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@^3.0.6, readable-stream@^3.1.0, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readable-stream@~1.0.15: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" @@ -6306,18 +8692,37 @@ readable-stream@~1.0.15: isarray "0.0.1" string_decoder "~0.10.x" -readdirp@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" - integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + +recursive-readdir@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + dependencies: + minimatch "3.0.4" + regenerate@^1.2.1: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== +regenerator-runtime@^0.10.5: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + integrity sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w== + regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" @@ -6337,6 +8742,14 @@ regenerator-transform@^0.10.0: babel-types "^6.19.0" private "^0.1.6" +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + regexp.prototype.flags@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" @@ -6345,6 +8758,16 @@ regexp.prototype.flags@^1.2.0: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +regexpp@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + regexpu-core@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" @@ -6366,6 +8789,16 @@ regjsparser@^0.1.4: dependencies: jsesc "~0.5.0" +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" @@ -6404,16 +8837,62 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-from-string@^2.0.0: +require-from-string@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" + integrity sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q== + +require-from-string@^2.0.0, require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug== + require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== + +resolve@1.1.x: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== + +resolve@1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^1.8.1: version "1.19.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" @@ -6444,14 +8923,6 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - resumer@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" @@ -6459,6 +8930,23 @@ resumer@~0.0.0: dependencies: through "~2.3.4" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + rimraf@^2.2.8, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -6473,6 +8961,13 @@ rimraf@^3.0.0: dependencies: glob "^7.1.3" +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -6500,6 +8995,13 @@ run-async@^2.2.0: resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + rustbn.js@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" @@ -6517,16 +9019,16 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + safe-event-emitter@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz#5b692ef22329ed8f69fdce607e50ca734f6f20af" @@ -6534,11 +9036,48 @@ safe-event-emitter@^1.0.1: dependencies: events "^3.0.0" +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== + dependencies: + ret "~0.1.10" + "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sax@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== + +sax@>=0.6.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +sc-istanbul@^0.4.5: + version "0.4.6" + resolved "https://registry.yarnpkg.com/sc-istanbul/-/sc-istanbul-0.4.6.tgz#cf6784355ff2076f92d70d59047d71c13703e839" + integrity sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g== + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.8.x" + esprima "2.7.x" + glob "^5.0.15" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" + scrypt-js@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.3.tgz#bb0040be03043da9a012a2cea9fc9f852cfc87d4" @@ -6549,35 +9088,12 @@ scrypt-js@2.0.4: resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== -scrypt-js@^3.0.0, scrypt-js@^3.0.1: +scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== -"scrypt-shim@github:web3-js/scrypt-shim": - version "0.1.0" - resolved "https://codeload.github.com/web3-js/scrypt-shim/tar.gz/aafdadda13e660e25e1c525d1f5b2443f5eb1ebb" - dependencies: - scryptsy "^2.1.0" - semver "^6.3.0" - -scrypt.js@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/scrypt.js/-/scrypt.js-0.3.0.tgz#6c62d61728ad533c8c376a2e5e3e86d41a95c4c0" - integrity sha512-42LTc1nyFsyv/o0gcHtDztrn+aqpkaCNt5Qh7ATBZfhEZU7IC/0oT/qbBH+uRNoAPvs2fwiOId68FDEoSRA8/A== - dependencies: - scryptsy "^1.2.1" - optionalDependencies: - scrypt "^6.0.2" - -scrypt@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/scrypt/-/scrypt-6.0.3.tgz#04e014a5682b53fa50c2d5cce167d719c06d870d" - integrity sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0= - dependencies: - nan "^2.0.8" - -scryptsy@2.1.0, scryptsy@^2.1.0: +scryptsy@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-2.1.0.tgz#8d1e8d0c025b58fdd25b6fa9a0dc905ee8faa790" integrity sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w== @@ -6617,6 +9133,11 @@ seedrandom@3.0.1: resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.1.tgz#eb3dde015bcf55df05a233514e5df44ef9dce083" integrity sha512-1/02Y/rUeU1CJBAGLebiC5Lbo5FnB22gQbIFFYTLkwvp1xdABZJH1sn4ZT1MzXmPpzv+Rf/Lu2NcsLJiK4rcDg== +seedrandom@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7" + integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg== + seek-bzip@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc" @@ -6624,26 +9145,38 @@ seek-bzip@^1.0.5: dependencies: commander "~2.8.1" +semaphore-async-await@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa" + integrity sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg== + semaphore@>=1.0.1, semaphore@^1.0.3, semaphore@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + semver@6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A== -semver@^5.3.0, semver@^5.5.0, semver@^5.5.1, semver@^5.7.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.2.0, semver@^6.3.0: +semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.2.1, semver@^7.3.4, semver@^7.3.5: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + semver@~5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" @@ -6668,10 +9201,10 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== dependencies: randombytes "^2.1.0" @@ -6706,6 +9239,16 @@ set-immediate-shim@^1.0.1: resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + setimmediate@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" @@ -6721,6 +9264,11 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" @@ -6736,6 +9284,48 @@ sha3@^1.2.2: dependencies: nan "2.13.2" +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shelljs@^0.8.3: + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -6746,33 +9336,85 @@ simple-concat@^1.0.0: resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= -simple-get@^2.7.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d" - integrity sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw== +simple-get@^2.7.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d" + integrity sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw== + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: - decompress-response "^3.3.0" - once "^1.3.1" - simple-concat "^1.0.0" + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" -simple-git@^1.110.0: - version "1.132.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.132.0.tgz#53ac4c5ec9e74e37c2fd461e23309f22fcdf09b1" - integrity sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg== +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: - debug "^4.0.1" + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" -solc-wrapper@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/solc-wrapper/-/solc-wrapper-0.6.3.tgz#3230f9665bf8dce9fbe5a1517bd81b96c605e3a3" - integrity sha512-FWBnuQfU537SVSsBxuE4XkOKcK88a/bpLMVde2gc3BZcj0VmPc38wYO0Hkqqxsek7ZLK2lmXuEDLmgXhXl8Kyw== +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +solc@0.5.16: + version "0.5.16" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.5.16.tgz#6c8d710a3792ccc79db924606b558a1149b1c603" + integrity sha512-weEtRtisJyf+8UjELs7S4ST1KK7UIq6SRB7tpprfJBL9b5mTrZAT7m4gJKi2h6MiBpuSWfnraK8BnkyWzuTMRA== dependencies: command-exists "^1.2.8" + commander "3.0.2" fs-extra "^0.30.0" js-sha3 "0.8.0" memorystream "^0.3.1" @@ -6780,13 +9422,14 @@ solc-wrapper@^0.6.3: semver "^5.5.0" tmp "0.0.33" -solc@0.5.16: - version "0.5.16" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.5.16.tgz#6c8d710a3792ccc79db924606b558a1149b1c603" - integrity sha512-weEtRtisJyf+8UjELs7S4ST1KK7UIq6SRB7tpprfJBL9b5mTrZAT7m4gJKi2h6MiBpuSWfnraK8BnkyWzuTMRA== +solc@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" + integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== dependencies: command-exists "^1.2.8" commander "3.0.2" + follow-redirects "^1.12.1" fs-extra "^0.30.0" js-sha3 "0.8.0" memorystream "^0.3.1" @@ -6794,6 +9437,17 @@ solc@0.5.16: semver "^5.5.0" tmp "0.0.33" +solc@^0.4.20: + version "0.4.26" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.4.26.tgz#5390a62a99f40806b86258c737c1cf653cc35cb5" + integrity sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA== + dependencies: + fs-extra "^0.30.0" + memorystream "^0.3.1" + require-from-string "^1.1.0" + semver "^5.3.0" + yargs "^4.7.1" + solc@^0.6.3: version "0.6.6" resolved "https://registry.yarnpkg.com/solc/-/solc-0.6.6.tgz#0d4b9c2e7105dd6015583f5e1c5ba6a35861ea71" @@ -6808,6 +9462,82 @@ solc@^0.6.3: semver "^5.5.0" tmp "0.0.33" +solhint-plugin-prettier@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/solhint-plugin-prettier/-/solhint-plugin-prettier-0.0.5.tgz#e3b22800ba435cd640a9eca805a7f8bc3e3e6a6b" + integrity sha512-7jmWcnVshIrO2FFinIvDQmhQpfpS2rRRn3RejiYgnjIE68xO2bvrYvjqVNfrio4xH9ghOqn83tKuTzLjEbmGIA== + dependencies: + prettier-linter-helpers "^1.0.0" + +solhint@^3.3.6: + version "3.3.7" + resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.3.7.tgz#b5da4fedf7a0fee954cb613b6c55a5a2b0063aa7" + integrity sha512-NjjjVmXI3ehKkb3aNtRJWw55SUVJ8HMKKodwe0HnejA+k0d2kmhw7jvpa+MCTbcEgt8IWSwx0Hu6aCo/iYOZzQ== + dependencies: + "@solidity-parser/parser" "^0.14.1" + ajv "^6.6.1" + antlr4 "4.7.1" + ast-parents "0.0.1" + chalk "^2.4.2" + commander "2.18.0" + cosmiconfig "^5.0.7" + eslint "^5.6.0" + fast-diff "^1.1.2" + glob "^7.1.3" + ignore "^4.0.6" + js-yaml "^3.12.0" + lodash "^4.17.11" + semver "^6.3.0" + optionalDependencies: + prettier "^1.14.3" + +solidity-bytes-utils@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/solidity-bytes-utils/-/solidity-bytes-utils-0.8.0.tgz#9d985a3c4aee68fbd532a9a065edade1c132442f" + integrity sha512-r109ZHEf7zTMm1ENW6/IJFDWilFR/v0BZnGuFgDHJUV80ByobnV2k3txvwQaJ9ApL+6XAfwqsw5VFzjALbQPCw== + dependencies: + "@truffle/hdwallet-provider" latest + +solidity-comments-extractor@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/solidity-comments-extractor/-/solidity-comments-extractor-0.0.7.tgz#99d8f1361438f84019795d928b931f4e5c39ca19" + integrity sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw== + +solidity-coverage@^0.7.20: + version "0.7.21" + resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.7.21.tgz#20c5615a3a543086b243c2ca36e2951a75316b40" + integrity sha512-O8nuzJ9yXiKUx3NdzVvHrUW0DxoNVcGzq/I7NzewNO9EZE3wYAQ4l8BwcnV64r4aC/HB6Vnw/q2sF0BQHv/3fg== + dependencies: + "@solidity-parser/parser" "^0.14.0" + "@truffle/provider" "^0.2.24" + chalk "^2.4.2" + death "^1.1.0" + detect-port "^1.3.0" + fs-extra "^8.1.0" + ghost-testrpc "^0.0.2" + global-modules "^2.0.0" + globby "^10.0.1" + jsonschema "^1.2.4" + lodash "^4.17.15" + node-emoji "^1.10.0" + pify "^4.0.1" + recursive-readdir "^2.2.2" + sc-istanbul "^0.4.5" + semver "^7.3.4" + shelljs "^0.8.3" + web3-utils "^1.3.0" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + source-map-support@0.5.12: version "0.5.12" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" @@ -6823,48 +9553,68 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" -source-map-support@^0.5.19: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== +source-map-support@^0.5.13: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@^0.5.6: - version "0.5.16" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" - integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -spinnies@^0.3.0: - version "0.3.2" - resolved "https://registry.yarnpkg.com/spinnies/-/spinnies-0.3.2.tgz#693d85cdaa095e253b13a8dc0dc8808cef23d678" - integrity sha512-WOvGI8X3h2XbAu/VBzIG99qJTeWCZ5RjyZtuLc4Q6qwAIv1/OPA2aL9j5wYEhwNsWLbBDHH5bLk/bOJTpexljw== +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + integrity sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA== dependencies: - chalk "^2.4.2" - cli-cursor "^3.0.0" + amdefine ">=0.0.4" -spinnies@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/spinnies/-/spinnies-0.4.3.tgz#2ea0ad148e78353ddf621dec3951a6f4c3cbf66e" - integrity sha512-TTA2vWXrXJpfThWAl2t2hchBnCMI1JM5Wmb2uyI7Zkefdw/xO98LDy6/SBYwQPiYXL3swx3Eb44ZxgoS8X5wpA== +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== dependencies: - chalk "^2.4.2" - cli-cursor "^3.0.0" - strip-ansi "^5.2.0" + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.11" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" sprintf-js@~1.0.2: version "1.0.3" @@ -6886,6 +9636,26 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +stacktrace-parser@^0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" @@ -6904,6 +9674,15 @@ strict-uri-encode@^1.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + "string-width@^1.0.2 || 2", string-width@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" @@ -6921,6 +9700,15 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string.prototype.trim@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz#141233dff32c82bfad80684d7e5f0869ee0fb782" @@ -6980,6 +9768,13 @@ string.prototype.trimstart@^1.0.3: call-bind "^1.0.0" define-properties "^1.1.3" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" @@ -6992,7 +9787,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^3.0.0: +strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= @@ -7013,6 +9808,20 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== + dependencies: + is-utf8 "^0.2.0" + strip-dirs@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" @@ -7027,15 +9836,15 @@ strip-hex-prefix@1.0.0: dependencies: is-hex-prefixed "1.0.0" -strip-json-comments@2.0.1: +strip-json-comments@2.0.1, strip-json-comments@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -strip-json-comments@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" - integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== supports-color@6.0.0: version "6.0.0" @@ -7044,10 +9853,10 @@ supports-color@6.0.0: dependencies: has-flag "^3.0.0" -supports-color@7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" @@ -7056,6 +9865,13 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= +supports-color@^3.1.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A== + dependencies: + has-flag "^1.0.0" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -7070,6 +9886,11 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + swarm-js@0.1.39: version "0.1.39" resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.39.tgz#79becb07f291d4b2a178c50fee7aa6e10342c0e8" @@ -7105,6 +9926,27 @@ swarm-js@^0.1.40: tar "^4.0.2" xhr-request "^1.0.1" +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +table@^6.0.9: + version "6.8.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" + integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + tape@^4.6.3: version "4.13.2" resolved "https://registry.yarnpkg.com/tape/-/tape-4.13.2.tgz#eb419b9d9bc004025b1a81a5b63093e07f425629" @@ -7160,6 +10002,16 @@ test-value@^2.1.0: array-back "^1.0.3" typical "^2.6.0" +testrpc@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/testrpc/-/testrpc-0.0.1.tgz#83e2195b1f5873aec7be1af8cbe6dcf39edb7aed" + integrity sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + through2@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -7178,6 +10030,11 @@ timed-out@^4.0.0, timed-out@^4.0.1: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= +tiny-emitter@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" + integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== + tmp@0.0.33, tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -7207,11 +10064,26 @@ to-fast-properties@^2.0.0: resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== + dependencies: + kind-of "^3.0.2" + to-readable-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -7219,25 +10091,25 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -"token-registry@git://github.com/nicoelzer/dxDAO-Token-Registry.git#master": - version "0.1.0" - resolved "git://github.com/nicoelzer/dxDAO-Token-Registry.git#d8304c71b6d19c315f4b2d58f41fd5d0692645dd" - dependencies: - "@openzeppelin/cli" "^2.8.1" - "@truffle/hdwallet-provider" "^1.0.33" - dotenv "^8.2.0" - truffle "^5.1.21" - truffle-assertions "^0.9.2" - -toposort@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" - integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== tough-cookie@~2.5.0: version "2.5.0" @@ -7247,46 +10119,20 @@ tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= -truffle-assertions@^0.9.2: - version "0.9.2" - resolved "https://registry.yarnpkg.com/truffle-assertions/-/truffle-assertions-0.9.2.tgz#0f8360f53ad92b6d8fdb8ceb5dce54c1fc392e23" - integrity sha512-9g2RhaxU2F8DeWhqoGQvL/bV8QVoSnQ6PY+ZPvYRP5eF7+/8LExb4mjLx/FeliLTjc3Tv1SABG05Gu5qQ/ErmA== - dependencies: - assertion-error "^1.1.0" - lodash.isequal "^4.5.0" - -truffle-config@1.1.16: - version "1.1.16" - resolved "https://registry.yarnpkg.com/truffle-config/-/truffle-config-1.1.16.tgz#366ec223165953c77852437e00f01ed8921a77a2" - integrity sha512-of9wKDjXAKIA4kpdQbxnSxRl4EOPi6ipkoOn01J3yC1UJ942jeyLm7hUrTRdxcL8Nz3G47xO+xTMX5T7UYbdTA== - dependencies: - configstore "^4.0.0" - find-up "^2.1.0" - lodash "^4.17.13" - original-require "1.0.1" - truffle-error "^0.0.5" - truffle-provider "^0.1.12" - -truffle-error@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/truffle-error/-/truffle-error-0.0.5.tgz#6b5740c9f3aac74f47b85d654fff7fe2c1fc5e0e" - integrity sha512-JpzPLMPSCE0vaZ3vH5NO5u42GpMj/Y1SRBkQ6b69PSw3xMSH1umApN32cEcg1nnh8q5FNYc5FnKu0m4tiBffyQ== - -truffle-flattener@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/truffle-flattener/-/truffle-flattener-1.5.0.tgz#c358fa3e5cb0a663429f7912a58c4f0879414e64" - integrity sha512-vmzWG/L5OXoNruMV6u2l2IaheI091e+t+fFCOR9sl46EE3epkSRIwGCmIP/EYDtPsFBIG7e6exttC9/GlfmxEQ== - dependencies: - "@resolver-engine/imports-fs" "^0.2.2" - "@solidity-parser/parser" "^0.8.0" - find-up "^2.1.0" - mkdirp "^1.0.4" - tsort "0.0.1" +"true-case-path@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" + integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== truffle-flattener@^1.4.4: version "1.4.4" @@ -7309,75 +10155,77 @@ truffle-hdwallet-provider@^1.0.17: web3 "1.2.1" websocket "^1.0.28" -truffle-interface-adapter@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/truffle-interface-adapter/-/truffle-interface-adapter-0.2.5.tgz#aa0bee635517b4a8e06adcdc99eacb993e68c243" - integrity sha512-EL39OpP8FcZ99ne1Rno3jImfb92Nectd4iVsZzoEUCBfbwHe7sr0k+i45guoruSoP8nMUE81Mov2s8I5pi6d9Q== - dependencies: - bn.js "^4.11.8" - ethers "^4.0.32" - lodash "^4.17.13" - web3 "1.2.1" - -truffle-provider@^0.1.12: - version "0.1.16" - resolved "https://registry.yarnpkg.com/truffle-provider/-/truffle-provider-0.1.16.tgz#05db46a4bda9b7e6503f8701f2b03ccb1e6c78ba" - integrity sha512-3d5WqSKIzZcpgW44mdfF97s+Tgh2a/3Ly6vHJirBV9OZDUtiAzP6WVnlRNvmlDJXFCDqt6Yb9qQWoXFHbYoR6w== - dependencies: - "@truffle/error" "^0.0.6" - truffle-interface-adapter "^0.2.5" - web3 "1.2.1" - -truffle@^5.1.21, truffle@^5.1.62: - version "5.1.62" - resolved "https://registry.yarnpkg.com/truffle/-/truffle-5.1.62.tgz#819b8280615345bf42bbba7967f2dc9d39347869" - integrity sha512-TWgZ3xSSb8us4ZkHEHRghJWivfewjEy7yd8nARd7EHvoOi5lcUmKnbsunP+G7u/AO47gRoEqwFdPuGPdXrBM1A== - dependencies: - app-module-path "^2.2.0" - mocha "8.1.2" - original-require "1.0.1" - ts-essentials@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-1.0.4.tgz#ce3b5dade5f5d97cf69889c11bf7d2da8555b15a" integrity sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ== -ts-generator@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ts-generator/-/ts-generator-0.0.8.tgz#7bd48ca064db026d9520bcb682b69efc20971d6a" - integrity sha512-Gi+aZCELpVL7Mqb+GuMgM+n8JZ/arZZib1iD/R9Ok8JDjOCOCrqS9b1lr72ku7J45WeDCFZxyJoRsiQvhokCnw== +ts-essentials@^6.0.3: + version "6.0.7" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-6.0.7.tgz#5f4880911b7581a873783740ce8b94da163d18a6" + integrity sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw== + +ts-essentials@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" + integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== + +ts-generator@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ts-generator/-/ts-generator-0.1.1.tgz#af46f2fb88a6db1f9785977e9590e7bcd79220ab" + integrity sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ== dependencies: "@types/mkdirp" "^0.5.2" - "@types/prettier" "^1.13.2" + "@types/prettier" "^2.1.1" "@types/resolve" "^0.0.8" chalk "^2.4.1" glob "^7.1.2" mkdirp "^0.5.1" - prettier "^1.14.2" + prettier "^2.1.2" resolve "^1.8.1" ts-essentials "^1.0.0" -ts-node@^8.5.4: - version "8.6.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.6.2.tgz#7419a01391a818fbafa6f826a33c1a13e9464e35" - integrity sha512-4mZEbofxGqLL2RImpe3zMJukvEvcO1XP8bj8ozBPySdCUXEcU5cIRwR0aM3R+VoZq7iXc8N86NC0FspGRqP4gg== - dependencies: +ts-node@10.7.0: + version "10.7.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.7.0.tgz#35d503d0fab3e2baa672a0e94f4b40653c2463f5" + integrity sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A== + dependencies: + "@cspotcode/source-map-support" "0.7.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" arg "^4.1.0" + create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" - source-map-support "^0.5.6" + v8-compile-cache-lib "^3.0.0" yn "3.1.1" -tslib@^1.11.1, tslib@^1.9.0: +tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.0.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + tsort@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" integrity sha1-4igPXoF/i/QnVlf9D5rr1E9aJ4Y= +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -7385,7 +10233,7 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -tweetnacl-util@^0.15.0: +tweetnacl-util@^0.15.0, tweetnacl-util@^0.15.1: version "0.15.1" resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== @@ -7395,16 +10243,45 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= -tweetnacl@^1.0.0: +tweetnacl@^1.0.0, tweetnacl@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + type-detect@^4.0.0, type-detect@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -7423,32 +10300,39 @@ type@^2.0.0: resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== -typechain-target-truffle@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typechain-target-truffle/-/typechain-target-truffle-1.0.2.tgz#52ecbd8b7a854960567ad223660d60fcb42eaa17" - integrity sha512-XF3Iq2IzR+Pqvx6fcKIKGXNEk3lEcY24vYv9VqoVPfPB6vUM09PRLJCeLm1/ag6Pr2PICKUA0f4Es+YTR3ESKA== - dependencies: - lodash "^4.17.15" - -typechain-target-web3-v1@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typechain-target-web3-v1/-/typechain-target-web3-v1-1.0.4.tgz#0157359e534737c07fc62529d5d8570a2047a2da" - integrity sha512-jQ6eCfY7QorBq6kQDjSy5LMuImZGkp6IXR6FXZp7/ulITIxAfb6Dxh+yvh0NN/zboLnMPvvSJi6tHWCqlwfSDA== +typechain@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/typechain/-/typechain-3.0.0.tgz#d5a47700831f238e43f7429b987b4bb54849b92e" + integrity sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg== dependencies: + command-line-args "^4.0.7" + debug "^4.1.1" + fs-extra "^7.0.0" + js-sha3 "^0.8.0" lodash "^4.17.15" - web3 "^1.2.4" + ts-essentials "^6.0.3" + ts-generator "^0.1.1" -typechain@^1.0.3: - version "1.0.5" - resolved "https://registry.yarnpkg.com/typechain/-/typechain-1.0.5.tgz#797899d9dbce54a83b3aef04ce1727ddf07d2138" - integrity sha512-gbQmJXPKuYQ0p3tK+dMhpdQql/UPtSnkPQXw2QM/aqwCengI86z2vEM2e5rVQpmk/blFx1PYNdApSDxE12rR1Q== +typechain@^5.1.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/typechain/-/typechain-5.2.0.tgz#10525a44773a34547eb2eed8978cb72c0a39a0f4" + integrity sha512-0INirvQ+P+MwJOeMct+WLkUE4zov06QxC96D+i3uGFEHoiSkZN70MKDQsaj8zkL86wQwByJReI2e7fOUwECFuw== dependencies: + "@types/prettier" "^2.1.1" command-line-args "^4.0.7" - debug "^3.0.1" + debug "^4.1.1" fs-extra "^7.0.0" + glob "^7.1.6" js-sha3 "^0.8.0" lodash "^4.17.15" - ts-generator "^0.0.8" + mkdirp "^1.0.4" + prettier "^2.1.2" + ts-essentials "^7.0.1" + +typed-function@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/typed-function/-/typed-function-2.1.0.tgz#ded6f8a442ba8749ff3fe75bc41419c8d46ccc3f" + integrity sha512-bctQIOqx2iVbWGDGPWwIm18QScpu2XRmkC19D8rQGFsjKSgteq/o1hTZvIG/wuDq8fanpBDrLkLq+aEN/6y5XQ== typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -7462,10 +10346,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^3.9.5: - version "3.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.5.tgz#586f0dba300cde8be52dd1ac4f7e1009c1b13f36" - integrity sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ== +typescript@^4.5.2: + version "4.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== typewise-core@^1.2, typewise-core@^1.2.0: version "1.2.0" @@ -7489,6 +10373,11 @@ typical@^2.6.0, typical@^2.6.1: resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d" integrity sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0= +uglify-js@^3.1.4: + version "3.16.1" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.16.1.tgz#0e7ec928b3d0b1e1d952bce634c384fd56377317" + integrity sha512-X5BGTIDH8U6IQ1TIRP62YC36k+ULAa1d59BxlWvPUJ1NkW5L3FwcGfEzuVvGmhJFBu0YJ5Ge25tmRISqCmLiRQ== + ultron@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" @@ -7507,23 +10396,31 @@ underscore@1.9.1: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== -underscore@^1.9.1: - version "1.12.0" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.0.tgz#4814940551fc80587cef7840d1ebb0f16453be97" - integrity sha512-21rQzss/XPMjolTiIezSu3JAjgagXKROtNrYFEOWK109qY1Uv2tVjPTZ1ci2HgvQDA16gHYSthQIJfB+XId/rQ== +undici@^5.4.0: + version "5.5.1" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.5.1.tgz#baaf25844a99eaa0b22e1ef8d205bffe587c8f43" + integrity sha512-MEvryPLf18HvlCbLSzCW0U00IMftKGI5udnjrQbC5D4P0Hodwffhv+iGfWuJwg16Y/TK11ZFK8i+BPVW2z/eAw== -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== dependencies: - crypto-random-string "^1.0.0" + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + unorm@^1.3.3: version "1.6.0" resolved "https://registry.yarnpkg.com/unorm/-/unorm-1.6.0.tgz#029b289661fba714f1a9af439eb51d9b16c205af" @@ -7534,6 +10431,14 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -7541,6 +10446,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== + url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" @@ -7565,6 +10475,14 @@ url-to-options@^1.0.1: resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= +url@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + integrity sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ== + dependencies: + punycode "1.3.2" + querystring "0.2.0" + url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -7573,6 +10491,11 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + utf-8-validate@^5.0.2: version "5.0.4" resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.4.tgz#72a1735983ddf7a05a43a9c6b67c5ce1c910f9b8" @@ -7585,7 +10508,7 @@ utf8@3.0.0, utf8@^3.0.0: resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== -util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -7627,11 +10550,39 @@ uuid@3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== -uuid@^3.3.2, uuid@^3.3.3: +uuid@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.0.0.tgz#bc6ccf91b5ff0ac07bbcdbf1c7c4e150db4dbb6c" + integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== + +uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache-lib@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + varint@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" @@ -7660,35 +10611,24 @@ web3-bzz@1.2.1: swarm-js "0.1.39" underscore "1.9.1" -web3-bzz@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.2.tgz#a3b9f613c49fd3e120e0997088a73557d5adb724" - integrity sha512-b1O2ObsqUN1lJxmFSjvnEC4TsaCbmh7Owj3IAIWTKqL9qhVgx7Qsu5O9cD13pBiSPNZJ68uJPaKq380QB4NWeA== - dependencies: - "@types/node" "^10.12.18" - got "9.6.0" - swarm-js "0.1.39" - underscore "1.9.1" - -web3-bzz@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.4.tgz#a4adb7a8cba3d260de649bdb1f14ed359bfb3821" - integrity sha512-MqhAo/+0iQSMBtt3/QI1rU83uvF08sYq8r25+OUZ+4VtihnYsmkkca+rdU0QbRyrXY2/yGIpI46PFdh0khD53A== +web3-bzz@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.11.tgz#41bc19a77444bd5365744596d778b811880f707f" + integrity sha512-XGpWUEElGypBjeFyUhTkiPXFbDVD6Nr/S5jznE3t8cWUA0FxRf1n3n/NuIZeb0H9RkN2Ctd/jNma/k8XGa3YKg== dependencies: - "@types/node" "^10.12.18" + "@types/node" "^12.12.6" got "9.6.0" - swarm-js "0.1.39" + swarm-js "^0.1.40" underscore "1.9.1" -web3-bzz@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.3.1.tgz#c7e13e5fbbbe4634b0d883e5440069fc58e58044" - integrity sha512-MN726zFpFpwhs3NMC35diJGkwTVUj+8LM/VWqooGX/MOjgYzNrJ7Wr8EzxoaTCy87edYNBprtxBkd0HzzLmung== +web3-bzz@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.5.3.tgz#e36456905ce051138f9c3ce3623cbc73da088c2b" + integrity sha512-SlIkAqG0eS6cBS9Q2eBOTI1XFzqh83RqGJWnyrNZMDxUwsTVHL+zNnaPShVPvrWQA1Ub5b0bx1Kc5+qJVxsTJg== dependencies: "@types/node" "^12.12.6" got "9.6.0" swarm-js "^0.1.40" - underscore "1.9.1" web3-core-helpers@1.2.1: version "1.2.1" @@ -7699,32 +10639,22 @@ web3-core-helpers@1.2.1: web3-eth-iban "1.2.1" web3-utils "1.2.1" -web3-core-helpers@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.2.tgz#484974f4bd4a487217b85b0d7cfe841af0907619" - integrity sha512-HJrRsIGgZa1jGUIhvGz4S5Yh6wtOIo/TMIsSLe+Xay+KVnbseJpPprDI5W3s7H2ODhMQTbogmmUFquZweW2ImQ== - dependencies: - underscore "1.9.1" - web3-eth-iban "1.2.2" - web3-utils "1.2.2" - -web3-core-helpers@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.4.tgz#ffd425861f4d66b3f38df032afdb39ea0971fc0f" - integrity sha512-U7wbsK8IbZvF3B7S+QMSNP0tni/6VipnJkB0tZVEpHEIV2WWeBHYmZDnULWcsS/x/jn9yKhJlXIxWGsEAMkjiw== +web3-core-helpers@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.11.tgz#84c681ed0b942c0203f3b324a245a127e8c67a99" + integrity sha512-PEPoAoZd5ME7UfbnCZBdzIerpe74GEvlwT4AjOmHeCVZoIFk7EqvOZDejJHt+feJA6kMVTdd0xzRNN295UhC1A== dependencies: underscore "1.9.1" - web3-eth-iban "1.2.4" - web3-utils "1.2.4" + web3-eth-iban "1.2.11" + web3-utils "1.2.11" -web3-core-helpers@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.1.tgz#ffd6f47c1b54a8523f00760a8d713f44d0f97e97" - integrity sha512-tMVU0ScyQUJd/HFWfZrvGf+QmPCodPyKQw1gQ+n9We/H3vPPbUxDjNeYnd4BbYy5O9ox+0XG6i3+JlwiSkgDkA== +web3-core-helpers@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.5.3.tgz#099030235c477aadf39a94199ef40092151d563c" + integrity sha512-Ip1IjB3S8vN7Kf1PPjK41U5gskmMk6IJQlxIVuS8/1U7n/o0jC8krqtpRwiMfAgYyw3TXwBFtxSRTvJtnLyXZw== dependencies: - underscore "1.9.1" - web3-eth-iban "1.3.1" - web3-utils "1.3.1" + web3-eth-iban "1.5.3" + web3-utils "1.5.3" web3-core-method@1.2.1: version "1.2.1" @@ -7737,39 +10667,29 @@ web3-core-method@1.2.1: web3-core-subscriptions "1.2.1" web3-utils "1.2.1" -web3-core-method@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.2.tgz#d4fe2bb1945b7152e5f08e4ea568b171132a1e56" - integrity sha512-szR4fDSBxNHaF1DFqE+j6sFR/afv9Aa36OW93saHZnrh+iXSrYeUUDfugeNcRlugEKeUCkd4CZylfgbK2SKYJA== - dependencies: - underscore "1.9.1" - web3-core-helpers "1.2.2" - web3-core-promievent "1.2.2" - web3-core-subscriptions "1.2.2" - web3-utils "1.2.2" - -web3-core-method@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.4.tgz#a0fbc50b8ff5fd214021435cc2c6d1e115807aed" - integrity sha512-8p9kpL7di2qOVPWgcM08kb+yKom0rxRCMv6m/K+H+yLSxev9TgMbCgMSbPWAHlyiF3SJHw7APFKahK5Z+8XT5A== +web3-core-method@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.11.tgz#f880137d1507a0124912bf052534f168b8d8fbb6" + integrity sha512-ff0q76Cde94HAxLDZ6DbdmKniYCQVtvuaYh+rtOUMB6kssa5FX0q3vPmixi7NPooFnbKmmZCM6NvXg4IreTPIw== dependencies: + "@ethersproject/transactions" "^5.0.0-beta.135" underscore "1.9.1" - web3-core-helpers "1.2.4" - web3-core-promievent "1.2.4" - web3-core-subscriptions "1.2.4" - web3-utils "1.2.4" + web3-core-helpers "1.2.11" + web3-core-promievent "1.2.11" + web3-core-subscriptions "1.2.11" + web3-utils "1.2.11" -web3-core-method@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.1.tgz#c1d8bf1e2104a8d625c99caf94218ad2dc948c92" - integrity sha512-dA38tNVZWTxBFMlLFunLD5Az1AWRi5HqM+AtQrTIhxWCzg7rJSHuaYOZ6A5MHKGPWpdykLhzlna0SsNv5AVs8w== +web3-core-method@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.5.3.tgz#6cff97ed19fe4ea2e9183d6f703823a079f5132c" + integrity sha512-8wJrwQ2qD9ibWieF9oHXwrJsUGrv3XAtEkNeyvyNMpktNTIjxJ2jaFGQUuLiyUrMubD18XXgLk4JS6PJU4Loeg== dependencies: + "@ethereumjs/common" "^2.4.0" "@ethersproject/transactions" "^5.0.0-beta.135" - underscore "1.9.1" - web3-core-helpers "1.3.1" - web3-core-promievent "1.3.1" - web3-core-subscriptions "1.3.1" - web3-utils "1.3.1" + web3-core-helpers "1.5.3" + web3-core-promievent "1.5.3" + web3-core-subscriptions "1.5.3" + web3-utils "1.5.3" web3-core-promievent@1.2.1: version "1.2.1" @@ -7779,26 +10699,17 @@ web3-core-promievent@1.2.1: any-promise "1.3.0" eventemitter3 "3.1.2" -web3-core-promievent@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.2.tgz#3b60e3f2a0c96db8a891c927899d29d39e66ab1c" - integrity sha512-tKvYeT8bkUfKABcQswK6/X79blKTKYGk949urZKcLvLDEaWrM3uuzDwdQT3BNKzQ3vIvTggFPX9BwYh0F1WwqQ== - dependencies: - any-promise "1.3.0" - eventemitter3 "3.1.2" - -web3-core-promievent@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.4.tgz#75e5c0f2940028722cdd21ba503ebd65272df6cb" - integrity sha512-gEUlm27DewUsfUgC3T8AxkKi8Ecx+e+ZCaunB7X4Qk3i9F4C+5PSMGguolrShZ7Zb6717k79Y86f3A00O0VAZw== +web3-core-promievent@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.11.tgz#51fe97ca0ddec2f99bf8c3306a7a8e4b094ea3cf" + integrity sha512-il4McoDa/Ox9Agh4kyfQ8Ak/9ABYpnF8poBLL33R/EnxLsJOGQG2nZhkJa3I067hocrPSjEdlPt/0bHXsln4qA== dependencies: - any-promise "1.3.0" - eventemitter3 "3.1.2" + eventemitter3 "4.0.4" -web3-core-promievent@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.1.tgz#b4da4b34cd9681e22fcda25994d7629280a1e046" - integrity sha512-jGu7TkwUqIHlvWd72AlIRpsJqdHBQnHMeMktrows2148gg5PBPgpJ10cPFmCCzKT6lDOVh9B7pZMf9eckMDmiA== +web3-core-promievent@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.5.3.tgz#3f11833c3dc6495577c274350b61144e0a4dba01" + integrity sha512-CFfgqvk3Vk6PIAxtLLuX+pOMozxkKCY+/GdGr7weMh033mDXEPvwyVjoSRO1PqIKj668/hMGQsVoIgbyxkJ9Mg== dependencies: eventemitter3 "4.0.4" @@ -7813,39 +10724,27 @@ web3-core-requestmanager@1.2.1: web3-providers-ipc "1.2.1" web3-providers-ws "1.2.1" -web3-core-requestmanager@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.2.tgz#667ba9ac724c9c76fa8965ae8a3c61f66e68d8d6" - integrity sha512-a+gSbiBRHtHvkp78U2bsntMGYGF2eCb6219aMufuZWeAZGXJ63Wc2321PCbA8hF9cQrZI4EoZ4kVLRI4OF15Hw== - dependencies: - underscore "1.9.1" - web3-core-helpers "1.2.2" - web3-providers-http "1.2.2" - web3-providers-ipc "1.2.2" - web3-providers-ws "1.2.2" - -web3-core-requestmanager@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.4.tgz#0a7020a23fb91c6913c611dfd3d8c398d1e4b4a8" - integrity sha512-eZJDjyNTDtmSmzd3S488nR/SMJtNnn/GuwxnMh3AzYCqG3ZMfOylqTad2eYJPvc2PM5/Gj1wAMQcRpwOjjLuPg== +web3-core-requestmanager@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.11.tgz#fe6eb603fbaee18530293a91f8cf26d8ae28c45a" + integrity sha512-oFhBtLfOiIbmfl6T6gYjjj9igOvtyxJ+fjS+byRxiwFJyJ5BQOz4/9/17gWR1Cq74paTlI7vDGxYfuvfE/mKvA== dependencies: underscore "1.9.1" - web3-core-helpers "1.2.4" - web3-providers-http "1.2.4" - web3-providers-ipc "1.2.4" - web3-providers-ws "1.2.4" + web3-core-helpers "1.2.11" + web3-providers-http "1.2.11" + web3-providers-ipc "1.2.11" + web3-providers-ws "1.2.11" -web3-core-requestmanager@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.1.tgz#6dd2b5161ba778dfffe68994a4accff2decc54fe" - integrity sha512-9WTaN2SoyJX1amRyTzX2FtbVXsyWBI2Wef2Q3gPiWaEo/VRVm3e4Bq8MwxNTUMIJMO8RLGHjtdgsoDKPwfL73Q== +web3-core-requestmanager@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.5.3.tgz#b339525815fd40e3a2a81813c864ddc413f7b6f7" + integrity sha512-9k/Bze2rs8ONix5IZR+hYdMNQv+ark2Ek2kVcrFgWO+LdLgZui/rn8FikPunjE+ub7x7pJaKCgVRbYFXjo3ZWg== dependencies: - underscore "1.9.1" util "^0.12.0" - web3-core-helpers "1.3.1" - web3-providers-http "1.3.1" - web3-providers-ipc "1.3.1" - web3-providers-ws "1.3.1" + web3-core-helpers "1.5.3" + web3-providers-http "1.5.3" + web3-providers-ipc "1.5.3" + web3-providers-ws "1.5.3" web3-core-subscriptions@1.2.1: version "1.2.1" @@ -7856,32 +10755,22 @@ web3-core-subscriptions@1.2.1: underscore "1.9.1" web3-core-helpers "1.2.1" -web3-core-subscriptions@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.2.tgz#bf4ba23a653a003bdc3551649958cc0b080b068e" - integrity sha512-QbTgigNuT4eicAWWr7ahVpJyM8GbICsR1Ys9mJqzBEwpqS+RXTRVSkwZ2IsxO+iqv6liMNwGregbJLq4urMFcQ== - dependencies: - eventemitter3 "3.1.2" - underscore "1.9.1" - web3-core-helpers "1.2.2" - -web3-core-subscriptions@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.4.tgz#0dc095b5cfd82baa527a39796e3515a846b21b99" - integrity sha512-3D607J2M8ymY9V+/WZq4MLlBulwCkwEjjC2U+cXqgVO1rCyVqbxZNCmHyNYHjDDCxSEbks9Ju5xqJxDSxnyXEw== +web3-core-subscriptions@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.11.tgz#beca908fbfcb050c16f45f3f0f4c205e8505accd" + integrity sha512-qEF/OVqkCvQ7MPs1JylIZCZkin0aKK9lDxpAtQ1F8niEDGFqn7DT8E/vzbIa0GsOjL2fZjDhWJsaW+BSoAW1gg== dependencies: - eventemitter3 "3.1.2" + eventemitter3 "4.0.4" underscore "1.9.1" - web3-core-helpers "1.2.4" + web3-core-helpers "1.2.11" -web3-core-subscriptions@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.1.tgz#be1103259f91b7fc7f4c6a867aa34dea70a636f7" - integrity sha512-eX3N5diKmrxshc6ZBZ8EJxxAhCxdYPbYXuF2EfgdIyHmxwmYqIVvKepzO8388Bx8JD3D0Id/pKE0dC/FnDIHTQ== +web3-core-subscriptions@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.5.3.tgz#d7d69c4caad65074212028656e9dc56ca5c2159d" + integrity sha512-L2m9vG1iRN6thvmv/HQwO2YLhOQlmZU8dpLG6GSo9FBN14Uch868Swk0dYVr3rFSYjZ/GETevSXU+O+vhCummA== dependencies: eventemitter3 "4.0.4" - underscore "1.9.1" - web3-core-helpers "1.3.1" + web3-core-helpers "1.5.3" web3-core@1.2.1: version "1.2.1" @@ -7893,43 +10782,31 @@ web3-core@1.2.1: web3-core-requestmanager "1.2.1" web3-utils "1.2.1" -web3-core@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.2.tgz#334b99c8222ef9cfd0339e27352f0b58ea789a2f" - integrity sha512-miHAX3qUgxV+KYfaOY93Hlc3kLW2j5fH8FJy6kSxAv+d4d5aH0wwrU2IIoJylQdT+FeenQ38sgsCnFu9iZ1hCQ== +web3-core@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.11.tgz#1043cacc1becb80638453cc5b2a14be9050288a7" + integrity sha512-CN7MEYOY5ryo5iVleIWRE3a3cZqVaLlIbIzDPsvQRUfzYnvzZQRZBm9Mq+ttDi2STOOzc1MKylspz/o3yq/LjQ== dependencies: - "@types/bn.js" "^4.11.4" - "@types/node" "^12.6.1" - web3-core-helpers "1.2.2" - web3-core-method "1.2.2" - web3-core-requestmanager "1.2.2" - web3-utils "1.2.2" + "@types/bn.js" "^4.11.5" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-core-requestmanager "1.2.11" + web3-utils "1.2.11" -web3-core@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.4.tgz#2df13b978dcfc59c2abaa887d27f88f21ad9a9d6" - integrity sha512-CHc27sMuET2cs1IKrkz7xzmTdMfZpYswe7f0HcuyneTwS1yTlTnHyqjAaTy0ZygAb/x4iaVox+Gvr4oSAqSI+A== - dependencies: - "@types/bignumber.js" "^5.0.0" - "@types/bn.js" "^4.11.4" - "@types/node" "^12.6.1" - web3-core-helpers "1.2.4" - web3-core-method "1.2.4" - web3-core-requestmanager "1.2.4" - web3-utils "1.2.4" - -web3-core@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.1.tgz#fb0fc5d952a7f3d580a7e6155d2f28be064e64cb" - integrity sha512-QlBwSyjl2pqYUBE7lH9PfLxa8j6AzzAtvLUqkgoaaFJYLP/+XavW1n6dhVCTq+U3L3eNc+bMp9GLjGDJNXMnGg== +web3-core@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.5.3.tgz#59f8728b27c8305b349051326aa262b9b7e907bf" + integrity sha512-ACTbu8COCu+0eUNmd9pG7Q9EVsNkAg2w3Y7SqhDr+zjTgbSHZV01jXKlapm9z+G3AN/BziV3zGwudClJ4u4xXQ== dependencies: "@types/bn.js" "^4.11.5" "@types/node" "^12.12.6" bignumber.js "^9.0.0" - web3-core-helpers "1.3.1" - web3-core-method "1.3.1" - web3-core-requestmanager "1.3.1" - web3-utils "1.3.1" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-core-requestmanager "1.5.3" + web3-utils "1.5.3" web3-eth-abi@1.2.1: version "1.2.1" @@ -7940,32 +10817,22 @@ web3-eth-abi@1.2.1: underscore "1.9.1" web3-utils "1.2.1" -web3-eth-abi@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.2.tgz#d5616d88a90020f894763423a9769f2da11fe37a" - integrity sha512-Yn/ZMgoOLxhTVxIYtPJ0eS6pnAnkTAaJgUJh1JhZS4ekzgswMfEYXOwpMaD5eiqPJLpuxmZFnXnBZlnQ1JMXsw== - dependencies: - ethers "4.0.0-beta.3" - underscore "1.9.1" - web3-utils "1.2.2" - -web3-eth-abi@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.4.tgz#5b73e5ef70b03999227066d5d1310b168845e2b8" - integrity sha512-8eLIY4xZKoU3DSVu1pORluAw9Ru0/v4CGdw5so31nn+7fR8zgHMgwbFe0aOqWQ5VU42PzMMXeIJwt4AEi2buFg== +web3-eth-abi@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.11.tgz#a887494e5d447c2926d557a3834edd66e17af9b0" + integrity sha512-PkRYc0+MjuLSgg03QVWqWlQivJqRwKItKtEpRUaxUAeLE7i/uU39gmzm2keHGcQXo3POXAbOnMqkDvOep89Crg== dependencies: - ethers "4.0.0-beta.3" + "@ethersproject/abi" "5.0.0-beta.153" underscore "1.9.1" - web3-utils "1.2.4" + web3-utils "1.2.11" -web3-eth-abi@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.1.tgz#d60fe5f15c7a3a426c553fdaa4199d07f1ad899c" - integrity sha512-ds4aTeKDUEqTXgncAtxvcfMpPiei9ey7+s2ZZ+OazK2CK5jWhFiJuuj9Q68kOT+hID7E1oSDVsNmJWFD/7lbMw== +web3-eth-abi@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.5.3.tgz#5aea9394d797f99ca0d9bd40c3417eb07241c96c" + integrity sha512-i/qhuFsoNrnV130CSRYX/z4SlCfSQ4mHntti5yTmmQpt70xZKYZ57BsU0R29ueSQ9/P+aQrL2t2rqkQkAloUxg== dependencies: "@ethersproject/abi" "5.0.7" - underscore "1.9.1" - web3-utils "1.3.1" + web3-utils "1.5.3" web3-eth-accounts@1.2.1: version "1.2.1" @@ -7984,58 +10851,39 @@ web3-eth-accounts@1.2.1: web3-core-method "1.2.1" web3-utils "1.2.1" -web3-eth-accounts@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.2.tgz#c187e14bff6baa698ac352220290222dbfd332e5" - integrity sha512-KzHOEyXOEZ13ZOkWN3skZKqSo5f4Z1ogPFNn9uZbKCz+kSp+gCAEKxyfbOsB/JMAp5h7o7pb6eYsPCUBJmFFiA== - dependencies: - any-promise "1.3.0" - crypto-browserify "3.12.0" - eth-lib "0.2.7" - ethereumjs-common "^1.3.2" - ethereumjs-tx "^2.1.1" - scrypt-shim "github:web3-js/scrypt-shim" - underscore "1.9.1" - uuid "3.3.2" - web3-core "1.2.2" - web3-core-helpers "1.2.2" - web3-core-method "1.2.2" - web3-utils "1.2.2" - -web3-eth-accounts@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.4.tgz#ada6edc49542354328a85cafab067acd7f88c288" - integrity sha512-04LzT/UtWmRFmi4hHRewP5Zz43fWhuHiK5XimP86sUQodk/ByOkXQ3RoXyGXFMNoRxdcAeRNxSfA2DpIBc9xUw== +web3-eth-accounts@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.11.tgz#a9e3044da442d31903a7ce035a86d8fa33f90520" + integrity sha512-6FwPqEpCfKIh3nSSGeo3uBm2iFSnFJDfwL3oS9pyegRBXNsGRVpgiW63yhNzL0796StsvjHWwQnQHsZNxWAkGw== dependencies: - "@web3-js/scrypt-shim" "^0.1.0" - any-promise "1.3.0" crypto-browserify "3.12.0" - eth-lib "0.2.7" + eth-lib "0.2.8" ethereumjs-common "^1.3.2" ethereumjs-tx "^2.1.1" + scrypt-js "^3.0.1" underscore "1.9.1" uuid "3.3.2" - web3-core "1.2.4" - web3-core-helpers "1.2.4" - web3-core-method "1.2.4" - web3-utils "1.2.4" - -web3-eth-accounts@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.1.tgz#63b247461f1ae0ae46f9a5d5aa896ea80237143e" - integrity sha512-wsV3/0Pbn5+pI8PiCD1CYw7I1dkQujcP//aJ+ZH8PoaHQoG6HnJ7nTp7foqa0r/X5lizImz/g5S8D76t3Z9tHA== - dependencies: + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-utils "1.2.11" + +web3-eth-accounts@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.5.3.tgz#076c816ff4d68c9dffebdc7fd2bfaddcfc163d77" + integrity sha512-pdGhXgeBaEJENMvRT6W9cmji3Zz/46ugFSvmnLLw79qi5EH7XJhKISNVb41eWCrs4am5GhI67GLx5d2s2a72iw== + dependencies: + "@ethereumjs/common" "^2.3.0" + "@ethereumjs/tx" "^3.2.1" crypto-browserify "3.12.0" eth-lib "0.2.8" - ethereumjs-common "^1.3.2" - ethereumjs-tx "^2.1.1" + ethereumjs-util "^7.0.10" scrypt-js "^3.0.1" - underscore "1.9.1" uuid "3.3.2" - web3-core "1.3.1" - web3-core-helpers "1.3.1" - web3-core-method "1.3.1" - web3-utils "1.3.1" + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-utils "1.5.3" web3-eth-contract@1.2.1: version "1.2.1" @@ -8051,50 +10899,34 @@ web3-eth-contract@1.2.1: web3-eth-abi "1.2.1" web3-utils "1.2.1" -web3-eth-contract@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.2.tgz#84e92714918a29e1028ee7718f0712536e14e9a1" - integrity sha512-EKT2yVFws3FEdotDQoNsXTYL798+ogJqR2//CaGwx3p0/RvQIgfzEwp8nbgA6dMxCsn9KOQi7OtklzpnJMkjtA== - dependencies: - "@types/bn.js" "^4.11.4" - underscore "1.9.1" - web3-core "1.2.2" - web3-core-helpers "1.2.2" - web3-core-method "1.2.2" - web3-core-promievent "1.2.2" - web3-core-subscriptions "1.2.2" - web3-eth-abi "1.2.2" - web3-utils "1.2.2" - -web3-eth-contract@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.4.tgz#68ef7cc633232779b0a2c506a810fbe903575886" - integrity sha512-b/9zC0qjVetEYnzRA1oZ8gF1OSSUkwSYi5LGr4GeckLkzXP7osEnp9lkO/AQcE4GpG+l+STnKPnASXJGZPgBRQ== +web3-eth-contract@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.11.tgz#917065902bc27ce89da9a1da26e62ef663663b90" + integrity sha512-MzYuI/Rq2o6gn7vCGcnQgco63isPNK5lMAan2E51AJLknjSLnOxwNY3gM8BcKoy4Z+v5Dv00a03Xuk78JowFow== dependencies: - "@types/bn.js" "^4.11.4" + "@types/bn.js" "^4.11.5" underscore "1.9.1" - web3-core "1.2.4" - web3-core-helpers "1.2.4" - web3-core-method "1.2.4" - web3-core-promievent "1.2.4" - web3-core-subscriptions "1.2.4" - web3-eth-abi "1.2.4" - web3-utils "1.2.4" - -web3-eth-contract@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.1.tgz#05cb77bd2a671c5480897d20de487f3bae82e113" - integrity sha512-cHu9X1iGrK+Zbrj4wYKwHI1BtVGn/9O0JRsZqd9qcFGLwwAmaCJYy0sDn7PKCKDSL3qB+MDILoyI7FaDTWWTHg== + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-core-promievent "1.2.11" + web3-core-subscriptions "1.2.11" + web3-eth-abi "1.2.11" + web3-utils "1.2.11" + +web3-eth-contract@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.5.3.tgz#12b03a4a16ce583a945f874bea2ff2fb4c5b81ad" + integrity sha512-Gdlt1L6cdHe83k7SdV6xhqCytVtOZkjD0kY/15x441AuuJ4JLubCHuqu69k2Dr3tWifHYVys/vG8QE/W16syGg== dependencies: "@types/bn.js" "^4.11.5" - underscore "1.9.1" - web3-core "1.3.1" - web3-core-helpers "1.3.1" - web3-core-method "1.3.1" - web3-core-promievent "1.3.1" - web3-core-subscriptions "1.3.1" - web3-eth-abi "1.3.1" - web3-utils "1.3.1" + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-core-promievent "1.5.3" + web3-core-subscriptions "1.5.3" + web3-eth-abi "1.5.3" + web3-utils "1.5.3" web3-eth-ens@1.2.1: version "1.2.1" @@ -8110,48 +10942,34 @@ web3-eth-ens@1.2.1: web3-eth-contract "1.2.1" web3-utils "1.2.1" -web3-eth-ens@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.2.tgz#0a4abed1d4cbdacbf5e1ab06e502d806d1192bc6" - integrity sha512-CFjkr2HnuyMoMFBoNUWojyguD4Ef+NkyovcnUc/iAb9GP4LHohKrODG4pl76R5u61TkJGobC2ij6TyibtsyVYg== - dependencies: - eth-ens-namehash "2.0.8" - underscore "1.9.1" - web3-core "1.2.2" - web3-core-helpers "1.2.2" - web3-core-promievent "1.2.2" - web3-eth-abi "1.2.2" - web3-eth-contract "1.2.2" - web3-utils "1.2.2" - -web3-eth-ens@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.4.tgz#b95b3aa99fb1e35c802b9e02a44c3046a3fa065e" - integrity sha512-g8+JxnZlhdsCzCS38Zm6R/ngXhXzvc3h7bXlxgKU4coTzLLoMpgOAEz71GxyIJinWTFbLXk/WjNY0dazi9NwVw== +web3-eth-ens@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.11.tgz#26d4d7f16d6cbcfff918e39832b939edc3162532" + integrity sha512-dbW7dXP6HqT1EAPvnniZVnmw6TmQEKF6/1KgAxbo8iBBYrVTMDGFQUUnZ+C4VETGrwwaqtX4L9d/FrQhZ6SUiA== dependencies: + content-hash "^2.5.2" eth-ens-namehash "2.0.8" underscore "1.9.1" - web3-core "1.2.4" - web3-core-helpers "1.2.4" - web3-core-promievent "1.2.4" - web3-eth-abi "1.2.4" - web3-eth-contract "1.2.4" - web3-utils "1.2.4" - -web3-eth-ens@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.1.tgz#ccfd621ddc1fecb44096bc8e60689499a9eb4421" - integrity sha512-MUQvYgUYQ5gAwbZyHwI7y+NTT6j98qG3MVhGCUf58inF5Gxmn9OlLJRw8Tofgf0K87Tk9Kqw1/2QxUE4PEZMMA== + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-promievent "1.2.11" + web3-eth-abi "1.2.11" + web3-eth-contract "1.2.11" + web3-utils "1.2.11" + +web3-eth-ens@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.5.3.tgz#ef6eee1ddf32b1ff9536fc7c599a74f2656bafe1" + integrity sha512-QmGFFtTGElg0E+3xfCIFhiUF+1imFi9eg/cdsRMUZU4F1+MZCC/ee+IAelYLfNTGsEslCqfAusliKOT9DdGGnw== dependencies: content-hash "^2.5.2" eth-ens-namehash "2.0.8" - underscore "1.9.1" - web3-core "1.3.1" - web3-core-helpers "1.3.1" - web3-core-promievent "1.3.1" - web3-eth-abi "1.3.1" - web3-eth-contract "1.3.1" - web3-utils "1.3.1" + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-promievent "1.5.3" + web3-eth-abi "1.5.3" + web3-eth-contract "1.5.3" + web3-utils "1.5.3" web3-eth-iban@1.2.1: version "1.2.1" @@ -8161,29 +10979,21 @@ web3-eth-iban@1.2.1: bn.js "4.11.8" web3-utils "1.2.1" -web3-eth-iban@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.2.tgz#76bec73bad214df7c4192388979a59fc98b96c5a" - integrity sha512-gxKXBoUhaTFHr0vJB/5sd4i8ejF/7gIsbM/VvemHT3tF5smnmY6hcwSMmn7sl5Gs+83XVb/BngnnGkf+I/rsrQ== - dependencies: - bn.js "4.11.8" - web3-utils "1.2.2" - -web3-eth-iban@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.4.tgz#8e0550fd3fd8e47a39357d87fe27dee9483ee476" - integrity sha512-D9HIyctru/FLRpXakRwmwdjb5bWU2O6UE/3AXvRm6DCOf2e+7Ve11qQrPtaubHfpdW3KWjDKvlxV9iaFv/oTMQ== +web3-eth-iban@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.11.tgz#f5f73298305bc7392e2f188bf38a7362b42144ef" + integrity sha512-ozuVlZ5jwFC2hJY4+fH9pIcuH1xP0HEFhtWsR69u9uDIANHLPQQtWYmdj7xQ3p2YT4bQLq/axKhZi7EZVetmxQ== dependencies: - bn.js "4.11.8" - web3-utils "1.2.4" + bn.js "^4.11.9" + web3-utils "1.2.11" -web3-eth-iban@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.1.tgz#4351e1a658efa5f3218357f0a38d6d8cad82481e" - integrity sha512-RCQLfR9Z+DNfpw7oUauYHg1HcVoEljzhwxKn3vi15gK0ssWnTwRGqUiIyVTeSb836G6oakOd5zh7XYqy7pn+nw== +web3-eth-iban@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.5.3.tgz#91b1475893a877b10eac1de5cce6eb379fb81b5d" + integrity sha512-vMzmGqolYZvRHwP9P4Nf6G8uYM5aTLlQu2a34vz78p0KlDC+eV1th3+90Qeaupa28EG7OO0IT1F0BejiIauOPw== dependencies: bn.js "^4.11.9" - web3-utils "1.3.1" + web3-utils "1.5.3" web3-eth-personal@1.2.1: version "1.2.1" @@ -8196,41 +11006,29 @@ web3-eth-personal@1.2.1: web3-net "1.2.1" web3-utils "1.2.1" -web3-eth-personal@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.2.tgz#eee1c86a8132fa16b5e34c6d421ca92e684f0be6" - integrity sha512-4w+GLvTlFqW3+q4xDUXvCEMU7kRZ+xm/iJC8gm1Li1nXxwwFbs+Y+KBK6ZYtoN1qqAnHR+plYpIoVo27ixI5Rg== - dependencies: - "@types/node" "^12.6.1" - web3-core "1.2.2" - web3-core-helpers "1.2.2" - web3-core-method "1.2.2" - web3-net "1.2.2" - web3-utils "1.2.2" - -web3-eth-personal@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.4.tgz#3224cca6851c96347d9799b12c1b67b2a6eb232b" - integrity sha512-5Russ7ZECwHaZXcN3DLuLS7390Vzgrzepl4D87SD6Sn1DHsCZtvfdPIYwoTmKNp69LG3mORl7U23Ga5YxqkICw== +web3-eth-personal@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.11.tgz#a38b3942a1d87a62070ce0622a941553c3d5aa70" + integrity sha512-42IzUtKq9iHZ8K9VN0vAI50iSU9tOA1V7XU2BhF/tb7We2iKBVdkley2fg26TxlOcKNEHm7o6HRtiiFsVK4Ifw== dependencies: - "@types/node" "^12.6.1" - web3-core "1.2.4" - web3-core-helpers "1.2.4" - web3-core-method "1.2.4" - web3-net "1.2.4" - web3-utils "1.2.4" + "@types/node" "^12.12.6" + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-net "1.2.11" + web3-utils "1.2.11" -web3-eth-personal@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.1.tgz#cfe8af01588870d195dabf0a8d9e34956fb8856d" - integrity sha512-/vZEQpXJfBfYoy9KT911ItfoscEfF0Q2j8tsXzC2xmmasSZ6YvAUuPhflVmAo0IHQSX9rmxq0q1p3sbnE3x2pQ== +web3-eth-personal@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.5.3.tgz#4ebe09e9a77dd49d23d93b36b36cfbf4a6dae713" + integrity sha512-JzibJafR7ak/Icas8uvos3BmUNrZw1vShuNR5Cxjo+vteOC8XMqz1Vr7RH65B4bmlfb3bm9xLxetUHO894+Sew== dependencies: "@types/node" "^12.12.6" - web3-core "1.3.1" - web3-core-helpers "1.3.1" - web3-core-method "1.3.1" - web3-net "1.3.1" - web3-utils "1.3.1" + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-net "1.5.3" + web3-utils "1.5.3" web3-eth@1.2.1: version "1.2.1" @@ -8251,62 +11049,42 @@ web3-eth@1.2.1: web3-net "1.2.1" web3-utils "1.2.1" -web3-eth@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.2.tgz#65a1564634a23b990efd1655bf94ad513904286c" - integrity sha512-UXpC74mBQvZzd4b+baD4Ocp7g+BlwxhBHumy9seyE/LMIcMlePXwCKzxve9yReNpjaU16Mmyya6ZYlyiKKV8UA== +web3-eth@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.11.tgz#4c81fcb6285b8caf544058fba3ae802968fdc793" + integrity sha512-REvxW1wJ58AgHPcXPJOL49d1K/dPmuw4LjPLBPStOVkQjzDTVmJEIsiLwn2YeuNDd4pfakBwT8L3bz1G1/wVsQ== dependencies: underscore "1.9.1" - web3-core "1.2.2" - web3-core-helpers "1.2.2" - web3-core-method "1.2.2" - web3-core-subscriptions "1.2.2" - web3-eth-abi "1.2.2" - web3-eth-accounts "1.2.2" - web3-eth-contract "1.2.2" - web3-eth-ens "1.2.2" - web3-eth-iban "1.2.2" - web3-eth-personal "1.2.2" - web3-net "1.2.2" - web3-utils "1.2.2" - -web3-eth@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.4.tgz#24c3b1f1ac79351bbfb808b2ab5c585fa57cdd00" - integrity sha512-+j+kbfmZsbc3+KJpvHM16j1xRFHe2jBAniMo1BHKc3lho6A8Sn9Buyut6odubguX2AxoRArCdIDCkT9hjUERpA== - dependencies: - underscore "1.9.1" - web3-core "1.2.4" - web3-core-helpers "1.2.4" - web3-core-method "1.2.4" - web3-core-subscriptions "1.2.4" - web3-eth-abi "1.2.4" - web3-eth-accounts "1.2.4" - web3-eth-contract "1.2.4" - web3-eth-ens "1.2.4" - web3-eth-iban "1.2.4" - web3-eth-personal "1.2.4" - web3-net "1.2.4" - web3-utils "1.2.4" - -web3-eth@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.1.tgz#60ac4b58e5fd17b8dbbb8378abd63b02e8326727" - integrity sha512-e4iL8ovj0zNxzbv4LTHEv9VS03FxKlAZD+95MolwAqtVoUnKC2H9X6dli0w6eyXP0aKw+mwY0g0CWQHzqZvtXw== - dependencies: - underscore "1.9.1" - web3-core "1.3.1" - web3-core-helpers "1.3.1" - web3-core-method "1.3.1" - web3-core-subscriptions "1.3.1" - web3-eth-abi "1.3.1" - web3-eth-accounts "1.3.1" - web3-eth-contract "1.3.1" - web3-eth-ens "1.3.1" - web3-eth-iban "1.3.1" - web3-eth-personal "1.3.1" - web3-net "1.3.1" - web3-utils "1.3.1" + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-core-subscriptions "1.2.11" + web3-eth-abi "1.2.11" + web3-eth-accounts "1.2.11" + web3-eth-contract "1.2.11" + web3-eth-ens "1.2.11" + web3-eth-iban "1.2.11" + web3-eth-personal "1.2.11" + web3-net "1.2.11" + web3-utils "1.2.11" + +web3-eth@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.5.3.tgz#d7d1ac7198f816ab8a2088c01e0bf1eda45862fe" + integrity sha512-saFurA1L23Bd7MEf7cBli6/jRdMhD4X/NaMiO2mdMMCXlPujoudlIJf+VWpRWJpsbDFdu7XJ2WHkmBYT5R3p1Q== + dependencies: + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-core-subscriptions "1.5.3" + web3-eth-abi "1.5.3" + web3-eth-accounts "1.5.3" + web3-eth-contract "1.5.3" + web3-eth-ens "1.5.3" + web3-eth-iban "1.5.3" + web3-eth-personal "1.5.3" + web3-net "1.5.3" + web3-utils "1.5.3" web3-net@1.2.1: version "1.2.1" @@ -8317,32 +11095,23 @@ web3-net@1.2.1: web3-core-method "1.2.1" web3-utils "1.2.1" -web3-net@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.2.tgz#5c3226ca72df7c591422440ce6f1203fd42ddad9" - integrity sha512-K07j2DXq0x4UOJgae65rWZKraOznhk8v5EGSTdFqASTx7vWE/m+NqBijBYGEsQY1lSMlVaAY9UEQlcXK5HzXTw== - dependencies: - web3-core "1.2.2" - web3-core-method "1.2.2" - web3-utils "1.2.2" - -web3-net@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.4.tgz#1d246406d3aaffbf39c030e4e98bce0ca5f25458" - integrity sha512-wKOsqhyXWPSYTGbp7ofVvni17yfRptpqoUdp3SC8RAhDmGkX6irsiT9pON79m6b3HUHfLoBilFQyt/fTUZOf7A== +web3-net@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.11.tgz#eda68ef25e5cdb64c96c39085cdb74669aabbe1b" + integrity sha512-sjrSDj0pTfZouR5BSTItCuZ5K/oZPVdVciPQ6981PPPIwJJkCMeVjD7I4zO3qDPCnBjBSbWvVnLdwqUBPtHxyg== dependencies: - web3-core "1.2.4" - web3-core-method "1.2.4" - web3-utils "1.2.4" + web3-core "1.2.11" + web3-core-method "1.2.11" + web3-utils "1.2.11" -web3-net@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.1.tgz#79374b1df37429b0839b83b0abc4440ac6181568" - integrity sha512-vuMMWMk+NWHlrNfszGp3qRjH/64eFLiNIwUi0kO8JXQ896SP3Ma0su5sBfSPxNCig047E9GQimrL9wvYAJSO5A== +web3-net@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.5.3.tgz#545fee49b8e213b0c55cbe74ffd0295766057463" + integrity sha512-0W/xHIPvgVXPSdLu0iZYnpcrgNnhzHMC888uMlGP5+qMCt8VuflUZHy7tYXae9Mzsg1kxaJAS5lHVNyeNw4CoQ== dependencies: - web3-core "1.3.1" - web3-core-method "1.3.1" - web3-utils "1.3.1" + web3-core "1.5.3" + web3-core-method "1.5.3" + web3-utils "1.5.3" web3-provider-engine@14.2.1: version "14.2.1" @@ -8370,6 +11139,34 @@ web3-provider-engine@14.2.1: xhr "^2.2.0" xtend "^4.0.1" +web3-provider-engine@16.0.3: + version "16.0.3" + resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-16.0.3.tgz#8ff93edf3a8da2f70d7f85c5116028c06a0d9f07" + integrity sha512-Q3bKhGqLfMTdLvkd4TtkGYJHcoVQ82D1l8jTIwwuJp/sAp7VHnRYb9YJ14SW/69VMWoOhSpPLZV2tWb9V0WJoA== + dependencies: + "@ethereumjs/tx" "^3.3.0" + async "^2.5.0" + backoff "^2.5.0" + clone "^2.0.0" + cross-fetch "^2.1.0" + eth-block-tracker "^4.4.2" + eth-json-rpc-filters "^4.2.1" + eth-json-rpc-infura "^5.1.0" + eth-json-rpc-middleware "^6.0.0" + eth-rpc-errors "^3.0.0" + eth-sig-util "^1.4.2" + ethereumjs-block "^1.2.2" + ethereumjs-util "^5.1.5" + ethereumjs-vm "^2.3.4" + json-stable-stringify "^1.0.1" + promise-to-callback "^1.0.0" + readable-stream "^2.2.9" + request "^2.85.0" + semaphore "^1.0.3" + ws "^5.1.1" + xhr "^2.2.0" + xtend "^4.0.1" + web3-providers-http@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.1.tgz#c93ea003a42e7b894556f7e19dd3540f947f5013" @@ -8378,28 +11175,20 @@ web3-providers-http@1.2.1: web3-core-helpers "1.2.1" xhr2-cookies "1.1.0" -web3-providers-http@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.2.tgz#155e55c1d69f4c5cc0b411ede40dea3d06720956" - integrity sha512-BNZ7Hguy3eBszsarH5gqr9SIZNvqk9eKwqwmGH1LQS1FL3NdoOn7tgPPdddrXec4fL94CwgNk4rCU+OjjZRNDg== - dependencies: - web3-core-helpers "1.2.2" - xhr2-cookies "1.1.0" - -web3-providers-http@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.4.tgz#514fcad71ae77832c2c15574296282fbbc5f4a67" - integrity sha512-dzVCkRrR/cqlIrcrWNiPt9gyt0AZTE0J+MfAu9rR6CyIgtnm1wFUVVGaxYRxuTGQRO4Dlo49gtoGwaGcyxqiTw== +web3-providers-http@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.11.tgz#1cd03442c61670572d40e4dcdf1faff8bd91e7c6" + integrity sha512-psh4hYGb1+ijWywfwpB2cvvOIMISlR44F/rJtYkRmQ5jMvG4FOCPlQJPiHQZo+2cc3HbktvvSJzIhkWQJdmvrA== dependencies: - web3-core-helpers "1.2.4" + web3-core-helpers "1.2.11" xhr2-cookies "1.1.0" -web3-providers-http@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.1.tgz#becbea61706b2fa52e15aca6fe519ee108a8fab9" - integrity sha512-DOujG6Ts7/hAMj0PW5p9/1vwxAIr+1CJ6ZWHshtfOq1v1KnMphVTGOrjcTTUvPT33/DA/so2pgGoPMrgaEIIvQ== +web3-providers-http@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.5.3.tgz#74f170fc3d79eb7941d9fbc34e2a067d61ced0b2" + integrity sha512-5DpUyWGHtDAr2RYmBu34Fu+4gJuBAuNx2POeiJIooUtJ+Mu6pIx4XkONWH6V+Ez87tZAVAsFOkJRTYuzMr3rPw== dependencies: - web3-core-helpers "1.3.1" + web3-core-helpers "1.5.3" xhr2-cookies "1.1.0" web3-providers-ipc@1.2.1: @@ -8411,32 +11200,22 @@ web3-providers-ipc@1.2.1: underscore "1.9.1" web3-core-helpers "1.2.1" -web3-providers-ipc@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.2.tgz#c6d165a12bc68674b4cdd543ea18aec79cafc2e8" - integrity sha512-t97w3zi5Kn/LEWGA6D9qxoO0LBOG+lK2FjlEdCwDQatffB/+vYrzZ/CLYVQSoyFZAlsDoBasVoYSWZK1n39aHA== - dependencies: - oboe "2.1.4" - underscore "1.9.1" - web3-core-helpers "1.2.2" - -web3-providers-ipc@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.4.tgz#9d6659f8d44943fb369b739f48df09092be459bd" - integrity sha512-8J3Dguffin51gckTaNrO3oMBo7g+j0UNk6hXmdmQMMNEtrYqw4ctT6t06YOf9GgtOMjSAc1YEh3LPrvgIsR7og== +web3-providers-ipc@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.11.tgz#d16d6c9be1be6e0b4f4536c4acc16b0f4f27ef21" + integrity sha512-yhc7Y/k8hBV/KlELxynWjJDzmgDEDjIjBzXK+e0rHBsYEhdCNdIH5Psa456c+l0qTEU2YzycF8VAjYpWfPnBpQ== dependencies: oboe "2.1.4" underscore "1.9.1" - web3-core-helpers "1.2.4" + web3-core-helpers "1.2.11" -web3-providers-ipc@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.1.tgz#3cb2572fc5286ab2f3117e0a2dce917816c3dedb" - integrity sha512-BNPscLbvwo+u/tYJrLvPnl/g/SQVSnqP/TjEsB033n4IXqTC4iZ9Of8EDmI0U6ds/9nwNqOBx3KsxbinL46UZA== +web3-providers-ipc@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.5.3.tgz#4bd7f5e445c2f3c2595fce0929c72bb879320a3f" + integrity sha512-JmeAptugVpmXI39LGxUSAymx0NOFdgpuI1hGQfIhbEAcd4sv7fhfd5D+ZU4oLHbRI8IFr4qfGU0uhR8BXhDzlg== dependencies: oboe "2.1.5" - underscore "1.9.1" - web3-core-helpers "1.3.1" + web3-core-helpers "1.5.3" web3-providers-ws@1.2.1: version "1.2.1" @@ -8447,32 +11226,23 @@ web3-providers-ws@1.2.1: web3-core-helpers "1.2.1" websocket "github:web3-js/WebSocket-Node#polyfill/globalThis" -web3-providers-ws@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.2.tgz#d2c05c68598cea5ad3fa6ef076c3bcb3ca300d29" - integrity sha512-Wb1mrWTGMTXOpJkL0yGvL/WYLt8fUIXx8k/l52QB2IiKzvyd42dTWn4+j8IKXGSYYzOm7NMqv6nhA5VDk12VfA== - dependencies: - underscore "1.9.1" - web3-core-helpers "1.2.2" - websocket "github:web3-js/WebSocket-Node#polyfill/globalThis" - -web3-providers-ws@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.4.tgz#099ee271ee03f6ea4f5df9cfe969e83f4ce0e36f" - integrity sha512-F/vQpDzeK+++oeeNROl1IVTufFCwCR2hpWe5yRXN0ApLwHqXrMI7UwQNdJ9iyibcWjJf/ECbauEEQ8CHgE+MYQ== +web3-providers-ws@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.11.tgz#a1dfd6d9778d840561d9ec13dd453046451a96bb" + integrity sha512-ZxnjIY1Er8Ty+cE4migzr43zA/+72AF1myzsLaU5eVgdsfV7Jqx7Dix1hbevNZDKFlSoEyq/3j/jYalh3So1Zg== dependencies: - "@web3-js/websocket" "^1.0.29" + eventemitter3 "4.0.4" underscore "1.9.1" - web3-core-helpers "1.2.4" + web3-core-helpers "1.2.11" + websocket "^1.0.31" -web3-providers-ws@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.1.tgz#a70140811d138a1a5cf3f0c39d11887c8e341c83" - integrity sha512-DAbVbiizv0Hr/bLKjyyKMHc/66ccVkudan3eRsf+R/PXWCqfXb7q6Lwodj4llvC047pEuLKR521ZKr5wbfk1KQ== +web3-providers-ws@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.5.3.tgz#eec6cfb32bb928a4106de506f13a49070a21eabf" + integrity sha512-6DhTw4Q7nm5CFYEUHOJM0gAb3xFx+9gWpVveg3YxJ/ybR1BUvEWo3bLgIJJtX56cYX0WyY6DS35a7f0LOI1kVg== dependencies: eventemitter3 "4.0.4" - underscore "1.9.1" - web3-core-helpers "1.3.1" + web3-core-helpers "1.5.3" websocket "^1.0.32" web3-shh@1.2.1: @@ -8485,35 +11255,25 @@ web3-shh@1.2.1: web3-core-subscriptions "1.2.1" web3-net "1.2.1" -web3-shh@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.2.tgz#44ed998f2a6ba0ec5cb9d455184a0f647826a49c" - integrity sha512-og258NPhlBn8yYrDWjoWBBb6zo1OlBgoWGT+LL5/LPqRbjPe09hlOYHgscAAr9zZGtohTOty7RrxYw6Z6oDWCg== - dependencies: - web3-core "1.2.2" - web3-core-method "1.2.2" - web3-core-subscriptions "1.2.2" - web3-net "1.2.2" - -web3-shh@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.4.tgz#5c8ff5ab624a3b14f08af0d24d2b16c10e9f70dd" - integrity sha512-z+9SCw0dE+69Z/Hv8809XDbLj7lTfEv9Sgu8eKEIdGntZf4v7ewj5rzN5bZZSz8aCvfK7Y6ovz1PBAu4QzS4IQ== +web3-shh@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.11.tgz#f5d086f9621c9a47e98d438010385b5f059fd88f" + integrity sha512-B3OrO3oG1L+bv3E1sTwCx66injW1A8hhwpknDUbV+sw3fehFazA06z9SGXUefuFI1kVs4q2vRi0n4oCcI4dZDg== dependencies: - web3-core "1.2.4" - web3-core-method "1.2.4" - web3-core-subscriptions "1.2.4" - web3-net "1.2.4" + web3-core "1.2.11" + web3-core-method "1.2.11" + web3-core-subscriptions "1.2.11" + web3-net "1.2.11" -web3-shh@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.1.tgz#42294d684358c22aa48616cb9a3eb2e9c1e6362f" - integrity sha512-57FTQvOW1Zm3wqfZpIEqL4apEQIR5JAxjqA4RM4eL0jbdr+Zj5Y4J93xisaEVl6/jMtZNlsqYKTVswx8mHu1xw== +web3-shh@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.5.3.tgz#3c04aa4cda9ba0b746d7225262401160f8e38b13" + integrity sha512-COfEXfsqoV/BkcsNLRxQqnWc1Teb8/9GxdGag5GtPC5gQC/vsN+7hYVJUwNxY9LtJPKYTij2DHHnx6UkITng+Q== dependencies: - web3-core "1.3.1" - web3-core-method "1.3.1" - web3-core-subscriptions "1.3.1" - web3-net "1.3.1" + web3-core "1.5.3" + web3-core-method "1.5.3" + web3-core-subscriptions "1.5.3" + web3-net "1.5.3" web3-utils@1.2.1: version "1.2.1" @@ -8528,13 +11288,13 @@ web3-utils@1.2.1: underscore "1.9.1" utf8 "3.0.0" -web3-utils@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.2.tgz#b53a08c40d2c3f31d3c4a28e7d749405df99c8c0" - integrity sha512-joF+s3243TY5cL7Z7y4h1JsJpUCf/kmFmj+eJar7Y2yNIGVcW961VyrAms75tjUysSuHaUQ3eQXjBEUJueT52A== +web3-utils@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.11.tgz#af1942aead3fb166ae851a985bed8ef2c2d95a82" + integrity sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ== dependencies: - bn.js "4.11.8" - eth-lib "0.2.7" + bn.js "^4.11.9" + eth-lib "0.2.8" ethereum-bloom-filters "^1.0.6" ethjs-unit "0.1.6" number-to-bn "1.7.0" @@ -8542,47 +11302,32 @@ web3-utils@1.2.2: underscore "1.9.1" utf8 "3.0.0" -web3-utils@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.4.tgz#96832a39a66b05bf8862a5b0bdad2799d709d951" - integrity sha512-+S86Ip+jqfIPQWvw2N/xBQq5JNqCO0dyvukGdJm8fEWHZbckT4WxSpHbx+9KLEWY4H4x9pUwnoRkK87pYyHfgQ== +web3-utils@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.5.3.tgz#e914c9320cd663b2a09a5cb920ede574043eb437" + integrity sha512-56nRgA+Ad9SEyCv39g36rTcr5fpsd4L9LgV3FK0aB66nAMazLAA6Qz4lH5XrUKPDyBIPGJIR+kJsyRtwcu2q1Q== dependencies: - bn.js "4.11.8" - eth-lib "0.2.7" + bn.js "^4.11.9" + eth-lib "0.2.8" ethereum-bloom-filters "^1.0.6" ethjs-unit "0.1.6" number-to-bn "1.7.0" randombytes "^2.1.0" - underscore "1.9.1" utf8 "3.0.0" -web3-utils@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.1.tgz#9aa880dd8c9463fe5c099107889f86a085370c2e" - integrity sha512-9gPwFm8SXtIJuzdrZ37PRlalu40fufXxo+H2PiCwaO6RpKGAvlUlWU0qQbyToFNXg7W2H8djEgoAVac8NLMCKQ== +web3-utils@^1.0.0-beta.31, web3-utils@^1.3.0: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.7.4.tgz#eb6fa3706b058602747228234453811bbee017f5" + integrity sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA== dependencies: - bn.js "^4.11.9" - eth-lib "0.2.8" + bn.js "^5.2.1" ethereum-bloom-filters "^1.0.6" + ethereumjs-util "^7.1.0" ethjs-unit "0.1.6" number-to-bn "1.7.0" randombytes "^2.1.0" - underscore "1.9.1" utf8 "3.0.0" -web3@*, web3@^1.2.4: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.1.tgz#f780138c92ae3c42ea45e1a3c6ae8844e0aa5054" - integrity sha512-lDJwOLSRWHYwhPy4h5TNgBRJ/lED7lWXyVOXHCHcEC8ai3coBNdgEXWBu/GGYbZMsS89EoUOJ14j3Ufi4dUkog== - dependencies: - web3-bzz "1.3.1" - web3-core "1.3.1" - web3-eth "1.3.1" - web3-eth-personal "1.3.1" - web3-net "1.3.1" - web3-shh "1.3.1" - web3-utils "1.3.1" - web3@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.1.tgz#5d8158bcca47838ab8c2b784a2dee4c3ceb4179b" @@ -8596,56 +11341,47 @@ web3@1.2.1: web3-shh "1.2.1" web3-utils "1.2.1" -web3@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.2.tgz#b1b8b69aafdf94cbaeadbb68a8aa1df2ef266aec" - integrity sha512-/ChbmB6qZpfGx6eNpczt5YSUBHEA5V2+iUCbn85EVb3Zv6FVxrOo5Tv7Lw0gE2tW7EEjASbCyp3mZeiZaCCngg== - dependencies: - "@types/node" "^12.6.1" - web3-bzz "1.2.2" - web3-core "1.2.2" - web3-eth "1.2.2" - web3-eth-personal "1.2.2" - web3-net "1.2.2" - web3-shh "1.2.2" - web3-utils "1.2.2" - -web3@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.4.tgz#6e7ab799eefc9b4648c2dab63003f704a1d5e7d9" - integrity sha512-xPXGe+w0x0t88Wj+s/dmAdASr3O9wmA9mpZRtixGZxmBexAF0MjfqYM+MS4tVl5s11hMTN3AZb8cDD4VLfC57A== - dependencies: - "@types/node" "^12.6.1" - web3-bzz "1.2.4" - web3-core "1.2.4" - web3-eth "1.2.4" - web3-eth-personal "1.2.4" - web3-net "1.2.4" - web3-shh "1.2.4" - web3-utils "1.2.4" - -websocket-driver@>=0.5.1: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== +web3@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.11.tgz#50f458b2e8b11aa37302071c170ed61cff332975" + integrity sha512-mjQ8HeU41G6hgOYm1pmeH0mRAeNKJGnJEUzDMoerkpw7QUQT4exVREgF1MYPvL/z6vAshOXei25LE/t/Bxl8yQ== + dependencies: + web3-bzz "1.2.11" + web3-core "1.2.11" + web3-eth "1.2.11" + web3-eth-personal "1.2.11" + web3-net "1.2.11" + web3-shh "1.2.11" + web3-utils "1.2.11" + +web3@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.5.3.tgz#11882679453c645bf33620fbc255a243343075aa" + integrity sha512-eyBg/1K44flfv0hPjXfKvNwcUfIVDI4NX48qHQe6wd7C8nPSdbWqo9vLy6ksZIt9NLa90HjI8HsGYgnMSUxn6w== + dependencies: + web3-bzz "1.5.3" + web3-core "1.5.3" + web3-eth "1.5.3" + web3-eth-personal "1.5.3" + web3-net "1.5.3" + web3-shh "1.5.3" + web3-utils "1.5.3" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -websocket@1.0.29, "websocket@github:web3-js/WebSocket-Node#polyfill/globalThis": - version "1.0.29" - resolved "https://codeload.github.com/web3-js/WebSocket-Node/tar.gz/ef5ea2f41daf4a2113b80c9223df884b4d56c400" +websocket@1.0.32: + version "1.0.32" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.32.tgz#1f16ddab3a21a2d929dec1687ab21cfdc6d3dbb1" + integrity sha512-i4yhcllSP4wrpoPMU2N0TQ/q0O94LRG/eUQjEAamRltjQ1oT1PFFKOG4i877OlJgCG8rw6LrrowJp+TYCEWF7Q== dependencies: + bufferutil "^4.0.1" debug "^2.2.0" es5-ext "^0.10.50" - nan "^2.14.0" typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" yaeti "^0.0.6" websocket@^1.0.28: @@ -8659,6 +11395,18 @@ websocket@^1.0.28: typedarray-to-buffer "^3.1.5" yaeti "^0.0.6" +websocket@^1.0.31: + version "1.0.34" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" + integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== + dependencies: + bufferutil "^4.0.1" + debug "^2.2.0" + es5-ext "^0.10.50" + typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" + yaeti "^0.0.6" + websocket@^1.0.32: version "1.0.33" resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.33.tgz#407f763fc58e74a3fa41ca3ae5d78d3f5e3b82a5" @@ -8671,11 +11419,39 @@ websocket@^1.0.32: utf-8-validate "^5.0.2" yaeti "^0.0.6" +"websocket@github:web3-js/WebSocket-Node#polyfill/globalThis": + version "1.0.29" + resolved "https://codeload.github.com/web3-js/WebSocket-Node/tar.gz/ef5ea2f41daf4a2113b80c9223df884b4d56c400" + dependencies: + debug "^2.2.0" + es5-ext "^0.10.50" + nan "^2.14.0" + typedarray-to-buffer "^3.1.5" + yaeti "^0.0.6" + +whatwg-fetch@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" + integrity sha512-SA2KdOXATOroD3EBUYvcdugsusXS5YiQFqwskSbsp5b1gK8HpNi/YP0jcy/BDpdllp305HMnrsVf9K7Be9GiEQ== + whatwg-fetch@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + integrity sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ== + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -8694,14 +11470,14 @@ which-typed-array@^1.1.2: has-symbols "^1.0.1" is-typed-array "^1.1.3" -which@1.3.1: +which@1.3.1, which@^1.1.1, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" -which@2.0.2: +which@2.0.2, which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -8715,10 +11491,33 @@ wide-align@1.1.3: dependencies: string-width "^1.0.2 || 2" -workerpool@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.0.0.tgz#85aad67fa1a2c8ef9386a1b43539900f61d03d58" - integrity sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA== +window-size@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" + integrity sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw== + +word-wrap@^1.2.3, word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +workerpool@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" + integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw== + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" wrap-ansi@^5.1.0: version "5.1.0" @@ -8729,19 +11528,31 @@ wrap-ansi@^5.1.0: string-width "^3.0.0" strip-ansi "^5.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^2.0.0: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" + mkdirp "^0.5.1" + +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== ws@^3.0.0: version "3.3.3" @@ -8759,10 +11570,10 @@ ws@^5.1.1: dependencies: async-limiter "~1.0.0" -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= +ws@^7.4.6: + version "7.5.8" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.8.tgz#ac2729881ab9e7cbaf8787fe3469a48c5c7f636a" + integrity sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw== xhr-request-promise@^0.1.2: version "0.1.3" @@ -8801,12 +11612,25 @@ xhr@^2.0.4, xhr@^2.2.0, xhr@^2.3.3: parse-headers "^2.0.0" xtend "^4.0.0" +xml2js@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + +xmlbuilder@~9.0.1: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ== + xmlhttprequest@1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== @@ -8818,11 +11642,21 @@ xtend@~2.1.1: dependencies: object-keys "~0.4.0" +y18n@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" + integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== + y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + yaeti@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" @@ -8846,21 +11680,23 @@ yargs-parser@13.1.1, yargs-parser@^13.1.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@13.1.2, yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== -yargs-parser@^15.0.1: - version "15.0.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" - integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw== +yargs-parser@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" + integrity sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA== dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" + camelcase "^3.0.0" + lodash.assign "^4.0.6" + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs-unparser@1.6.0: version "1.6.0" @@ -8871,16 +11707,15 @@ yargs-unparser@1.6.0: lodash "^4.17.15" yargs "^13.3.0" -yargs-unparser@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.1.tgz#bd4b0ee05b4c94d058929c32cb09e3fce71d3c5f" - integrity sha512-qZV14lK9MWsGCmcr7u5oXGH0dbGqZAIxTDrWXZDo5zUr6b6iUmelNKO6x6R1dQT24AH3LgRxJpr8meWy2unolA== +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== dependencies: - camelcase "^5.3.1" - decamelize "^1.2.0" - flat "^4.1.0" - is-plain-obj "^1.1.0" - yargs "^14.2.3" + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" yargs@13.3.0, yargs@^13.3.0: version "13.3.0" @@ -8898,38 +11733,38 @@ yargs@13.3.0, yargs@^13.3.0: y18n "^4.0.0" yargs-parser "^13.1.1" -yargs@13.3.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - -yargs@^14.2.3: - version "14.2.3" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" - integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== - dependencies: - cliui "^5.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^4.7.1: + version "4.8.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" + integrity sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA== + dependencies: + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + lodash.assign "^4.0.3" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" require-directory "^2.1.1" - require-main-filename "^2.0.0" + require-main-filename "^1.0.1" set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^15.0.1" + string-width "^1.0.1" + which-module "^1.0.0" + window-size "^0.2.0" + y18n "^3.2.1" + yargs-parser "^2.4.1" yauzl@^2.4.2: version "2.10.0" From 275ac5bcc056b4b0e7f704a2d5ff8e5cfcb196eb Mon Sep 17 00:00:00 2001 From: karczu Date: Tue, 5 Jul 2022 14:59:42 +0200 Subject: [PATCH 05/11] undo feeSplitter changes and fix tests --- contracts/DXswapFeeSplitter.sol | 230 ---- contracts/libraries/TransferHelperV2.sol | 27 - test/DXswapFeeSplitter.spec.ts | 1524 ---------------------- test/shared/fixtures.ts | 17 +- 4 files changed, 3 insertions(+), 1795 deletions(-) delete mode 100644 contracts/DXswapFeeSplitter.sol delete mode 100644 contracts/libraries/TransferHelperV2.sol delete mode 100644 test/DXswapFeeSplitter.spec.ts diff --git a/contracts/DXswapFeeSplitter.sol b/contracts/DXswapFeeSplitter.sol deleted file mode 100644 index 62e9297a3..000000000 --- a/contracts/DXswapFeeSplitter.sol +++ /dev/null @@ -1,230 +0,0 @@ -pragma solidity =0.8.15; - -import './interfaces/IDXswapFactory.sol'; -import './interfaces/IDXswapPair.sol'; -import './interfaces/IWETH.sol'; -import './libraries/TransferHelperV2.sol'; - -contract DXswapFeeSplitter { - address public owner; - IDXswapFactory public factory; - address public nativeCurrencyWrapper; - address public ethReceiver; - address public fallbackReceiver; - uint16 public maxSwapPriceImpact = 100; // uses default 1% as max allowed price impact for takeProtocolFee swap - - // if needed set address of external project which can get % of total earned protocol fee - // % of total protocol fee to external project (100 means 1%) is within the range <0, 50> - struct ExternalFeeReceiver { - address externalReceiver; - uint16 feePercentage; - } - - mapping(address => ExternalFeeReceiver) public externalFeeReceivers; - - event TakeProtocolFee(address indexed sender, address indexed to, uint256 NumberOfPairs); - - constructor( - address _owner, - address _factory, - address _nativeCurrencyWrapper, - address _ethReceiver, - address _fallbackReceiver - ) { - owner = _owner; - factory = IDXswapFactory(_factory); - nativeCurrencyWrapper = _nativeCurrencyWrapper; - ethReceiver = _ethReceiver; - fallbackReceiver = _fallbackReceiver; - } - - receive() external payable {} - - // called by the owner to set the new owner - function transferOwnership(address newOwner) external { - require(msg.sender == owner, 'DXswapFeeSplitter: FORBIDDEN'); - owner = newOwner; - } - - // called by the owner to change receivers addresses - function changeReceivers(address _ethReceiver, address _fallbackReceiver) external { - require(msg.sender == owner, 'DXswapFeeSplitter: FORBIDDEN'); - ethReceiver = _ethReceiver; - fallbackReceiver = _fallbackReceiver; - } - - // 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, 'DXswapFeeSplitter: IDENTICAL_ADDRESSES'); - (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); - require(token0 != address(0), 'DXswapFeeSplitter: ZERO_ADDRESS'); - } - - // Helper function to know if an address is a contract, extcodesize returns the size of the code of a smart - // contract in a specific address - function isContract(address addr) internal view returns (bool) { - uint256 size; - assembly { - size := extcodesize(addr) - } - return size > 0; - } - - // Calculates the CREATE2 address for a pair without making any external calls - // Taken from DXswapLibrary, removed the factory parameter - function pairFor(address tokenA, address tokenB) internal view returns (address pair) { - (address token0, address token1) = sortTokens(tokenA, tokenB); - pair = address( - uint160( - uint256( - keccak256( - abi.encodePacked( - hex'ff', - factory, - keccak256(abi.encodePacked(token0, token1)), - hex'd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776' // init code hash - ) - ) - ) - ) - ); - } - - // Done with code form DXswapRouter and DXswapLibrary, removed the deadline argument - function _swapTokensForETH(uint256 amountIn, address fromToken) internal returns (uint256 amountOut) { - IDXswapPair pairToUse = IDXswapPair(pairFor(fromToken, nativeCurrencyWrapper)); - - (uint256 reserve0, uint256 reserve1, ) = pairToUse.getReserves(); - (uint256 reserveIn, uint256 reserveOut) = fromToken < nativeCurrencyWrapper ? (reserve0, reserve1) : (reserve1, reserve0); - - require(reserveIn > 0 && reserveOut > 0, 'DXswapFeeSplitter: INSUFFICIENT_LIQUIDITY'); // should never happen since pool was checked before - uint256 amountInWithFee = amountIn * (10000 - pairToUse.swapFee()); - uint256 numerator = amountInWithFee * reserveOut; - uint256 denominator = reserveIn * 10000 + amountInWithFee; - amountOut = numerator / denominator; - - TransferHelper.safeTransfer(fromToken, address(pairToUse), amountIn); - - (uint256 amount0Out, uint256 amount1Out) = fromToken < nativeCurrencyWrapper ? (uint256(0), amountOut) : (amountOut, uint256(0)); - - pairToUse.swap(amount0Out, amount1Out, address(this), new bytes(0)); - } - - // Helper function to know if token-nativeCurrencyWrapper pool exists and has enough liquidity - function _isSwapPossible( - address token0, - address token1, - uint256 amount - ) internal view returns (bool) { - address pair = pairFor(token0, token1); - if (!isContract(pair)) return false; - - (uint256 reserve0, uint256 reserve1, ) = IDXswapPair(pair).getReserves(); - (uint256 reserveIn, uint256 reserveOut) = token0 < token1 ? (reserve0, reserve1) : (reserve1, reserve0); - if (reserveIn == 0 || reserveOut == 0) return false; - - uint256 priceImpact = amount * 10000 / reserveIn; // simplified formula - if (priceImpact > maxSwapPriceImpact) return false; - - return true; - } - - // Checks if LP has an extra external address which participates in the distrubution of protocol fee - // External Receiver address has to be defined and fee % > 0 to transfer tokens - function _splitAndTransferFee( - address pair, - address token, - uint256 amount - ) internal { - address _externalFeeReceiver = externalFeeReceivers[pair].externalReceiver; - uint16 _percentFeeToExternalReceiver = externalFeeReceivers[pair].feePercentage; - - if (_percentFeeToExternalReceiver > 0 && _externalFeeReceiver != address(0)) { - uint256 feeToExternalReceiver = amount * _percentFeeToExternalReceiver / 10000; - uint256 feeToAvatarDAO = amount - feeToExternalReceiver; - if (token == nativeCurrencyWrapper) { - IWETH(nativeCurrencyWrapper).withdraw(amount); - TransferHelper.safeTransferETH(_externalFeeReceiver, feeToExternalReceiver); - TransferHelper.safeTransferETH(ethReceiver, feeToAvatarDAO); - } else { - TransferHelper.safeTransfer(token, _externalFeeReceiver, feeToExternalReceiver); - TransferHelper.safeTransfer(token, fallbackReceiver, feeToAvatarDAO); - } - } else { - if (token == nativeCurrencyWrapper) { - IWETH(nativeCurrencyWrapper).withdraw(amount); - TransferHelper.safeTransferETH(ethReceiver, amount); - } else { - TransferHelper.safeTransfer(token, fallbackReceiver, amount); - } - } - } - - // Convert tokens into ETH if possible, if not just transfer the token - function _takeTokenOrETH( - address pair, - address token, - uint256 amount - ) internal { - if (token != nativeCurrencyWrapper && _isSwapPossible(token, nativeCurrencyWrapper, amount)) { - // If it is not nativeCurrencyWrapper and there is a direct path to nativeCurrencyWrapper, swap tokens - uint256 amountOut = _swapTokensForETH(amount, token); - _splitAndTransferFee(pair, nativeCurrencyWrapper, amountOut); - } else { - // If it is nativeCurrencyWrapper or there is not a direct path from token to nativeCurrencyWrapper, transfer tokens - _splitAndTransferFee(pair, token, amount); - } - } - - // Take what was charged as protocol fee from the DXswap pair liquidity - function takeProtocolFee(IDXswapPair[] calldata pairs) external { - for (uint256 i = 0; i < pairs.length; i++) { - address token0 = pairs[i].token0(); - address token1 = pairs[i].token1(); - pairs[i].transfer(address(pairs[i]), pairs[i].balanceOf(address(this))); - (uint256 amount0, uint256 amount1) = pairs[i].burn(address(this)); - if (amount0 > 0) _takeTokenOrETH(address(pairs[i]), token0, amount0); - if (amount1 > 0) _takeTokenOrETH(address(pairs[i]), token1, amount1); - } - emit TakeProtocolFee(msg.sender, ethReceiver, pairs.length); - } - - // called by the owner to set maximum swap price impact allowed for single token-nativeCurrencyWrapper swap (within 0-100% range) - function setMaxSwapPriceImpact(uint16 _maxSwapPriceImpact) external { - require(msg.sender == owner, 'DXswapFeeSplitter: CALLER_NOT_OWNER'); - require(_maxSwapPriceImpact > 0 && _maxSwapPriceImpact < 10000, 'DXswapFeeSplitter: FORBIDDEN_PRICE_IMPACT'); - maxSwapPriceImpact = _maxSwapPriceImpact; - } - - // called by the owner to set external fee receiver address - function setExternalFeeReceiver(address _pair, address _externalReceiver) external { - require(msg.sender == owner, 'DXswapFeeSplitter: CALLER_NOT_OWNER'); - externalFeeReceivers[_pair].externalReceiver = _externalReceiver; - } - - // called by the owner to set fee percentage to external receiver - function setFeePercentageToExternalReceiver(address _pair, uint16 _feePercentageToExternalReceiver) external { - require(msg.sender == owner, 'DXswapFeeSplitter: CALLER_NOT_OWNER'); - IDXswapPair swapPair = IDXswapPair(_pair); - uint256 feeReceiverBalance = swapPair.balanceOf(address(this)); - if (feeReceiverBalance > 0) { - // withdraw accumulated fees before updating the split percentage - address token0 = swapPair.token0(); - address token1 = swapPair.token1(); - swapPair.transfer(address(swapPair), feeReceiverBalance); - (uint256 amount0, uint256 amount1) = swapPair.burn(address(this)); - if (amount0 > 0) _takeTokenOrETH(address(swapPair), token0, amount0); - if (amount1 > 0) _takeTokenOrETH(address(swapPair), token1, amount1); - emit TakeProtocolFee(msg.sender, ethReceiver, 1); - } - require(swapPair.balanceOf(address(this)) == 0, 'DXswapFeeSplitter: TOKENS_NOT_BURNED'); - - // fee percentage check - require( - _feePercentageToExternalReceiver >= 0 && _feePercentageToExternalReceiver <= 5000, - 'DXswapFeeSplitter: FORBIDDEN_FEE_PERCENTAGE_SPLIT' - ); - // update the split percentage for specific pair - externalFeeReceivers[_pair].feePercentage = _feePercentageToExternalReceiver; - } -} diff --git a/contracts/libraries/TransferHelperV2.sol b/contracts/libraries/TransferHelperV2.sol deleted file mode 100644 index dafdf8b9e..000000000 --- a/contracts/libraries/TransferHelperV2.sol +++ /dev/null @@ -1,27 +0,0 @@ -pragma solidity =0.8.15; - -// 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 msgValue) internal { - (bool success,) = to.call{ value: msgValue }(new bytes(0)); - require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); - } -} diff --git a/test/DXswapFeeSplitter.spec.ts b/test/DXswapFeeSplitter.spec.ts deleted file mode 100644 index 107131fe0..000000000 --- a/test/DXswapFeeSplitter.spec.ts +++ /dev/null @@ -1,1524 +0,0 @@ -import '@nomiclabs/hardhat-ethers' -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers' -import { expect } from 'chai' -import { ethers } from "hardhat"; -import { BigNumber } from 'ethers' -import { pairFixture } from './shared/fixtures' -import { DXswapFactory, DXswapFeeSetter, DXswapFeeSplitter, DXswapPair, ERC20, WETH9 } from '../typechain' -import { calcProtocolFee, expandTo18Decimals } from './shared/utilities'; - -const FEE_DENOMINATOR = BigNumber.from(10).pow(4) -const ROUND_EXCEPTION = BigNumber.from(10).pow(4) - -const overrides = { - gasLimit: 9999999 -} - -describe('DXswapFeeSplitter', () => { - const provider = ethers.provider - let dxdao: SignerWithAddress - let tokenOwner: SignerWithAddress - let protocolfeeSplitter: SignerWithAddress - let fallbackReceiver: SignerWithAddress - let externalfeeSplitter: SignerWithAddress - let other: SignerWithAddress - let factory: DXswapFactory - let feeSplitter: DXswapFeeSplitter - let feeSetter: DXswapFeeSetter - - let token0: ERC20 - let token1: ERC20 - let token2: ERC20 - let token3: ERC20 - let pair01: DXswapPair - let pair23: DXswapPair - let pair03: DXswapPair - let wethToken0Pair: DXswapPair - let wethToken1Pair: DXswapPair - let WETH: WETH9 - - beforeEach('assign signers', async function () { - const signers = await ethers.getSigners() - dxdao = signers[0] - tokenOwner = signers[1] - protocolfeeSplitter = signers[2] - fallbackReceiver = signers[3] - other = signers[4] - externalfeeSplitter = signers[5] - }) - - beforeEach('deploy fixture', async () => { - const fixture = await pairFixture(provider, [dxdao, protocolfeeSplitter, fallbackReceiver]) - factory = fixture.dxswapFactory - feeSplitter = fixture.feeSplitter - feeSetter = fixture.feeSetter - token0 = fixture.token0 - token1 = fixture.token1 - token2 = fixture.token2 - token3 = fixture.token3 - pair01 = fixture.dxswapPair01 - pair23 = fixture.dxswapPair23 - pair03 = fixture.dxswapPair03 - WETH = fixture.WETH - wethToken0Pair = fixture.wethToken0Pair - wethToken1Pair = fixture.wethToken1Pair - }) - - beforeEach('set fee to', async function () { - await feeSetter.connect(dxdao).setFeeTo(feeSplitter.address, overrides); - }) - - async function getAmountOut(pair01: DXswapPair, tokenIn: string, amountIn: BigNumber) { - const [reserve0, reserve1] = await pair01.getReserves() - const token0 = await pair01.token0() - const swapFee = BigNumber.from(await pair01.swapFee()) - return getAmountOutSync(reserve0, reserve1, token0 === tokenIn, amountIn, swapFee) - } - - function getAmountOutSync( - reserve0: BigNumber, reserve1: BigNumber, usingToken0: boolean, amountIn: BigNumber, swapFee: BigNumber - ) { - const tokenInBalance = usingToken0 ? reserve0 : reserve1 - const tokenOutBalance = usingToken0 ? reserve1 : reserve0 - const amountInWithFee = amountIn.mul(FEE_DENOMINATOR.sub(swapFee)) - return amountInWithFee.mul(tokenOutBalance) - .div(tokenInBalance.mul(FEE_DENOMINATOR).add(amountInWithFee)) - } - describe('external receiver off', async () => { - it('feeTo, feeToSetter, allPairsLength, INIT_CODE_PAIR_HASH', async () => { - expect(await factory.feeTo()).to.eq(feeSplitter.address) - expect(await factory.feeToSetter()).to.eq(feeSetter.address) - expect(await factory.INIT_CODE_PAIR_HASH()).to.eq('0x9e43bdf627764c4a3e3e452d1b558fff8466adc4dc8a900396801d26f4c542f2') - }) - - it( - 'should only allow owner to set max price impact', - async () => { - await expect(feeSplitter.connect(other).setMaxSwapPriceImpact(500)) - .to.be.revertedWith('DXswapFeeSplitter: CALLER_NOT_OWNER') - await feeSplitter.connect(dxdao).setMaxSwapPriceImpact(500); - expect(await feeSplitter.maxSwapPriceImpact()).to.be.eq(500) - }) - - it( - 'should set max price impact within the range 0 - 10000', - async () => { - expect(await feeSplitter.maxSwapPriceImpact()).to.be.eq(100) - await expect(feeSplitter.connect(dxdao).setMaxSwapPriceImpact(0)) - .to.be.revertedWith('DXswapFeeSplitter: FORBIDDEN_PRICE_IMPACT') - await expect(feeSplitter.connect(dxdao).setMaxSwapPriceImpact(10000)) - .to.be.revertedWith('DXswapFeeSplitter: FORBIDDEN_PRICE_IMPACT') - await feeSplitter.connect(dxdao).setMaxSwapPriceImpact(500); - expect(await feeSplitter.maxSwapPriceImpact()).to.be.eq(500) - }) - - // Where token0-token1 and token1-WETH pairs exist - it( - 'should receive token0 to fallbackreceiver and ETH to ethReceiver when extracting fee from token0-token1', - async () => { - const tokenAmount = expandTo18Decimals(100); - const wethAmount = expandTo18Decimals(100); - const amountIn = expandTo18Decimals(10); - - await token0.transfer(pair01.address, tokenAmount) - await token1.transfer(pair01.address, tokenAmount) - await pair01.mint(dxdao.address, overrides) - - await token1.transfer(wethToken1Pair.address, tokenAmount) - await WETH.transfer(wethToken1Pair.address, wethAmount) - await wethToken1Pair.mint(dxdao.address, overrides) - - let amountOut = await getAmountOut(pair01, token0.address, amountIn); - - await token0.transfer(pair01.address, amountIn) - await pair01.swap(0, amountOut, dxdao.address, '0x') - - amountOut = await getAmountOut(pair01, token1.address, amountIn); - await token1.transfer(pair01.address, amountIn) - await pair01.swap(amountOut, 0, dxdao.address, '0x') - - const protocolFeeToReceive = await calcProtocolFee(pair01, factory); - - await token0.transfer(pair01.address, expandTo18Decimals(10)) - await token1.transfer(pair01.address, expandTo18Decimals(10)) - await pair01.mint(dxdao.address, overrides) - - const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); - expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - const token0FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); - const token1FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); - - const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); - const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) - - await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) - - expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) - expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) - expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) - expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) - expect(await provider.getBalance(feeSplitter.address)).to.eq(0) - - expect(await token0.balanceOf(fallbackReceiver.address)) - .to.be.eq(token0FromProtocolFee) - expect(await provider.getBalance(protocolfeeSplitter.address)) - .to.be.eq(protocolfeeSplitterBalanceBeforeTake.add(wethFromToken1FromProtocolFee)) - }) - - it('should receive everything in ETH from one WETH-token1 pair', async () => { - const tokenAmount = expandTo18Decimals(40); - const wethAmount = expandTo18Decimals(40); - const amountIn = expandTo18Decimals(20); - - await token1.transfer(wethToken1Pair.address, tokenAmount, overrides) - await WETH.transfer(wethToken1Pair.address, wethAmount, overrides) - await wethToken1Pair.mint(dxdao.address, overrides) - - const token1IsFirstToken = (token1.address < WETH.address) - - let amountOut = await getAmountOut(wethToken1Pair, token1.address, amountIn); - await token1.transfer(wethToken1Pair.address, amountIn, overrides) - await wethToken1Pair.swap( - token1IsFirstToken ? 0 : amountOut, - token1IsFirstToken ? amountOut : 0, - dxdao.address, '0x', overrides - ) - - amountOut = await getAmountOut(wethToken1Pair, WETH.address, amountIn); - await WETH.transfer(wethToken1Pair.address, amountIn, overrides) - await wethToken1Pair.swap( - token1IsFirstToken ? amountOut : 0, - token1IsFirstToken ? 0 : amountOut, - dxdao.address, '0x', overrides - ) - - const protocolFeeToReceive = await calcProtocolFee(wethToken1Pair, factory); - - await token1.transfer(wethToken1Pair.address, expandTo18Decimals(10), overrides) - await WETH.transfer(wethToken1Pair.address, expandTo18Decimals(10), overrides) - await wethToken1Pair.mint(dxdao.address, overrides) - - const protocolFeeLPToknesReceived = await wethToken1Pair.balanceOf(feeSplitter.address); - expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - const token1FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token1.balanceOf(wethToken1Pair.address)).div(await wethToken1Pair.totalSupply()); - const wethFromProtocolFee = protocolFeeLPToknesReceived - .mul(await WETH.balanceOf(wethToken1Pair.address)).div(await wethToken1Pair.totalSupply()); - - const swapFee = BigNumber.from(await wethToken1Pair.swapFee()) - const token1ReserveBeforeSwap = (await token1.balanceOf(wethToken1Pair.address)).sub(token1FromProtocolFee) - const wethReserveBeforeSwap = (await WETH.balanceOf(wethToken1Pair.address)).sub(wethFromProtocolFee) - const wethFromToken1FromProtocolFee = await getAmountOutSync( - token1IsFirstToken ? token1ReserveBeforeSwap : wethReserveBeforeSwap, - token1IsFirstToken ? wethReserveBeforeSwap : token1ReserveBeforeSwap, - token1IsFirstToken, - token1FromProtocolFee, - swapFee - ); - - const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) - - await feeSplitter.connect(dxdao).takeProtocolFee([wethToken1Pair.address], overrides) - - expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) - expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) - expect(await wethToken1Pair.balanceOf(feeSplitter.address)).to.eq(0) - expect(await provider.getBalance(feeSplitter.address)).to.eq(0) - - expect((await provider.getBalance(protocolfeeSplitter.address))) - .to.be.eq(protocolfeeSplitterBalanceBeforeTake.add(wethFromToken1FromProtocolFee).add(wethFromProtocolFee)) - }) - - it( - 'should receive only tokens when extracting fee from tokenA-tokenB pair that has no path to WETH', - async () => { - const tokenAmount = expandTo18Decimals(100); - const amountIn = expandTo18Decimals(50); - - await token2.transfer(pair23.address, tokenAmount) - await token3.transfer(pair23.address, tokenAmount) - await pair23.mint(dxdao.address, overrides) - - let amountOut = await getAmountOut(pair23, token2.address, amountIn); - await token2.transfer(pair23.address, amountIn) - await pair23.swap( - (token2.address < token3.address) ? 0 : amountOut, - (token2.address < token3.address) ? amountOut : 0, - dxdao.address, '0x', overrides - ) - - amountOut = await getAmountOut(pair23, token3.address, amountIn); - await token3.transfer(pair23.address, amountIn) - await pair23.swap( - (token2.address < token3.address) ? amountOut : 0, - (token2.address < token3.address) ? 0 : amountOut, - dxdao.address, '0x', overrides - ) - - const protocolFeeToReceive = await calcProtocolFee(pair23, factory); - - await token2.transfer(pair23.address, expandTo18Decimals(10)) - await token3.transfer(pair23.address, expandTo18Decimals(10)) - await pair23.mint(dxdao.address, overrides) - - const protocolFeeLPpair23 = await pair23.balanceOf(feeSplitter.address); - expect(protocolFeeLPpair23.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - const token2FromProtocolFee = protocolFeeLPpair23 - .mul(await token2.balanceOf(pair23.address)).div(await pair23.totalSupply()); - const token3FromProtocolFee = protocolFeeLPpair23 - .mul(await token3.balanceOf(pair23.address)).div(await pair23.totalSupply()); - - const protocolfeeSplitterBalance = await provider.getBalance(protocolfeeSplitter.address) - - await feeSplitter.connect(dxdao).takeProtocolFee([pair23.address], overrides) - - expect(await token2.balanceOf(feeSplitter.address)).to.eq(0) - expect(await token3.balanceOf(feeSplitter.address)).to.eq(0) - expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) - expect(await pair23.balanceOf(feeSplitter.address)).to.eq(0) - expect(await provider.getBalance(feeSplitter.address)).to.eq(0) - - expect((await token2.balanceOf(fallbackReceiver.address))) - .to.be.eq((token2FromProtocolFee)) - expect((await token3.balanceOf(fallbackReceiver.address))) - .to.be.eq((token3FromProtocolFee)) - expect((await provider.getBalance(protocolfeeSplitter.address))) - .to.be.eq(protocolfeeSplitterBalance) - }) - - it( - 'should receive only tokens when extracting fee from both tokenA-tonkenB pair and tokenC-tokenD pair', - async () => { - const tokenAmount = expandTo18Decimals(100); - const amountIn = expandTo18Decimals(50); - - await token2.transfer(pair23.address, tokenAmount) - await token3.transfer(pair23.address, tokenAmount) - await pair23.mint(dxdao.address, overrides) - - let amountOut = await getAmountOut(pair23, token2.address, amountIn); - await token2.transfer(pair23.address, amountIn) - await pair23.swap( - (token2.address < token3.address) ? 0 : amountOut, - (token2.address < token3.address) ? amountOut : 0, - dxdao.address, '0x', overrides - ) - - amountOut = await getAmountOut(pair23, token3.address, amountIn); - await token3.transfer(pair23.address, amountIn) - await pair23.swap( - (token2.address < token3.address) ? amountOut : 0, - (token2.address < token3.address) ? 0 : amountOut, - dxdao.address, '0x', overrides - ) - - let protocolFeeToReceive = await calcProtocolFee(pair23, factory); - - await token2.transfer(pair23.address, expandTo18Decimals(10)) - await token3.transfer(pair23.address, expandTo18Decimals(10)) - await pair23.mint(dxdao.address, overrides) - - const protocolFeeLPpair23 = await pair23.balanceOf(feeSplitter.address); - expect(protocolFeeLPpair23.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - await token0.transfer(pair03.address, tokenAmount) - await token3.transfer(pair03.address, tokenAmount) - await pair03.mint(dxdao.address, overrides) - - amountOut = await getAmountOut(pair03, token0.address, amountIn); - await token0.transfer(pair03.address, amountIn) - await pair03.swap( - (token0.address < token3.address) ? 0 : amountOut, - (token0.address < token3.address) ? amountOut : 0, - dxdao.address, '0x', overrides - ) - - amountOut = await getAmountOut(pair03, token3.address, amountIn); - await token3.transfer(pair03.address, amountIn) - await pair03.swap( - (token0.address < token3.address) ? amountOut : 0, - (token0.address < token3.address) ? 0 : amountOut, - dxdao.address, '0x', overrides - ) - - protocolFeeToReceive = await calcProtocolFee(pair03, factory); - - await token0.transfer(pair03.address, expandTo18Decimals(10)) - await token3.transfer(pair03.address, expandTo18Decimals(10)) - await pair03.mint(dxdao.address, overrides) - - const protocolFeeLPPair03 = await pair03.balanceOf(feeSplitter.address); - expect(protocolFeeLPPair03.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - const token2FromPair23 = protocolFeeLPpair23 - .mul(await token2.balanceOf(pair23.address)).div(await pair23.totalSupply()); - const token3FromPair23 = protocolFeeLPpair23 - .mul(await token3.balanceOf(pair23.address)).div(await pair23.totalSupply()); - const token0FromPair03 = protocolFeeLPPair03 - .mul(await token0.balanceOf(pair03.address)).div(await pair03.totalSupply()); - const token3FromPair03 = protocolFeeLPPair03 - .mul(await token3.balanceOf(pair03.address)).div(await pair03.totalSupply()); - - const protocolfeeSplitterBalance = await provider.getBalance(protocolfeeSplitter.address) - - await feeSplitter.connect(dxdao).takeProtocolFee([pair23.address, pair03.address], overrides) - - expect(await provider.getBalance(protocolfeeSplitter.address)).to.eq(protocolfeeSplitterBalance.toString()) - - expect(await token2.balanceOf(feeSplitter.address)).to.eq(0) - expect(await token3.balanceOf(feeSplitter.address)).to.eq(0) - expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) - expect(await token3.balanceOf(feeSplitter.address)).to.eq(0) - expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) - expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) - expect(await provider.getBalance(feeSplitter.address)).to.eq(0) - - expect((await provider.getBalance(protocolfeeSplitter.address))) - .to.be.eq(protocolfeeSplitterBalance) - expect((await token0.balanceOf(fallbackReceiver.address))) - .to.be.eq(token0FromPair03) - expect((await token2.balanceOf(fallbackReceiver.address))) - .to.be.eq(token2FromPair23) - expect((await token3.balanceOf(fallbackReceiver.address))) - .to.be.eq(token3FromPair23.add(token3FromPair03)) - }) - - it( - 'should only allow owner to transfer ownership', - async () => { - await expect(feeSplitter.connect(other).transferOwnership(other.address, overrides)) - .to.be.revertedWith('DXswapFeeSplitter: FORBIDDEN') - await feeSplitter.connect(dxdao).transferOwnership(tokenOwner.address, overrides); - expect(await feeSplitter.owner()).to.be.eq(tokenOwner.address) - }) - - it( - 'should only allow owner to change receivers', - async () => { - await expect(feeSplitter.connect(other).changeReceivers(other.address, other.address, overrides)) - .to.be.revertedWith('DXswapFeeSplitter: FORBIDDEN') - await feeSplitter.connect(dxdao).changeReceivers(other.address, other.address, overrides); - expect(await feeSplitter.ethReceiver()).to.be.eq(other.address) - expect(await feeSplitter.fallbackReceiver()).to.be.eq(other.address) - }) - - it('should send tokens if there is not any liquidity in the WETH pair', async () => { - const tokenAmount = expandTo18Decimals(100) - const amountIn = expandTo18Decimals(50) - - await token0.transfer(pair01.address, tokenAmount) - await token1.transfer(pair01.address, tokenAmount) - await pair01.mint(dxdao.address, overrides) - - let amountOut = await getAmountOut(pair01, token0.address, amountIn) - await token0.transfer(pair01.address, amountIn) - await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) - - amountOut = await getAmountOut(pair01, token1.address, amountIn) - await token1.transfer(pair01.address, amountIn) - await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) - - const protocolFeeToReceive = await calcProtocolFee(pair01, factory) - - await token0.transfer(pair01.address, expandTo18Decimals(10)) - await token1.transfer(pair01.address, expandTo18Decimals(10)) - await pair01.mint(dxdao.address, overrides) - - const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address) - expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)).to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - const token0FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token0.balanceOf(pair01.address)) - .div(await pair01.totalSupply()) - const token1FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token1.balanceOf(pair01.address)) - .div(await pair01.totalSupply()) - - const protocolfeeSplitterBalance = await provider.getBalance(protocolfeeSplitter.address) - - feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) - expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) - expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) - expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) - expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) - expect(await provider.getBalance(feeSplitter.address)).to.eq(0) - - expect(await provider.getBalance(protocolfeeSplitter.address)).to.be.eq(protocolfeeSplitterBalance) - expect(await token0.balanceOf(fallbackReceiver.address)).to.be.eq(token0FromProtocolFee) - expect(await token1.balanceOf(fallbackReceiver.address)).to.be.eq(token1FromProtocolFee) - }) - - // Where token0-token1 and token1-WETH pairs exist AND PRICE IMPACT TOO HIGH - it( - 'should receive token0 and token1 if price impact token1-weth pool is too high', - async () => { - const tokenAmount = expandTo18Decimals(100); - const amountIn = expandTo18Decimals(1); - // add very small liquidity to weth-token1 pool - const wethTknAmountLowLP = BigNumber.from(1).mul(BigNumber.from(10).pow(15)); - - await token0.transfer(pair01.address, tokenAmount) - await token1.transfer(pair01.address, tokenAmount) - await pair01.mint(dxdao.address, overrides) - - await token1.transfer(wethToken1Pair.address, wethTknAmountLowLP) - await WETH.transfer(wethToken1Pair.address, wethTknAmountLowLP) - await wethToken1Pair.mint(dxdao.address, overrides) - - let amountOut = await getAmountOut(pair01, token0.address, amountIn); - - await token0.transfer(pair01.address, amountIn) - await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) - - amountOut = await getAmountOut(pair01, token1.address, amountIn); - await token1.transfer(pair01.address, amountIn) - - const protocolFeeToReceive = await calcProtocolFee(pair01, factory); - - await token0.transfer(pair01.address, expandTo18Decimals(15)) - await token1.transfer(pair01.address, expandTo18Decimals(15)) - await pair01.mint(dxdao.address, overrides) - - const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); - expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - const token0FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); - const token1FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); - - const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) - - await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) - - expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) - expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) - expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) - expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) - expect(await provider.getBalance(feeSplitter.address)).to.eq(0) - - expect((await provider.getBalance(protocolfeeSplitter.address))) - .to.be.eq(protocolfeeSplitterBalanceBeforeTake) - expect((await token0.balanceOf(fallbackReceiver.address))) - .to.be.eq(token0FromProtocolFee) - expect((await token1.balanceOf(fallbackReceiver.address))) - .to.be.eq(token1FromProtocolFee) - }) - }) - - describe('external receiver on', () => { - it( - 'should send tokenA & tokenB default 100% fee to dxdao and 0% fee to external receiver', - async () => { - const tokenAmount = expandTo18Decimals(100); - const amountIn = expandTo18Decimals(50); - - await feeSplitter.setExternalFeeReceiver(pair23.address, externalfeeSplitter.address) - const [externalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair23.address) - expect(percentFeeToExternalReceiver).to.eq(0) - expect(externalReceiver).to.eq(externalfeeSplitter.address) - - - await token2.transfer(pair23.address, tokenAmount) - await token3.transfer(pair23.address, tokenAmount) - await pair23.mint(dxdao.address, overrides) - - let amountOut = await getAmountOut(pair23, token2.address, amountIn) - await token2.transfer(pair23.address, amountIn) - await pair23.swap( - (token2.address < token3.address) ? 0 : amountOut, - (token2.address < token3.address) ? amountOut : 0, - dxdao.address, '0x', overrides - ) - - amountOut = await getAmountOut(pair23, token3.address, amountIn) - await token3.transfer(pair23.address, amountIn) - await pair23.swap( - (token2.address < token3.address) ? amountOut : 0, - (token2.address < token3.address) ? 0 : amountOut, - dxdao.address, '0x', overrides - ) - - let protocolFeeToReceive = await calcProtocolFee(pair23, factory); - - await token2.transfer(pair23.address, expandTo18Decimals(10)) - await token3.transfer(pair23.address, expandTo18Decimals(10)) - await pair23.mint(dxdao.address, overrides) - - const protocolFeeLP = await pair23.balanceOf(feeSplitter.address); - expect(protocolFeeLP.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - const tokenAFromProtocolFee = protocolFeeLP - .mul(await token2.balanceOf(pair23.address)).div(await pair23.totalSupply()); - const tokenBFromProtocolFee = protocolFeeLP - .mul(await token3.balanceOf(pair23.address)).div(await pair23.totalSupply()); - - const protocolfeeSplitterBalance = await provider.getBalance(protocolfeeSplitter.address) - - const balanceTkn2 = await token2.balanceOf(fallbackReceiver.address) - const balanceTkn3 = await token3.balanceOf(fallbackReceiver.address) - - await feeSplitter.connect(dxdao).takeProtocolFee([pair23.address], overrides) - - expect(await provider.getBalance(protocolfeeSplitter.address)).to.eq(protocolfeeSplitterBalance.toString()) - - expect(await token2.balanceOf(feeSplitter.address)).to.eq(0) - expect(await token3.balanceOf(feeSplitter.address)).to.eq(0) - expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) - expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) - expect(await provider.getBalance(feeSplitter.address)).to.eq(0) - - expect((await provider.getBalance(protocolfeeSplitter.address))) - .to.be.eq(protocolfeeSplitterBalance) - - expect((await token2.balanceOf(fallbackReceiver.address))) - .to.be.eq(balanceTkn2.add(tokenAFromProtocolFee)) - expect((await token2.balanceOf(externalfeeSplitter.address))) - .to.be.eq(0) - - expect((await token3.balanceOf(fallbackReceiver.address))) - .to.be.eq(balanceTkn3.add(tokenBFromProtocolFee)) - expect((await token3.balanceOf(externalfeeSplitter.address))) - .to.be.eq(0) - }) - - it( - 'should split protocol fee and send tokenA & tokenB to dxdao and external fee receiver', - async () => { - const tokenAmount = expandTo18Decimals(100); - const amountIn = expandTo18Decimals(50); - const newPercentFeeToExternalReceiver = 2000 //20% - - // set external fee receiver - await feeSplitter.setExternalFeeReceiver(pair23.address, externalfeeSplitter.address) - await feeSplitter.setFeePercentageToExternalReceiver(pair23.address, newPercentFeeToExternalReceiver) - const [newExternalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair23.address) - expect(percentFeeToExternalReceiver).to.eq(newPercentFeeToExternalReceiver) - expect(newExternalReceiver).to.eq(externalfeeSplitter.address) - - await token2.transfer(pair23.address, tokenAmount) - await token3.transfer(pair23.address, tokenAmount) - await pair23.mint(dxdao.address, overrides) - - let amountOut = await getAmountOut(pair23, token2.address, amountIn) - await token2.transfer(pair23.address, amountIn) - await pair23.swap( - (token2.address < token3.address) ? 0 : amountOut, - (token2.address < token3.address) ? amountOut : 0, - dxdao.address, '0x', overrides - ) - - amountOut = await getAmountOut(pair23, token3.address, amountIn) - await token3.transfer(pair23.address, amountIn) - await pair23.swap( - (token2.address < token3.address) ? amountOut : 0, - (token2.address < token3.address) ? 0 : amountOut, - dxdao.address, '0x', overrides - ) - - let protocolFeeToReceive = await calcProtocolFee(pair23, factory); - - await token2.transfer(pair23.address, expandTo18Decimals(10)) - await token3.transfer(pair23.address, expandTo18Decimals(10)) - await pair23.mint(dxdao.address, overrides) - - const protocolFeeLP = await pair23.balanceOf(feeSplitter.address); - expect(protocolFeeLP.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - const tokenAFromProtocolFee = protocolFeeLP - .mul(await token2.balanceOf(pair23.address)).div(await pair23.totalSupply()); - const tokenBFromProtocolFee = protocolFeeLP - .mul(await token3.balanceOf(pair23.address)).div(await pair23.totalSupply()); - - const tokenAExternal = tokenAFromProtocolFee.mul(percentFeeToExternalReceiver).div(10000); - const tokenBExternal = tokenBFromProtocolFee.mul(percentFeeToExternalReceiver).div(10000); - const tokenAfeeSplitter = tokenAFromProtocolFee.sub(tokenAExternal); - const tokenBfeeSplitter = tokenBFromProtocolFee.sub(tokenBExternal); - - const protocolfeeSplitterBalance = await provider.getBalance(protocolfeeSplitter.address); - - await feeSplitter.connect(dxdao).takeProtocolFee([pair23.address], overrides) - - expect(await provider.getBalance(protocolfeeSplitter.address)).to.eq(protocolfeeSplitterBalance) - - expect(await token2.balanceOf(feeSplitter.address)).to.eq(0) - expect(await token3.balanceOf(feeSplitter.address)).to.eq(0) - expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) - expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) - expect(await provider.getBalance(feeSplitter.address)).to.eq(0) - - expect((await provider.getBalance(protocolfeeSplitter.address))) - .to.be.eq(protocolfeeSplitterBalance) - - expect((await token2.balanceOf(fallbackReceiver.address))) - .to.be.eq(tokenAfeeSplitter) - expect((await token2.balanceOf(externalfeeSplitter.address))) - .to.be.eq(tokenAExternal) - expect((await token3.balanceOf(fallbackReceiver.address))) - .to.be.eq(tokenBfeeSplitter) - expect((await token3.balanceOf(externalfeeSplitter.address))) - .to.be.eq(tokenBExternal) - }) - - // Where token0-token1, token0-WETH and token1-WETH pairs exist - it( - 'should swap token0 & token1 to ETH and sent to ethReceiver when extracting fee from token0-token1', - async () => { - const tokenAmount = expandTo18Decimals(40); - const wethAmount = expandTo18Decimals(40); - const amountIn = expandTo18Decimals(4); - - await token0.transfer(pair01.address, tokenAmount) - await token1.transfer(pair01.address, tokenAmount) - await pair01.mint(dxdao.address, overrides) - - await token0.transfer(wethToken0Pair.address, tokenAmount) - await WETH.transfer(wethToken0Pair.address, wethAmount) - await wethToken0Pair.mint(dxdao.address, overrides) - - await token1.transfer(wethToken1Pair.address, tokenAmount) - await WETH.transfer(wethToken1Pair.address, wethAmount) - await wethToken1Pair.mint(dxdao.address, overrides) - - let amountOut = await getAmountOut(pair01, token0.address, amountIn); - - await token0.transfer(pair01.address, amountIn) - await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) - - amountOut = await getAmountOut(pair01, token1.address, amountIn); - await token1.transfer(pair01.address, amountIn) - await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) - - const protocolFeeToReceive = await calcProtocolFee(pair01, factory); - - await token0.transfer(pair01.address, expandTo18Decimals(2)) - await token1.transfer(pair01.address, expandTo18Decimals(2)) - await pair01.mint(dxdao.address, overrides) - - const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); - expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - const token0FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); - const token1FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); - - const wethFromToken0FromProtocolFee = await getAmountOut(wethToken0Pair, token0.address, token0FromProtocolFee); - const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); - - const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) - - await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) - - expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) - expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) - expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) - expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) - expect(await provider.getBalance(feeSplitter.address)).to.eq(0) - - expect((await token0.balanceOf(protocolfeeSplitter.address))) - .to.eq(0) - expect((await token1.balanceOf(protocolfeeSplitter.address))) - .to.eq(0) - expect((await provider.getBalance(protocolfeeSplitter.address))) - .to.be.eq(protocolfeeSplitterBalanceBeforeTake.add(wethFromToken0FromProtocolFee).add(wethFromToken1FromProtocolFee)) - }) - - // Where token0-token1, token0-WETH and token1-WETH pairs exist - it( - 'should receive token0 and ETH when extracting fee from token0-token1 and swap LPs exist but not enough liquidity', - async () => { - const tokenAmount = expandTo18Decimals(40); - const wethAmount = expandTo18Decimals(40); - const amountIn = expandTo18Decimals(4); - // add very small liquidity to weth-token0 pool - const wethTknAmountLowLP = BigNumber.from(1).mul(BigNumber.from(10).pow(6)); - - await token0.transfer(pair01.address, tokenAmount) - await token1.transfer(pair01.address, tokenAmount) - await pair01.mint(dxdao.address, overrides) - - await token0.transfer(wethToken0Pair.address, wethTknAmountLowLP) - await WETH.transfer(wethToken0Pair.address, wethTknAmountLowLP) - await wethToken0Pair.mint(dxdao.address, overrides) - - await token1.transfer(wethToken1Pair.address, tokenAmount) - await WETH.transfer(wethToken1Pair.address, wethAmount) - await wethToken1Pair.mint(dxdao.address, overrides) - - let amountOut = await getAmountOut(pair01, token0.address, amountIn); - - await token0.transfer(pair01.address, amountIn) - await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) - - amountOut = await getAmountOut(pair01, token1.address, amountIn); - await token1.transfer(pair01.address, amountIn) - await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) - - const protocolFeeToReceive = await calcProtocolFee(pair01, factory); - - await token0.transfer(pair01.address, expandTo18Decimals(10)) - await token1.transfer(pair01.address, expandTo18Decimals(10)) - await pair01.mint(dxdao.address, overrides) - - const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); - expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - const token0FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); - const token1FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); - - const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); - - const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) - - await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) - - expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) - expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) - expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) - expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) - expect(await provider.getBalance(feeSplitter.address)).to.eq(0) - - expect(await token0.balanceOf(fallbackReceiver.address)) - .to.eq(token0FromProtocolFee) - expect(await token1.balanceOf(protocolfeeSplitter.address)) - .to.eq(0) - expect(await provider.getBalance(protocolfeeSplitter.address)) - .to.be.eq(protocolfeeSplitterBalanceBeforeTake.add(wethFromToken1FromProtocolFee)) - }) - - // Where token0-token1, token0-WETH and token1-WETH pairs exist - it( - 'should receive token0 and ETH when extracting fee from token0-token1 and swap LPs exist but token reserve is 0', - async () => { - const tokenAmount = expandTo18Decimals(40); - const wethAmount = expandTo18Decimals(40); - const amountIn = expandTo18Decimals(4); - // add very small liquidity to weth-token0 pool - const wethTknAmountLowLP = BigNumber.from(1).mul(BigNumber.from(10).pow(6)); - - await token0.transfer(pair01.address, tokenAmount) - await token1.transfer(pair01.address, tokenAmount) - await pair01.mint(dxdao.address, overrides) - - // dont transfer token0 to the pool and dont mint lp tokens - await WETH.transfer(wethToken0Pair.address, wethTknAmountLowLP) - - await token1.transfer(wethToken1Pair.address, tokenAmount) - await WETH.transfer(wethToken1Pair.address, wethAmount) - await wethToken1Pair.mint(dxdao.address, overrides) - - let amountOut = await getAmountOut(pair01, token0.address, amountIn); - - await token0.transfer(pair01.address, amountIn) - await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) - - amountOut = await getAmountOut(pair01, token1.address, amountIn); - await token1.transfer(pair01.address, amountIn) - await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) - - const protocolFeeToReceive = await calcProtocolFee(pair01, factory); - - await token0.transfer(pair01.address, expandTo18Decimals(10)) - await token1.transfer(pair01.address, expandTo18Decimals(10)) - await pair01.mint(dxdao.address, overrides) - - const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); - expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - const token0FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); - const token1FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); - - const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); - - const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) - - await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) - - expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) - expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) - expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) - expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) - expect(await provider.getBalance(feeSplitter.address)).to.eq(0) - - expect((await token0.balanceOf(fallbackReceiver.address))) - .to.eq(token0FromProtocolFee) - expect((await token1.balanceOf(protocolfeeSplitter.address))) - .to.eq(0) - expect((await provider.getBalance(protocolfeeSplitter.address))) - .to.be.eq(protocolfeeSplitterBalanceBeforeTake.add(wethFromToken1FromProtocolFee)) - }) - - // Where token0-token1, token0-WETH and token1-WETH pairs exist - it( - 'should swap tkn0 & tkn1 to ETH and split fee when extracting from tkn0-tkn1', - async () => { - const tokenAmount = expandTo18Decimals(40); - const wethAmount = expandTo18Decimals(40); - const amountIn = expandTo18Decimals(4); - const newPercentFeeToExternalReceiver = 2000 //20% - - await token0.transfer(pair01.address, tokenAmount) - await token1.transfer(pair01.address, tokenAmount) - await pair01.mint(dxdao.address, overrides) - - // set external fee receiver - await feeSplitter.setExternalFeeReceiver(pair01.address, externalfeeSplitter.address) - await feeSplitter.setFeePercentageToExternalReceiver(pair01.address, newPercentFeeToExternalReceiver) - const [externalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair01.address) - expect(percentFeeToExternalReceiver).to.eq(newPercentFeeToExternalReceiver) - expect(externalReceiver).to.eq(externalfeeSplitter.address) - - await token0.transfer(wethToken0Pair.address, tokenAmount) - await WETH.transfer(wethToken0Pair.address, wethAmount) - await wethToken0Pair.mint(dxdao.address, overrides) - - await token1.transfer(wethToken1Pair.address, tokenAmount) - await WETH.transfer(wethToken1Pair.address, wethAmount) - await wethToken1Pair.mint(dxdao.address, overrides) - - let amountOut = await getAmountOut(pair01, token0.address, amountIn); - - await token0.transfer(pair01.address, amountIn) - await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) - - amountOut = await getAmountOut(pair01, token1.address, amountIn); - await token1.transfer(pair01.address, amountIn) - await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) - - const protocolFeeToReceive = await calcProtocolFee(pair01, factory); - - await token0.transfer(pair01.address, expandTo18Decimals(10)) - await token1.transfer(pair01.address, expandTo18Decimals(10)) - await pair01.mint(dxdao.address, overrides) - - const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); - expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - const token0FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); - const token1FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); - - const wethFromToken0FromProtocolFee = await getAmountOut(wethToken0Pair, token0.address, token0FromProtocolFee); - const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); - - const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) - const externalfeeSplitterBalanceBeforeTake = await provider.getBalance(externalfeeSplitter.address) - - await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) - - expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) - expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) - expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) - expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) - expect(await provider.getBalance(feeSplitter.address)).to.eq(0) - - expect((await token0.balanceOf(protocolfeeSplitter.address))) - .to.eq(0) - expect((await token1.balanceOf(protocolfeeSplitter.address))) - .to.eq(0) - expect((await token0.balanceOf(externalfeeSplitter.address))) - .to.eq(0) - expect((await token1.balanceOf(externalfeeSplitter.address))) - .to.eq(0) - - const totalWethFromFees = wethFromToken0FromProtocolFee.add(wethFromToken1FromProtocolFee) - const wethToExternalReceiver = totalWethFromFees.mul(percentFeeToExternalReceiver).div(10000) - const wethToProtocolfeeSplitter = totalWethFromFees.sub(wethToExternalReceiver) - - expect((await provider.getBalance(protocolfeeSplitter.address)).div(ROUND_EXCEPTION)) - .to.be.eq((protocolfeeSplitterBalanceBeforeTake.add(wethToProtocolfeeSplitter)).div(ROUND_EXCEPTION)) - expect((await provider.getBalance(externalfeeSplitter.address)).div(ROUND_EXCEPTION)) - .to.be.eq((externalfeeSplitterBalanceBeforeTake.add(wethToExternalReceiver)).div(ROUND_EXCEPTION)) - }) - - // Where token0-token1, token0-WETH and token1-WETH pairs exist - it( - 'should split tkn0 & tkn1 fee when extracting from tkn0-tkn1 and swap to weth impossible', - async () => { - const tokenAmount = expandTo18Decimals(40); - const wethAmount = expandTo18Decimals(40); - const amountIn = expandTo18Decimals(4); - const newPercentFeeToExternalReceiver = 2000 //20% - - await token0.transfer(pair01.address, tokenAmount) - await token1.transfer(pair01.address, tokenAmount) - await pair01.mint(dxdao.address, overrides) - - // set external fee receiver - await feeSplitter.setExternalFeeReceiver(pair01.address, externalfeeSplitter.address) - await feeSplitter.setFeePercentageToExternalReceiver(pair01.address, newPercentFeeToExternalReceiver) - const [externalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair01.address) - expect(percentFeeToExternalReceiver).to.eq(newPercentFeeToExternalReceiver) - expect(externalReceiver).to.eq(externalfeeSplitter.address) - - let amountOut = await getAmountOut(pair01, token0.address, amountIn); - - await token0.transfer(pair01.address, amountIn) - await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) - - amountOut = await getAmountOut(pair01, token1.address, amountIn); - await token1.transfer(pair01.address, amountIn) - await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) - - amountOut = await getAmountOut(pair01, token1.address, amountIn); - await token1.transfer(pair01.address, amountIn) - await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) - - const protocolFeeToReceive = await calcProtocolFee(pair01, factory); - - await token0.transfer(pair01.address, expandTo18Decimals(10)) - await token1.transfer(pair01.address, expandTo18Decimals(10)) - await pair01.mint(dxdao.address, overrides) - - const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); - expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - const token0FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); - const token1FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); - - const receiverBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) - const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) - const externalfeeSplitterBalanceBeforeTake = await provider.getBalance(externalfeeSplitter.address) - - await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) - - const tkn0ToExternalReceiver = token0FromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) - const tkn1ToExternalReceiver = token1FromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) - const tkn0ToProtocolfeeSplitter = token0FromProtocolFee.sub(tkn0ToExternalReceiver) - const tkn1ToProtocolfeeSplitter = token1FromProtocolFee.sub(tkn1ToExternalReceiver) - - expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) - expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) - expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) - expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) - expect(await provider.getBalance(feeSplitter.address)).to.eq(0) - - // send token0 and token1 to fallbackreceiver and external fee receiver - expect((await token0.balanceOf(fallbackReceiver.address))) - .to.eq(tkn0ToProtocolfeeSplitter) - expect((await token1.balanceOf(fallbackReceiver.address))) - .to.eq(tkn1ToProtocolfeeSplitter) - expect((await token0.balanceOf(externalfeeSplitter.address))) - .to.eq(tkn0ToExternalReceiver) - expect((await token1.balanceOf(externalfeeSplitter.address))) - .to.eq(tkn1ToExternalReceiver) - - // should not change eth balance - expect((await provider.getBalance(protocolfeeSplitter.address))) - .to.eq(receiverBalanceBeforeTake) - expect((await provider.getBalance(protocolfeeSplitter.address))) - .to.eq(protocolfeeSplitterBalanceBeforeTake) - expect((await provider.getBalance(externalfeeSplitter.address))) - .to.eq(externalfeeSplitterBalanceBeforeTake) - }) - - // Where token0-token1, token0-WETH and token1-WETH pairs exist - it( - 'should update protocol fee and split tkn0 & tkn1 fee when extracting from tkn0-tkn1 and swap to weth impossible', - async () => { - const tokenAmount = expandTo18Decimals(40); - const wethAmount = expandTo18Decimals(40); - const amountIn = expandTo18Decimals(4); - const newPercentFeeToExternalReceiver = 2000 //20% - - await token0.transfer(pair01.address, tokenAmount) - await token1.transfer(pair01.address, tokenAmount) - await pair01.mint(dxdao.address, overrides) - - // set external fee receiver - await feeSplitter.setExternalFeeReceiver(pair01.address, externalfeeSplitter.address) - await feeSplitter.setFeePercentageToExternalReceiver(pair01.address, newPercentFeeToExternalReceiver) - const [externalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair01.address) - expect(percentFeeToExternalReceiver).to.eq(newPercentFeeToExternalReceiver) - expect(externalReceiver).to.eq(externalfeeSplitter.address) - - let amountOut = await getAmountOut(pair01, token0.address, amountIn); - - await token0.transfer(pair01.address, amountIn) - await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) - - amountOut = await getAmountOut(pair01, token1.address, amountIn); - await token1.transfer(pair01.address, amountIn) - await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) - - amountOut = await getAmountOut(pair01, token1.address, amountIn); - await token1.transfer(pair01.address, amountIn) - await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) - - // change protocol fee - await feeSetter.connect(dxdao).setProtocolFee(20) - expect(await factory.protocolFeeDenominator()).to.eq(20) - - amountOut = await getAmountOut(pair01, token1.address, amountIn); - await token1.transfer(pair01.address, amountIn) - await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) - - amountOut = await getAmountOut(pair01, token1.address, amountIn); - await token1.transfer(pair01.address, amountIn) - await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) - - const protocolFeeToReceive = await calcProtocolFee(pair01, factory); - - await token0.transfer(pair01.address, expandTo18Decimals(10)) - await token1.transfer(pair01.address, expandTo18Decimals(10)) - await pair01.mint(dxdao.address, overrides) - - const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); - expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - const token0FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); - const token1FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); - - const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) - const externalfeeSplitterBalanceBeforeTake = await provider.getBalance(externalfeeSplitter.address) - - await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) - - const tkn0ToExternalReceiver = token0FromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) - const tkn1ToExternalReceiver = token1FromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) - const tkn0ToProtocolfeeSplitter = token0FromProtocolFee.sub(tkn0ToExternalReceiver) - const tkn1ToProtocolfeeSplitter = token1FromProtocolFee.sub(tkn1ToExternalReceiver) - - expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) - expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) - expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) - expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) - expect(await provider.getBalance(feeSplitter.address)).to.eq(0) - - // send token0 and token1 to fallbackreceiver and external fee receiver - expect((await token0.balanceOf(fallbackReceiver.address))) - .to.eq(tkn0ToProtocolfeeSplitter) - expect((await token1.balanceOf(fallbackReceiver.address))) - .to.eq(tkn1ToProtocolfeeSplitter) - expect((await token0.balanceOf(externalfeeSplitter.address))) - .to.eq(tkn0ToExternalReceiver) - expect((await token1.balanceOf(externalfeeSplitter.address))) - .to.eq(tkn1ToExternalReceiver) - - // should not change eth balance - expect((await provider.getBalance(protocolfeeSplitter.address))) - .to.eq(protocolfeeSplitterBalanceBeforeTake) - expect((await provider.getBalance(externalfeeSplitter.address))) - .to.eq(externalfeeSplitterBalanceBeforeTake) - }) - - // Where tokenA-tokenB, tokenC-tokenD and tokenC-WETH pairs exist - it( - 'should receive tokens 2,3 and ETH (token0 swapped) from pair 23, 03', - async () => { - const tokenAmount = expandTo18Decimals(100); - const wethAmount = expandTo18Decimals(100); - const amountIn = expandTo18Decimals(50); - - await token0.transfer(wethToken0Pair.address, tokenAmount) - await WETH.transfer(wethToken0Pair.address, wethAmount) - await wethToken0Pair.mint(dxdao.address, overrides) - - // pair23 - await token2.transfer(pair23.address, tokenAmount) - await token3.transfer(pair23.address, tokenAmount) - await pair23.mint(dxdao.address, overrides) - - let amountOut = await getAmountOut(pair23, token2.address, amountIn) - await token2.transfer(pair23.address, amountIn) - await pair23.swap( - (token2.address < token3.address) ? 0 : amountOut, - (token2.address < token3.address) ? amountOut : 0, - dxdao.address, '0x', overrides - ) - - amountOut = await getAmountOut(pair23, token3.address, amountIn) - await token3.transfer(pair23.address, amountIn) - await pair23.swap( - (token2.address < token3.address) ? amountOut : 0, - (token2.address < token3.address) ? 0 : amountOut, - dxdao.address, '0x', overrides - ) - - let protocolFeeToReceive = await calcProtocolFee(pair23, factory); - - await token2.transfer(pair23.address, expandTo18Decimals(10)) - await token3.transfer(pair23.address, expandTo18Decimals(10)) - await pair23.mint(dxdao.address, overrides) - - const protocolFeeLPPair23 = await pair23.balanceOf(feeSplitter.address); - expect(protocolFeeLPPair23.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - // pair03 - await token0.transfer(pair03.address, tokenAmount) - await token3.transfer(pair03.address, tokenAmount) - await pair03.mint(dxdao.address, overrides) - - amountOut = await getAmountOut(pair03, token2.address, amountIn) - await token0.transfer(pair03.address, amountIn) - await pair03.swap( - (token0.address < token3.address) ? 0 : amountOut, - (token0.address < token3.address) ? amountOut : 0, - dxdao.address, '0x', overrides - ) - - amountOut = await getAmountOut(pair03, token3.address, amountIn) - await token3.transfer(pair03.address, amountIn) - await pair03.swap( - (token0.address < token3.address) ? amountOut : 0, - (token0.address < token3.address) ? 0 : amountOut, - dxdao.address, '0x', overrides - ) - - protocolFeeToReceive = await calcProtocolFee(pair03, factory); - - await token0.transfer(pair03.address, expandTo18Decimals(10)) - await token3.transfer(pair03.address, expandTo18Decimals(10)) - await pair03.mint(dxdao.address, overrides) - - const protocolFeeLPPair03 = await pair03.balanceOf(feeSplitter.address); - expect(protocolFeeLPPair03.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - const tokenAFromProtocolFee = protocolFeeLPPair23 - .mul(await token2.balanceOf(pair23.address)).div(await pair23.totalSupply()); - const tokenBFromProtocolFee = protocolFeeLPPair23 - .mul(await token3.balanceOf(pair23.address)).div(await pair23.totalSupply()); - const tokenCFromProtocolFee = protocolFeeLPPair03 - .mul(await token0.balanceOf(pair03.address)).div(await pair03.totalSupply()); - const tokenDFromProtocolFee = protocolFeeLPPair03 - .mul(await token3.balanceOf(pair03.address)).div(await pair03.totalSupply()); - - const wethFromToken0FromProtocolFee = await getAmountOut(wethToken0Pair, token0.address, tokenCFromProtocolFee); - const protocolfeeSplitterBalance = await provider.getBalance(protocolfeeSplitter.address) - - await expect(feeSplitter.connect(dxdao).takeProtocolFee([pair23.address, pair03.address], overrides) - ).to.emit(feeSplitter, 'TakeProtocolFee').withArgs(dxdao.address, protocolfeeSplitter.address, 2) - - expect(await token2.balanceOf(feeSplitter.address)).to.eq(0) - expect(await token3.balanceOf(feeSplitter.address)).to.eq(0) - expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) - expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) - expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) - expect(await provider.getBalance(feeSplitter.address)).to.eq(0) - - expect((await token2.balanceOf(fallbackReceiver.address))) - .to.be.eq(tokenAFromProtocolFee) - expect((await token3.balanceOf(fallbackReceiver.address))) - .to.be.eq(tokenBFromProtocolFee.add(tokenDFromProtocolFee)) - - expect((await token0.balanceOf(fallbackReceiver.address))) - .to.eq(0) - expect((await provider.getBalance(protocolfeeSplitter.address))) - .to.be.eq(protocolfeeSplitterBalance.add(wethFromToken0FromProtocolFee)) - }) - - it( - 'should receive tkn0 and eth if split % was updated', - async () => { - const tokenAmount = expandTo18Decimals(40); - const wethAmount = expandTo18Decimals(40); - const amountIn = expandTo18Decimals(4); - - await token0.transfer(pair01.address, tokenAmount) - await token1.transfer(pair01.address, tokenAmount) - await pair01.mint(dxdao.address, overrides) - - await token1.transfer(wethToken1Pair.address, tokenAmount) - await WETH.transfer(wethToken1Pair.address, wethAmount) - await wethToken1Pair.mint(dxdao.address, overrides) - - let amountOut = await getAmountOut(pair01, token0.address, amountIn); - - await token0.transfer(pair01.address, amountIn) - await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) - - amountOut = await getAmountOut(pair01, token1.address, amountIn); - await token1.transfer(pair01.address, amountIn) - await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) - - const protocolFeeToReceive = await calcProtocolFee(pair01, factory); - - await token0.transfer(pair01.address, expandTo18Decimals(10)) - await token1.transfer(pair01.address, expandTo18Decimals(10)) - await pair01.mint(dxdao.address, overrides) - - const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); - expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - const token0FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); - const token1FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); - - const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); - const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) - - // set external fee receiver - await feeSplitter.setExternalFeeReceiver(pair01.address, externalfeeSplitter.address) - await feeSplitter.setFeePercentageToExternalReceiver(pair01.address, 2000) - const [externalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair01.address) - expect(percentFeeToExternalReceiver).to.eq(2000) - expect(externalReceiver).to.eq(externalfeeSplitter.address) - - expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) - expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) - expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) - expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) - expect(await provider.getBalance(feeSplitter.address)).to.eq(0) - - expect((await token0.balanceOf(fallbackReceiver.address))) - .to.be.eq(token0FromProtocolFee) - expect((await provider.getBalance(protocolfeeSplitter.address))) - .to.be.eq(protocolfeeSplitterBalanceBeforeTake.add(wethFromToken1FromProtocolFee)) - }) - - // Where weth pairs don't exist - it( - 'should split and receive only tokens when extracting fee from tokenA-tokenB pair that has no path to WETH', - async () => { - const tokenAmount = expandTo18Decimals(100); - const amountIn = expandTo18Decimals(50); - - // set external fee receiver - await feeSplitter.setExternalFeeReceiver(pair23.address, externalfeeSplitter.address) - await feeSplitter.setFeePercentageToExternalReceiver(pair23.address, 1000) - - const [externalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair23.address) - expect(externalReceiver).to.eq(externalfeeSplitter.address) - expect(percentFeeToExternalReceiver).to.eq(1000) - - await token2.transfer(pair23.address, tokenAmount) - await token3.transfer(pair23.address, tokenAmount) - await pair23.mint(dxdao.address, overrides) - - let amountOut = await getAmountOut(pair23, token2.address, amountIn); - await token2.transfer(pair23.address, amountIn) - await pair23.swap( - (token2.address < token3.address) ? 0 : amountOut, - (token2.address < token3.address) ? amountOut : 0, - dxdao.address, '0x', overrides - ) - - amountOut = await getAmountOut(pair23, token3.address, amountIn); - await token3.transfer(pair23.address, amountIn) - await pair23.swap( - (token2.address < token3.address) ? amountOut : 0, - (token2.address < token3.address) ? 0 : amountOut, - dxdao.address, '0x', overrides - ) - - const protocolFeeToReceive = await calcProtocolFee(pair23, factory); - - await token2.transfer(pair23.address, expandTo18Decimals(10)) - await token3.transfer(pair23.address, expandTo18Decimals(10)) - await pair23.mint(dxdao.address, overrides) - - const protocolFeeLP = await pair23.balanceOf(feeSplitter.address); - expect(protocolFeeLP.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - const tokenAFromProtocolFee = protocolFeeLP - .mul(await token2.balanceOf(pair23.address)).div(await pair23.totalSupply()); - const tokenBFromProtocolFee = protocolFeeLP - .mul(await token3.balanceOf(pair23.address)).div(await pair23.totalSupply()); - - const protocolfeeSplitterBalance = await provider.getBalance(protocolfeeSplitter.address) - const externalBalance = await provider.getBalance(externalfeeSplitter.address) - - await feeSplitter.connect(dxdao).takeProtocolFee([pair23.address], overrides) - - const tknAExternalReceiver = tokenAFromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) - const tknBExternalReceiver = tokenBFromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) - const tknAProtocolfeeSplitter = tokenAFromProtocolFee.sub(tknAExternalReceiver) - const tknBProtocolfeeSplitter = tokenBFromProtocolFee.sub(tknBExternalReceiver) - - expect(await token2.balanceOf(feeSplitter.address)).to.eq(0) - expect(await token3.balanceOf(feeSplitter.address)).to.eq(0) - expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) - expect(await pair23.balanceOf(feeSplitter.address)).to.eq(0) - expect(await provider.getBalance(feeSplitter.address)).to.eq(0) - - expect(await provider.getBalance(protocolfeeSplitter.address)) - .to.be.eq(protocolfeeSplitterBalance) - expect(await provider.getBalance(externalfeeSplitter.address)) - .to.be.eq(externalBalance) - expect(await token2.balanceOf(fallbackReceiver.address)) - .to.be.eq(tknAProtocolfeeSplitter) - expect(await token3.balanceOf(fallbackReceiver.address)) - .to.be.eq(tknBProtocolfeeSplitter) - expect(await token2.balanceOf(externalfeeSplitter.address)) - .to.be.eq(tknAExternalReceiver) - expect(await token3.balanceOf(externalfeeSplitter.address)) - .to.be.eq(tknBExternalReceiver) - }) - - // Where token0-token1, token0-WETH and token1-WETH pairs exist - it( - 'should swap tokens, split and sent to ethReceiver when extracting fee from token0-token1', - async () => { - const tokenAmount = expandTo18Decimals(40); - const wethAmount = expandTo18Decimals(40); - const amountIn = expandTo18Decimals(4); - - // set external fee receiver - await feeSplitter.setExternalFeeReceiver(pair01.address, externalfeeSplitter.address) - await feeSplitter.setFeePercentageToExternalReceiver(pair01.address, 3000) - - const [externalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair01.address) - expect(externalReceiver).to.eq(externalfeeSplitter.address) - expect(percentFeeToExternalReceiver).to.eq(3000) - - await token0.transfer(pair01.address, tokenAmount) - await token1.transfer(pair01.address, tokenAmount) - await pair01.mint(dxdao.address, overrides) - - await token0.transfer(wethToken0Pair.address, tokenAmount) - await WETH.transfer(wethToken0Pair.address, wethAmount) - await wethToken0Pair.mint(dxdao.address, overrides) - - await token1.transfer(wethToken1Pair.address, tokenAmount) - await WETH.transfer(wethToken1Pair.address, wethAmount) - await wethToken1Pair.mint(dxdao.address, overrides) - - let amountOut = await getAmountOut(pair01, token0.address, amountIn); - await token0.transfer(pair01.address, amountIn) - await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) - - amountOut = await getAmountOut(pair01, token1.address, amountIn); - await token1.transfer(pair01.address, amountIn) - await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) - - // estimate protocol fee received - const protocolFeeToReceive = await calcProtocolFee(pair01, factory); - - await token0.transfer(pair01.address, expandTo18Decimals(10)) - await token1.transfer(pair01.address, expandTo18Decimals(10)) - await pair01.mint(dxdao.address, overrides) - - const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); - expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - // calculate tkn0 & tkn1 amount based on LP - const token0FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); - const token1FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); - - const dxdaoBalanceBeforeTake = await provider.getBalance(dxdao.address) - const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) - const externalfeeSplitterBalanceBeforeTake = await provider.getBalance(externalfeeSplitter.address) - - // estimate weth from tokens - const wethFromToken0 = await getAmountOut(wethToken0Pair, token0.address, token0FromProtocolFee); - const wethFromToken1 = await getAmountOut(wethToken1Pair, token0.address, token1FromProtocolFee); - - // set external fee receiver - await feeSplitter.setFeePercentageToExternalReceiver(pair01.address, 2000) - const [newExternalReceiver, newPercentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair01.address) - expect(newExternalReceiver).to.eq(externalfeeSplitter.address) - expect(newPercentFeeToExternalReceiver).to.eq(2000) - - // split weth to avatar and external Receiver with OLD fee percentage - const wethTkn0ToExternalReceiver = wethFromToken0.mul(percentFeeToExternalReceiver).div(10000) - const wethTkn1ToExternalReceiver = wethFromToken1.mul(percentFeeToExternalReceiver).div(10000) - const tkn0ToProtocolfeeSplitter = wethFromToken0.sub(wethTkn0ToExternalReceiver) - const tkn1ToProtocolfeeSplitter = wethFromToken1.sub(wethTkn1ToExternalReceiver) - - // weth to external Receiver after token-weth swap - const wethExternal = wethTkn0ToExternalReceiver.add(wethTkn1ToExternalReceiver) - - // weth to dao after token-weth swap - const wethfeeSplitter = tkn0ToProtocolfeeSplitter.add(tkn1ToProtocolfeeSplitter) - - expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) - expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) - expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) - expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) - expect(await provider.getBalance(feeSplitter.address)).to.eq(0) - - // dont send token0 and token1 to fallbackreceiver and external fee receiver - expect((await token0.balanceOf(fallbackReceiver.address))) - .to.eq(0) - expect((await token1.balanceOf(fallbackReceiver.address))) - .to.eq(0) - expect((await token0.balanceOf(externalfeeSplitter.address))) - .to.eq(0) - expect((await token1.balanceOf(externalfeeSplitter.address))) - .to.eq(0) - - // should change eth balance for avatar and external Receiver - expect((await provider.getBalance(protocolfeeSplitter.address))) - .to.be.eq(protocolfeeSplitterBalanceBeforeTake.add(wethfeeSplitter)) - expect((await provider.getBalance(externalfeeSplitter.address))) - .to.be.eq(externalfeeSplitterBalanceBeforeTake.add(wethExternal)) - - // should not send eth to avatar (gas used for updating split %) - expect((await provider.getBalance(dxdao.address))) - .to.be.lte(dxdaoBalanceBeforeTake) - }) - - // Where token0-token1 and token1-WETH pairs exist - it( - 'should emit TakeProtocolFee event', - async () => { - const tokenAmount = expandTo18Decimals(40); - const wethAmount = expandTo18Decimals(40); - const amountIn = expandTo18Decimals(4); - - await token0.transfer(pair01.address, tokenAmount) - await token1.transfer(pair01.address, tokenAmount) - await pair01.mint(dxdao.address, overrides) - - await token1.transfer(wethToken1Pair.address, tokenAmount) - await WETH.transfer(wethToken1Pair.address, wethAmount) - await wethToken1Pair.mint(dxdao.address, overrides) - - let amountOut = await getAmountOut(pair01, token0.address, amountIn); - await token0.transfer(pair01.address, amountIn) - await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) - - amountOut = await getAmountOut(wethToken1Pair, token1.address, amountIn); - await token1.transfer(wethToken1Pair.address, amountIn) - await wethToken1Pair.swap(0, amountOut, dxdao.address, '0x', overrides) - - await token0.transfer(pair01.address, expandTo18Decimals(10)) - await token1.transfer(pair01.address, expandTo18Decimals(10)) - await pair01.mint(dxdao.address, overrides) - - await token1.transfer(wethToken1Pair.address, expandTo18Decimals(10)) - await WETH.transfer(wethToken1Pair.address, expandTo18Decimals(10)) - await wethToken1Pair.mint(dxdao.address, overrides) - - await expect(feeSplitter.connect(dxdao).takeProtocolFee([pair01.address, wethToken1Pair.address], overrides) - ).to.emit(feeSplitter, 'TakeProtocolFee').withArgs(dxdao.address, protocolfeeSplitter.address, 2) - }) - }) -}) diff --git a/test/shared/fixtures.ts b/test/shared/fixtures.ts index 3b5ac0446..29fb56bf0 100644 --- a/test/shared/fixtures.ts +++ b/test/shared/fixtures.ts @@ -1,5 +1,5 @@ import { expandTo18Decimals } from './utilities' -import { DXswapFactory, DXswapFactory__factory, DXswapPair, DXswapPair__factory, WETH9, WETH9__factory, DXswapFeeSetter, DXswapFeeReceiver, DXswapFeeSetter__factory, DXswapFeeReceiver__factory, ERC20, DXswapERC20, ERC20__factory, DXswapDeployer__factory, DXswapERC20__factory, DXswapFeeSplitter__factory, DXswapFeeSplitter } from './../../typechain' +import { DXswapFactory, DXswapFactory__factory, DXswapPair, DXswapPair__factory, WETH9, WETH9__factory, DXswapFeeSetter, DXswapFeeReceiver, DXswapFeeSetter__factory, DXswapFeeReceiver__factory, ERC20, ERC20__factory, DXswapDeployer__factory } from './../../typechain' import { defaultAbiCoder } from 'ethers/lib/utils'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { JsonRpcProvider } from '@ethersproject/providers'; @@ -14,7 +14,6 @@ interface FactoryFixture { dxswapFactory: DXswapFactory feeSetter: DXswapFeeSetter feeReceiver: DXswapFeeReceiver - feeSplitter: DXswapFeeSplitter WETH: WETH9 } @@ -42,12 +41,7 @@ export async function factoryFixture(provider: JsonRpcProvider, [dxdao, protocol const feeReceiverAddress = await dxswapFactory.feeTo() const feeReceiver = (await new DXswapFeeReceiver__factory(dxdao).deploy(dxdao.address, dxswapFactory.address, WETH.address, protocolFeeReceiver.address, fallbackReceiver.address)).attach(feeReceiverAddress) - // TODO import contract address from mainnet - // deplot FeeSplitter - const feeSplitter = await new DXswapFeeSplitter__factory(dxdao).deploy(dxdao.address, dxswapFactory.address, WETH.address, protocolFeeReceiver.address, fallbackReceiver.address) - - - return { dxswapFactory, feeSetter, feeReceiver, feeSplitter, WETH } + return { dxswapFactory, feeSetter, feeReceiver, WETH } } interface PairFixture extends FactoryFixture { @@ -107,11 +101,6 @@ export async function pairFixture(provider: JsonRpcProvider, [dxdao, protocolFee // set receivers feeReceiver.connect(dxdao).changeReceivers(protocolFeeReceiver.address, fallbackReceiver.address) - //deploy FeeSplitter - const feeSplitter = await new DXswapFeeSplitter__factory(dxdao).deploy(dxdao.address, dxswapFactory.address, WETH.address, protocolFeeReceiver.address, fallbackReceiver.address) - // set receivers - feeSplitter.connect(dxdao).changeReceivers(protocolFeeReceiver.address, fallbackReceiver.address) - // initialize DXswapPair factory const dxSwapPair_factory = await new DXswapPair__factory(dxdao).deploy() @@ -135,5 +124,5 @@ export async function pairFixture(provider: JsonRpcProvider, [dxdao, protocolFee const WETH0PairAddress = await dxswapFactory.getPair(token0.address, WETH.address) const wethToken0Pair = dxSwapPair_factory.attach(WETH0PairAddress) - return { dxswapFactory, feeSetter, feeReceiver, feeSplitter, WETH, token0, token1, token2, token3, dxswapPair01, dxswapPair23, dxswapPair03, wethToken1Pair, wethToken0Pair } + return { dxswapFactory, feeSetter, feeReceiver, WETH, token0, token1, token2, token3, dxswapPair01, dxswapPair23, dxswapPair03, wethToken1Pair, wethToken0Pair } } From 1d05cbb626c7516b3c233ee252290091f6bdec79 Mon Sep 17 00:00:00 2001 From: karczu Date: Tue, 5 Jul 2022 15:21:33 +0200 Subject: [PATCH 06/11] feat: add FeeSplitter contract & test --- contracts/DXswapFeeSplitter.sol | 230 ++++ contracts/libraries/TransferHelperV2.sol | 27 + test/DXswapFeeSplitter.spec.ts | 1524 ++++++++++++++++++++++ test/shared/fixtures.ts | 15 +- 4 files changed, 1794 insertions(+), 2 deletions(-) create mode 100644 contracts/DXswapFeeSplitter.sol create mode 100644 contracts/libraries/TransferHelperV2.sol create mode 100644 test/DXswapFeeSplitter.spec.ts diff --git a/contracts/DXswapFeeSplitter.sol b/contracts/DXswapFeeSplitter.sol new file mode 100644 index 000000000..62e9297a3 --- /dev/null +++ b/contracts/DXswapFeeSplitter.sol @@ -0,0 +1,230 @@ +pragma solidity =0.8.15; + +import './interfaces/IDXswapFactory.sol'; +import './interfaces/IDXswapPair.sol'; +import './interfaces/IWETH.sol'; +import './libraries/TransferHelperV2.sol'; + +contract DXswapFeeSplitter { + address public owner; + IDXswapFactory public factory; + address public nativeCurrencyWrapper; + address public ethReceiver; + address public fallbackReceiver; + uint16 public maxSwapPriceImpact = 100; // uses default 1% as max allowed price impact for takeProtocolFee swap + + // if needed set address of external project which can get % of total earned protocol fee + // % of total protocol fee to external project (100 means 1%) is within the range <0, 50> + struct ExternalFeeReceiver { + address externalReceiver; + uint16 feePercentage; + } + + mapping(address => ExternalFeeReceiver) public externalFeeReceivers; + + event TakeProtocolFee(address indexed sender, address indexed to, uint256 NumberOfPairs); + + constructor( + address _owner, + address _factory, + address _nativeCurrencyWrapper, + address _ethReceiver, + address _fallbackReceiver + ) { + owner = _owner; + factory = IDXswapFactory(_factory); + nativeCurrencyWrapper = _nativeCurrencyWrapper; + ethReceiver = _ethReceiver; + fallbackReceiver = _fallbackReceiver; + } + + receive() external payable {} + + // called by the owner to set the new owner + function transferOwnership(address newOwner) external { + require(msg.sender == owner, 'DXswapFeeSplitter: FORBIDDEN'); + owner = newOwner; + } + + // called by the owner to change receivers addresses + function changeReceivers(address _ethReceiver, address _fallbackReceiver) external { + require(msg.sender == owner, 'DXswapFeeSplitter: FORBIDDEN'); + ethReceiver = _ethReceiver; + fallbackReceiver = _fallbackReceiver; + } + + // 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, 'DXswapFeeSplitter: IDENTICAL_ADDRESSES'); + (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); + require(token0 != address(0), 'DXswapFeeSplitter: ZERO_ADDRESS'); + } + + // Helper function to know if an address is a contract, extcodesize returns the size of the code of a smart + // contract in a specific address + function isContract(address addr) internal view returns (bool) { + uint256 size; + assembly { + size := extcodesize(addr) + } + return size > 0; + } + + // Calculates the CREATE2 address for a pair without making any external calls + // Taken from DXswapLibrary, removed the factory parameter + function pairFor(address tokenA, address tokenB) internal view returns (address pair) { + (address token0, address token1) = sortTokens(tokenA, tokenB); + pair = address( + uint160( + uint256( + keccak256( + abi.encodePacked( + hex'ff', + factory, + keccak256(abi.encodePacked(token0, token1)), + hex'd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776' // init code hash + ) + ) + ) + ) + ); + } + + // Done with code form DXswapRouter and DXswapLibrary, removed the deadline argument + function _swapTokensForETH(uint256 amountIn, address fromToken) internal returns (uint256 amountOut) { + IDXswapPair pairToUse = IDXswapPair(pairFor(fromToken, nativeCurrencyWrapper)); + + (uint256 reserve0, uint256 reserve1, ) = pairToUse.getReserves(); + (uint256 reserveIn, uint256 reserveOut) = fromToken < nativeCurrencyWrapper ? (reserve0, reserve1) : (reserve1, reserve0); + + require(reserveIn > 0 && reserveOut > 0, 'DXswapFeeSplitter: INSUFFICIENT_LIQUIDITY'); // should never happen since pool was checked before + uint256 amountInWithFee = amountIn * (10000 - pairToUse.swapFee()); + uint256 numerator = amountInWithFee * reserveOut; + uint256 denominator = reserveIn * 10000 + amountInWithFee; + amountOut = numerator / denominator; + + TransferHelper.safeTransfer(fromToken, address(pairToUse), amountIn); + + (uint256 amount0Out, uint256 amount1Out) = fromToken < nativeCurrencyWrapper ? (uint256(0), amountOut) : (amountOut, uint256(0)); + + pairToUse.swap(amount0Out, amount1Out, address(this), new bytes(0)); + } + + // Helper function to know if token-nativeCurrencyWrapper pool exists and has enough liquidity + function _isSwapPossible( + address token0, + address token1, + uint256 amount + ) internal view returns (bool) { + address pair = pairFor(token0, token1); + if (!isContract(pair)) return false; + + (uint256 reserve0, uint256 reserve1, ) = IDXswapPair(pair).getReserves(); + (uint256 reserveIn, uint256 reserveOut) = token0 < token1 ? (reserve0, reserve1) : (reserve1, reserve0); + if (reserveIn == 0 || reserveOut == 0) return false; + + uint256 priceImpact = amount * 10000 / reserveIn; // simplified formula + if (priceImpact > maxSwapPriceImpact) return false; + + return true; + } + + // Checks if LP has an extra external address which participates in the distrubution of protocol fee + // External Receiver address has to be defined and fee % > 0 to transfer tokens + function _splitAndTransferFee( + address pair, + address token, + uint256 amount + ) internal { + address _externalFeeReceiver = externalFeeReceivers[pair].externalReceiver; + uint16 _percentFeeToExternalReceiver = externalFeeReceivers[pair].feePercentage; + + if (_percentFeeToExternalReceiver > 0 && _externalFeeReceiver != address(0)) { + uint256 feeToExternalReceiver = amount * _percentFeeToExternalReceiver / 10000; + uint256 feeToAvatarDAO = amount - feeToExternalReceiver; + if (token == nativeCurrencyWrapper) { + IWETH(nativeCurrencyWrapper).withdraw(amount); + TransferHelper.safeTransferETH(_externalFeeReceiver, feeToExternalReceiver); + TransferHelper.safeTransferETH(ethReceiver, feeToAvatarDAO); + } else { + TransferHelper.safeTransfer(token, _externalFeeReceiver, feeToExternalReceiver); + TransferHelper.safeTransfer(token, fallbackReceiver, feeToAvatarDAO); + } + } else { + if (token == nativeCurrencyWrapper) { + IWETH(nativeCurrencyWrapper).withdraw(amount); + TransferHelper.safeTransferETH(ethReceiver, amount); + } else { + TransferHelper.safeTransfer(token, fallbackReceiver, amount); + } + } + } + + // Convert tokens into ETH if possible, if not just transfer the token + function _takeTokenOrETH( + address pair, + address token, + uint256 amount + ) internal { + if (token != nativeCurrencyWrapper && _isSwapPossible(token, nativeCurrencyWrapper, amount)) { + // If it is not nativeCurrencyWrapper and there is a direct path to nativeCurrencyWrapper, swap tokens + uint256 amountOut = _swapTokensForETH(amount, token); + _splitAndTransferFee(pair, nativeCurrencyWrapper, amountOut); + } else { + // If it is nativeCurrencyWrapper or there is not a direct path from token to nativeCurrencyWrapper, transfer tokens + _splitAndTransferFee(pair, token, amount); + } + } + + // Take what was charged as protocol fee from the DXswap pair liquidity + function takeProtocolFee(IDXswapPair[] calldata pairs) external { + for (uint256 i = 0; i < pairs.length; i++) { + address token0 = pairs[i].token0(); + address token1 = pairs[i].token1(); + pairs[i].transfer(address(pairs[i]), pairs[i].balanceOf(address(this))); + (uint256 amount0, uint256 amount1) = pairs[i].burn(address(this)); + if (amount0 > 0) _takeTokenOrETH(address(pairs[i]), token0, amount0); + if (amount1 > 0) _takeTokenOrETH(address(pairs[i]), token1, amount1); + } + emit TakeProtocolFee(msg.sender, ethReceiver, pairs.length); + } + + // called by the owner to set maximum swap price impact allowed for single token-nativeCurrencyWrapper swap (within 0-100% range) + function setMaxSwapPriceImpact(uint16 _maxSwapPriceImpact) external { + require(msg.sender == owner, 'DXswapFeeSplitter: CALLER_NOT_OWNER'); + require(_maxSwapPriceImpact > 0 && _maxSwapPriceImpact < 10000, 'DXswapFeeSplitter: FORBIDDEN_PRICE_IMPACT'); + maxSwapPriceImpact = _maxSwapPriceImpact; + } + + // called by the owner to set external fee receiver address + function setExternalFeeReceiver(address _pair, address _externalReceiver) external { + require(msg.sender == owner, 'DXswapFeeSplitter: CALLER_NOT_OWNER'); + externalFeeReceivers[_pair].externalReceiver = _externalReceiver; + } + + // called by the owner to set fee percentage to external receiver + function setFeePercentageToExternalReceiver(address _pair, uint16 _feePercentageToExternalReceiver) external { + require(msg.sender == owner, 'DXswapFeeSplitter: CALLER_NOT_OWNER'); + IDXswapPair swapPair = IDXswapPair(_pair); + uint256 feeReceiverBalance = swapPair.balanceOf(address(this)); + if (feeReceiverBalance > 0) { + // withdraw accumulated fees before updating the split percentage + address token0 = swapPair.token0(); + address token1 = swapPair.token1(); + swapPair.transfer(address(swapPair), feeReceiverBalance); + (uint256 amount0, uint256 amount1) = swapPair.burn(address(this)); + if (amount0 > 0) _takeTokenOrETH(address(swapPair), token0, amount0); + if (amount1 > 0) _takeTokenOrETH(address(swapPair), token1, amount1); + emit TakeProtocolFee(msg.sender, ethReceiver, 1); + } + require(swapPair.balanceOf(address(this)) == 0, 'DXswapFeeSplitter: TOKENS_NOT_BURNED'); + + // fee percentage check + require( + _feePercentageToExternalReceiver >= 0 && _feePercentageToExternalReceiver <= 5000, + 'DXswapFeeSplitter: FORBIDDEN_FEE_PERCENTAGE_SPLIT' + ); + // update the split percentage for specific pair + externalFeeReceivers[_pair].feePercentage = _feePercentageToExternalReceiver; + } +} diff --git a/contracts/libraries/TransferHelperV2.sol b/contracts/libraries/TransferHelperV2.sol new file mode 100644 index 000000000..dafdf8b9e --- /dev/null +++ b/contracts/libraries/TransferHelperV2.sol @@ -0,0 +1,27 @@ +pragma solidity =0.8.15; + +// 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 msgValue) internal { + (bool success,) = to.call{ value: msgValue }(new bytes(0)); + require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); + } +} diff --git a/test/DXswapFeeSplitter.spec.ts b/test/DXswapFeeSplitter.spec.ts new file mode 100644 index 000000000..107131fe0 --- /dev/null +++ b/test/DXswapFeeSplitter.spec.ts @@ -0,0 +1,1524 @@ +import '@nomiclabs/hardhat-ethers' +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers' +import { expect } from 'chai' +import { ethers } from "hardhat"; +import { BigNumber } from 'ethers' +import { pairFixture } from './shared/fixtures' +import { DXswapFactory, DXswapFeeSetter, DXswapFeeSplitter, DXswapPair, ERC20, WETH9 } from '../typechain' +import { calcProtocolFee, expandTo18Decimals } from './shared/utilities'; + +const FEE_DENOMINATOR = BigNumber.from(10).pow(4) +const ROUND_EXCEPTION = BigNumber.from(10).pow(4) + +const overrides = { + gasLimit: 9999999 +} + +describe('DXswapFeeSplitter', () => { + const provider = ethers.provider + let dxdao: SignerWithAddress + let tokenOwner: SignerWithAddress + let protocolfeeSplitter: SignerWithAddress + let fallbackReceiver: SignerWithAddress + let externalfeeSplitter: SignerWithAddress + let other: SignerWithAddress + let factory: DXswapFactory + let feeSplitter: DXswapFeeSplitter + let feeSetter: DXswapFeeSetter + + let token0: ERC20 + let token1: ERC20 + let token2: ERC20 + let token3: ERC20 + let pair01: DXswapPair + let pair23: DXswapPair + let pair03: DXswapPair + let wethToken0Pair: DXswapPair + let wethToken1Pair: DXswapPair + let WETH: WETH9 + + beforeEach('assign signers', async function () { + const signers = await ethers.getSigners() + dxdao = signers[0] + tokenOwner = signers[1] + protocolfeeSplitter = signers[2] + fallbackReceiver = signers[3] + other = signers[4] + externalfeeSplitter = signers[5] + }) + + beforeEach('deploy fixture', async () => { + const fixture = await pairFixture(provider, [dxdao, protocolfeeSplitter, fallbackReceiver]) + factory = fixture.dxswapFactory + feeSplitter = fixture.feeSplitter + feeSetter = fixture.feeSetter + token0 = fixture.token0 + token1 = fixture.token1 + token2 = fixture.token2 + token3 = fixture.token3 + pair01 = fixture.dxswapPair01 + pair23 = fixture.dxswapPair23 + pair03 = fixture.dxswapPair03 + WETH = fixture.WETH + wethToken0Pair = fixture.wethToken0Pair + wethToken1Pair = fixture.wethToken1Pair + }) + + beforeEach('set fee to', async function () { + await feeSetter.connect(dxdao).setFeeTo(feeSplitter.address, overrides); + }) + + async function getAmountOut(pair01: DXswapPair, tokenIn: string, amountIn: BigNumber) { + const [reserve0, reserve1] = await pair01.getReserves() + const token0 = await pair01.token0() + const swapFee = BigNumber.from(await pair01.swapFee()) + return getAmountOutSync(reserve0, reserve1, token0 === tokenIn, amountIn, swapFee) + } + + function getAmountOutSync( + reserve0: BigNumber, reserve1: BigNumber, usingToken0: boolean, amountIn: BigNumber, swapFee: BigNumber + ) { + const tokenInBalance = usingToken0 ? reserve0 : reserve1 + const tokenOutBalance = usingToken0 ? reserve1 : reserve0 + const amountInWithFee = amountIn.mul(FEE_DENOMINATOR.sub(swapFee)) + return amountInWithFee.mul(tokenOutBalance) + .div(tokenInBalance.mul(FEE_DENOMINATOR).add(amountInWithFee)) + } + describe('external receiver off', async () => { + it('feeTo, feeToSetter, allPairsLength, INIT_CODE_PAIR_HASH', async () => { + expect(await factory.feeTo()).to.eq(feeSplitter.address) + expect(await factory.feeToSetter()).to.eq(feeSetter.address) + expect(await factory.INIT_CODE_PAIR_HASH()).to.eq('0x9e43bdf627764c4a3e3e452d1b558fff8466adc4dc8a900396801d26f4c542f2') + }) + + it( + 'should only allow owner to set max price impact', + async () => { + await expect(feeSplitter.connect(other).setMaxSwapPriceImpact(500)) + .to.be.revertedWith('DXswapFeeSplitter: CALLER_NOT_OWNER') + await feeSplitter.connect(dxdao).setMaxSwapPriceImpact(500); + expect(await feeSplitter.maxSwapPriceImpact()).to.be.eq(500) + }) + + it( + 'should set max price impact within the range 0 - 10000', + async () => { + expect(await feeSplitter.maxSwapPriceImpact()).to.be.eq(100) + await expect(feeSplitter.connect(dxdao).setMaxSwapPriceImpact(0)) + .to.be.revertedWith('DXswapFeeSplitter: FORBIDDEN_PRICE_IMPACT') + await expect(feeSplitter.connect(dxdao).setMaxSwapPriceImpact(10000)) + .to.be.revertedWith('DXswapFeeSplitter: FORBIDDEN_PRICE_IMPACT') + await feeSplitter.connect(dxdao).setMaxSwapPriceImpact(500); + expect(await feeSplitter.maxSwapPriceImpact()).to.be.eq(500) + }) + + // Where token0-token1 and token1-WETH pairs exist + it( + 'should receive token0 to fallbackreceiver and ETH to ethReceiver when extracting fee from token0-token1', + async () => { + const tokenAmount = expandTo18Decimals(100); + const wethAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(10); + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x') + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x') + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); + + const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) + + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect(await token0.balanceOf(fallbackReceiver.address)) + .to.be.eq(token0FromProtocolFee) + expect(await provider.getBalance(protocolfeeSplitter.address)) + .to.be.eq(protocolfeeSplitterBalanceBeforeTake.add(wethFromToken1FromProtocolFee)) + }) + + it('should receive everything in ETH from one WETH-token1 pair', async () => { + const tokenAmount = expandTo18Decimals(40); + const wethAmount = expandTo18Decimals(40); + const amountIn = expandTo18Decimals(20); + + await token1.transfer(wethToken1Pair.address, tokenAmount, overrides) + await WETH.transfer(wethToken1Pair.address, wethAmount, overrides) + await wethToken1Pair.mint(dxdao.address, overrides) + + const token1IsFirstToken = (token1.address < WETH.address) + + let amountOut = await getAmountOut(wethToken1Pair, token1.address, amountIn); + await token1.transfer(wethToken1Pair.address, amountIn, overrides) + await wethToken1Pair.swap( + token1IsFirstToken ? 0 : amountOut, + token1IsFirstToken ? amountOut : 0, + dxdao.address, '0x', overrides + ) + + amountOut = await getAmountOut(wethToken1Pair, WETH.address, amountIn); + await WETH.transfer(wethToken1Pair.address, amountIn, overrides) + await wethToken1Pair.swap( + token1IsFirstToken ? amountOut : 0, + token1IsFirstToken ? 0 : amountOut, + dxdao.address, '0x', overrides + ) + + const protocolFeeToReceive = await calcProtocolFee(wethToken1Pair, factory); + + await token1.transfer(wethToken1Pair.address, expandTo18Decimals(10), overrides) + await WETH.transfer(wethToken1Pair.address, expandTo18Decimals(10), overrides) + await wethToken1Pair.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await wethToken1Pair.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(wethToken1Pair.address)).div(await wethToken1Pair.totalSupply()); + const wethFromProtocolFee = protocolFeeLPToknesReceived + .mul(await WETH.balanceOf(wethToken1Pair.address)).div(await wethToken1Pair.totalSupply()); + + const swapFee = BigNumber.from(await wethToken1Pair.swapFee()) + const token1ReserveBeforeSwap = (await token1.balanceOf(wethToken1Pair.address)).sub(token1FromProtocolFee) + const wethReserveBeforeSwap = (await WETH.balanceOf(wethToken1Pair.address)).sub(wethFromProtocolFee) + const wethFromToken1FromProtocolFee = await getAmountOutSync( + token1IsFirstToken ? token1ReserveBeforeSwap : wethReserveBeforeSwap, + token1IsFirstToken ? wethReserveBeforeSwap : token1ReserveBeforeSwap, + token1IsFirstToken, + token1FromProtocolFee, + swapFee + ); + + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([wethToken1Pair.address], overrides) + + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await wethToken1Pair.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalanceBeforeTake.add(wethFromToken1FromProtocolFee).add(wethFromProtocolFee)) + }) + + it( + 'should receive only tokens when extracting fee from tokenA-tokenB pair that has no path to WETH', + async () => { + const tokenAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(50); + + await token2.transfer(pair23.address, tokenAmount) + await token3.transfer(pair23.address, tokenAmount) + await pair23.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair23, token2.address, amountIn); + await token2.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? 0 : amountOut, + (token2.address < token3.address) ? amountOut : 0, + dxdao.address, '0x', overrides + ) + + amountOut = await getAmountOut(pair23, token3.address, amountIn); + await token3.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? amountOut : 0, + (token2.address < token3.address) ? 0 : amountOut, + dxdao.address, '0x', overrides + ) + + const protocolFeeToReceive = await calcProtocolFee(pair23, factory); + + await token2.transfer(pair23.address, expandTo18Decimals(10)) + await token3.transfer(pair23.address, expandTo18Decimals(10)) + await pair23.mint(dxdao.address, overrides) + + const protocolFeeLPpair23 = await pair23.balanceOf(feeSplitter.address); + expect(protocolFeeLPpair23.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token2FromProtocolFee = protocolFeeLPpair23 + .mul(await token2.balanceOf(pair23.address)).div(await pair23.totalSupply()); + const token3FromProtocolFee = protocolFeeLPpair23 + .mul(await token3.balanceOf(pair23.address)).div(await pair23.totalSupply()); + + const protocolfeeSplitterBalance = await provider.getBalance(protocolfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair23.address], overrides) + + expect(await token2.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token3.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair23.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await token2.balanceOf(fallbackReceiver.address))) + .to.be.eq((token2FromProtocolFee)) + expect((await token3.balanceOf(fallbackReceiver.address))) + .to.be.eq((token3FromProtocolFee)) + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalance) + }) + + it( + 'should receive only tokens when extracting fee from both tokenA-tonkenB pair and tokenC-tokenD pair', + async () => { + const tokenAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(50); + + await token2.transfer(pair23.address, tokenAmount) + await token3.transfer(pair23.address, tokenAmount) + await pair23.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair23, token2.address, amountIn); + await token2.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? 0 : amountOut, + (token2.address < token3.address) ? amountOut : 0, + dxdao.address, '0x', overrides + ) + + amountOut = await getAmountOut(pair23, token3.address, amountIn); + await token3.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? amountOut : 0, + (token2.address < token3.address) ? 0 : amountOut, + dxdao.address, '0x', overrides + ) + + let protocolFeeToReceive = await calcProtocolFee(pair23, factory); + + await token2.transfer(pair23.address, expandTo18Decimals(10)) + await token3.transfer(pair23.address, expandTo18Decimals(10)) + await pair23.mint(dxdao.address, overrides) + + const protocolFeeLPpair23 = await pair23.balanceOf(feeSplitter.address); + expect(protocolFeeLPpair23.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + await token0.transfer(pair03.address, tokenAmount) + await token3.transfer(pair03.address, tokenAmount) + await pair03.mint(dxdao.address, overrides) + + amountOut = await getAmountOut(pair03, token0.address, amountIn); + await token0.transfer(pair03.address, amountIn) + await pair03.swap( + (token0.address < token3.address) ? 0 : amountOut, + (token0.address < token3.address) ? amountOut : 0, + dxdao.address, '0x', overrides + ) + + amountOut = await getAmountOut(pair03, token3.address, amountIn); + await token3.transfer(pair03.address, amountIn) + await pair03.swap( + (token0.address < token3.address) ? amountOut : 0, + (token0.address < token3.address) ? 0 : amountOut, + dxdao.address, '0x', overrides + ) + + protocolFeeToReceive = await calcProtocolFee(pair03, factory); + + await token0.transfer(pair03.address, expandTo18Decimals(10)) + await token3.transfer(pair03.address, expandTo18Decimals(10)) + await pair03.mint(dxdao.address, overrides) + + const protocolFeeLPPair03 = await pair03.balanceOf(feeSplitter.address); + expect(protocolFeeLPPair03.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token2FromPair23 = protocolFeeLPpair23 + .mul(await token2.balanceOf(pair23.address)).div(await pair23.totalSupply()); + const token3FromPair23 = protocolFeeLPpair23 + .mul(await token3.balanceOf(pair23.address)).div(await pair23.totalSupply()); + const token0FromPair03 = protocolFeeLPPair03 + .mul(await token0.balanceOf(pair03.address)).div(await pair03.totalSupply()); + const token3FromPair03 = protocolFeeLPPair03 + .mul(await token3.balanceOf(pair03.address)).div(await pair03.totalSupply()); + + const protocolfeeSplitterBalance = await provider.getBalance(protocolfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair23.address, pair03.address], overrides) + + expect(await provider.getBalance(protocolfeeSplitter.address)).to.eq(protocolfeeSplitterBalance.toString()) + + expect(await token2.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token3.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token3.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalance) + expect((await token0.balanceOf(fallbackReceiver.address))) + .to.be.eq(token0FromPair03) + expect((await token2.balanceOf(fallbackReceiver.address))) + .to.be.eq(token2FromPair23) + expect((await token3.balanceOf(fallbackReceiver.address))) + .to.be.eq(token3FromPair23.add(token3FromPair03)) + }) + + it( + 'should only allow owner to transfer ownership', + async () => { + await expect(feeSplitter.connect(other).transferOwnership(other.address, overrides)) + .to.be.revertedWith('DXswapFeeSplitter: FORBIDDEN') + await feeSplitter.connect(dxdao).transferOwnership(tokenOwner.address, overrides); + expect(await feeSplitter.owner()).to.be.eq(tokenOwner.address) + }) + + it( + 'should only allow owner to change receivers', + async () => { + await expect(feeSplitter.connect(other).changeReceivers(other.address, other.address, overrides)) + .to.be.revertedWith('DXswapFeeSplitter: FORBIDDEN') + await feeSplitter.connect(dxdao).changeReceivers(other.address, other.address, overrides); + expect(await feeSplitter.ethReceiver()).to.be.eq(other.address) + expect(await feeSplitter.fallbackReceiver()).to.be.eq(other.address) + }) + + it('should send tokens if there is not any liquidity in the WETH pair', async () => { + const tokenAmount = expandTo18Decimals(100) + const amountIn = expandTo18Decimals(50) + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn) + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn) + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory) + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address) + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)).to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)) + .div(await pair01.totalSupply()) + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)) + .div(await pair01.totalSupply()) + + const protocolfeeSplitterBalance = await provider.getBalance(protocolfeeSplitter.address) + + feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect(await provider.getBalance(protocolfeeSplitter.address)).to.be.eq(protocolfeeSplitterBalance) + expect(await token0.balanceOf(fallbackReceiver.address)).to.be.eq(token0FromProtocolFee) + expect(await token1.balanceOf(fallbackReceiver.address)).to.be.eq(token1FromProtocolFee) + }) + + // Where token0-token1 and token1-WETH pairs exist AND PRICE IMPACT TOO HIGH + it( + 'should receive token0 and token1 if price impact token1-weth pool is too high', + async () => { + const tokenAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(1); + // add very small liquidity to weth-token1 pool + const wethTknAmountLowLP = BigNumber.from(1).mul(BigNumber.from(10).pow(15)); + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + await token1.transfer(wethToken1Pair.address, wethTknAmountLowLP) + await WETH.transfer(wethToken1Pair.address, wethTknAmountLowLP) + await wethToken1Pair.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(15)) + await token1.transfer(pair01.address, expandTo18Decimals(15)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); + + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) + + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalanceBeforeTake) + expect((await token0.balanceOf(fallbackReceiver.address))) + .to.be.eq(token0FromProtocolFee) + expect((await token1.balanceOf(fallbackReceiver.address))) + .to.be.eq(token1FromProtocolFee) + }) + }) + + describe('external receiver on', () => { + it( + 'should send tokenA & tokenB default 100% fee to dxdao and 0% fee to external receiver', + async () => { + const tokenAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(50); + + await feeSplitter.setExternalFeeReceiver(pair23.address, externalfeeSplitter.address) + const [externalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair23.address) + expect(percentFeeToExternalReceiver).to.eq(0) + expect(externalReceiver).to.eq(externalfeeSplitter.address) + + + await token2.transfer(pair23.address, tokenAmount) + await token3.transfer(pair23.address, tokenAmount) + await pair23.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair23, token2.address, amountIn) + await token2.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? 0 : amountOut, + (token2.address < token3.address) ? amountOut : 0, + dxdao.address, '0x', overrides + ) + + amountOut = await getAmountOut(pair23, token3.address, amountIn) + await token3.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? amountOut : 0, + (token2.address < token3.address) ? 0 : amountOut, + dxdao.address, '0x', overrides + ) + + let protocolFeeToReceive = await calcProtocolFee(pair23, factory); + + await token2.transfer(pair23.address, expandTo18Decimals(10)) + await token3.transfer(pair23.address, expandTo18Decimals(10)) + await pair23.mint(dxdao.address, overrides) + + const protocolFeeLP = await pair23.balanceOf(feeSplitter.address); + expect(protocolFeeLP.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const tokenAFromProtocolFee = protocolFeeLP + .mul(await token2.balanceOf(pair23.address)).div(await pair23.totalSupply()); + const tokenBFromProtocolFee = protocolFeeLP + .mul(await token3.balanceOf(pair23.address)).div(await pair23.totalSupply()); + + const protocolfeeSplitterBalance = await provider.getBalance(protocolfeeSplitter.address) + + const balanceTkn2 = await token2.balanceOf(fallbackReceiver.address) + const balanceTkn3 = await token3.balanceOf(fallbackReceiver.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair23.address], overrides) + + expect(await provider.getBalance(protocolfeeSplitter.address)).to.eq(protocolfeeSplitterBalance.toString()) + + expect(await token2.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token3.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalance) + + expect((await token2.balanceOf(fallbackReceiver.address))) + .to.be.eq(balanceTkn2.add(tokenAFromProtocolFee)) + expect((await token2.balanceOf(externalfeeSplitter.address))) + .to.be.eq(0) + + expect((await token3.balanceOf(fallbackReceiver.address))) + .to.be.eq(balanceTkn3.add(tokenBFromProtocolFee)) + expect((await token3.balanceOf(externalfeeSplitter.address))) + .to.be.eq(0) + }) + + it( + 'should split protocol fee and send tokenA & tokenB to dxdao and external fee receiver', + async () => { + const tokenAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(50); + const newPercentFeeToExternalReceiver = 2000 //20% + + // set external fee receiver + await feeSplitter.setExternalFeeReceiver(pair23.address, externalfeeSplitter.address) + await feeSplitter.setFeePercentageToExternalReceiver(pair23.address, newPercentFeeToExternalReceiver) + const [newExternalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair23.address) + expect(percentFeeToExternalReceiver).to.eq(newPercentFeeToExternalReceiver) + expect(newExternalReceiver).to.eq(externalfeeSplitter.address) + + await token2.transfer(pair23.address, tokenAmount) + await token3.transfer(pair23.address, tokenAmount) + await pair23.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair23, token2.address, amountIn) + await token2.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? 0 : amountOut, + (token2.address < token3.address) ? amountOut : 0, + dxdao.address, '0x', overrides + ) + + amountOut = await getAmountOut(pair23, token3.address, amountIn) + await token3.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? amountOut : 0, + (token2.address < token3.address) ? 0 : amountOut, + dxdao.address, '0x', overrides + ) + + let protocolFeeToReceive = await calcProtocolFee(pair23, factory); + + await token2.transfer(pair23.address, expandTo18Decimals(10)) + await token3.transfer(pair23.address, expandTo18Decimals(10)) + await pair23.mint(dxdao.address, overrides) + + const protocolFeeLP = await pair23.balanceOf(feeSplitter.address); + expect(protocolFeeLP.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const tokenAFromProtocolFee = protocolFeeLP + .mul(await token2.balanceOf(pair23.address)).div(await pair23.totalSupply()); + const tokenBFromProtocolFee = protocolFeeLP + .mul(await token3.balanceOf(pair23.address)).div(await pair23.totalSupply()); + + const tokenAExternal = tokenAFromProtocolFee.mul(percentFeeToExternalReceiver).div(10000); + const tokenBExternal = tokenBFromProtocolFee.mul(percentFeeToExternalReceiver).div(10000); + const tokenAfeeSplitter = tokenAFromProtocolFee.sub(tokenAExternal); + const tokenBfeeSplitter = tokenBFromProtocolFee.sub(tokenBExternal); + + const protocolfeeSplitterBalance = await provider.getBalance(protocolfeeSplitter.address); + + await feeSplitter.connect(dxdao).takeProtocolFee([pair23.address], overrides) + + expect(await provider.getBalance(protocolfeeSplitter.address)).to.eq(protocolfeeSplitterBalance) + + expect(await token2.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token3.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalance) + + expect((await token2.balanceOf(fallbackReceiver.address))) + .to.be.eq(tokenAfeeSplitter) + expect((await token2.balanceOf(externalfeeSplitter.address))) + .to.be.eq(tokenAExternal) + expect((await token3.balanceOf(fallbackReceiver.address))) + .to.be.eq(tokenBfeeSplitter) + expect((await token3.balanceOf(externalfeeSplitter.address))) + .to.be.eq(tokenBExternal) + }) + + // Where token0-token1, token0-WETH and token1-WETH pairs exist + it( + 'should swap token0 & token1 to ETH and sent to ethReceiver when extracting fee from token0-token1', + async () => { + const tokenAmount = expandTo18Decimals(40); + const wethAmount = expandTo18Decimals(40); + const amountIn = expandTo18Decimals(4); + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + await token0.transfer(wethToken0Pair.address, tokenAmount) + await WETH.transfer(wethToken0Pair.address, wethAmount) + await wethToken0Pair.mint(dxdao.address, overrides) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(2)) + await token1.transfer(pair01.address, expandTo18Decimals(2)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); + + const wethFromToken0FromProtocolFee = await getAmountOut(wethToken0Pair, token0.address, token0FromProtocolFee); + const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); + + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) + + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await token0.balanceOf(protocolfeeSplitter.address))) + .to.eq(0) + expect((await token1.balanceOf(protocolfeeSplitter.address))) + .to.eq(0) + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalanceBeforeTake.add(wethFromToken0FromProtocolFee).add(wethFromToken1FromProtocolFee)) + }) + + // Where token0-token1, token0-WETH and token1-WETH pairs exist + it( + 'should receive token0 and ETH when extracting fee from token0-token1 and swap LPs exist but not enough liquidity', + async () => { + const tokenAmount = expandTo18Decimals(40); + const wethAmount = expandTo18Decimals(40); + const amountIn = expandTo18Decimals(4); + // add very small liquidity to weth-token0 pool + const wethTknAmountLowLP = BigNumber.from(1).mul(BigNumber.from(10).pow(6)); + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + await token0.transfer(wethToken0Pair.address, wethTknAmountLowLP) + await WETH.transfer(wethToken0Pair.address, wethTknAmountLowLP) + await wethToken0Pair.mint(dxdao.address, overrides) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); + + const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); + + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) + + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect(await token0.balanceOf(fallbackReceiver.address)) + .to.eq(token0FromProtocolFee) + expect(await token1.balanceOf(protocolfeeSplitter.address)) + .to.eq(0) + expect(await provider.getBalance(protocolfeeSplitter.address)) + .to.be.eq(protocolfeeSplitterBalanceBeforeTake.add(wethFromToken1FromProtocolFee)) + }) + + // Where token0-token1, token0-WETH and token1-WETH pairs exist + it( + 'should receive token0 and ETH when extracting fee from token0-token1 and swap LPs exist but token reserve is 0', + async () => { + const tokenAmount = expandTo18Decimals(40); + const wethAmount = expandTo18Decimals(40); + const amountIn = expandTo18Decimals(4); + // add very small liquidity to weth-token0 pool + const wethTknAmountLowLP = BigNumber.from(1).mul(BigNumber.from(10).pow(6)); + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + // dont transfer token0 to the pool and dont mint lp tokens + await WETH.transfer(wethToken0Pair.address, wethTknAmountLowLP) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); + + const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); + + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) + + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await token0.balanceOf(fallbackReceiver.address))) + .to.eq(token0FromProtocolFee) + expect((await token1.balanceOf(protocolfeeSplitter.address))) + .to.eq(0) + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalanceBeforeTake.add(wethFromToken1FromProtocolFee)) + }) + + // Where token0-token1, token0-WETH and token1-WETH pairs exist + it( + 'should swap tkn0 & tkn1 to ETH and split fee when extracting from tkn0-tkn1', + async () => { + const tokenAmount = expandTo18Decimals(40); + const wethAmount = expandTo18Decimals(40); + const amountIn = expandTo18Decimals(4); + const newPercentFeeToExternalReceiver = 2000 //20% + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + // set external fee receiver + await feeSplitter.setExternalFeeReceiver(pair01.address, externalfeeSplitter.address) + await feeSplitter.setFeePercentageToExternalReceiver(pair01.address, newPercentFeeToExternalReceiver) + const [externalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair01.address) + expect(percentFeeToExternalReceiver).to.eq(newPercentFeeToExternalReceiver) + expect(externalReceiver).to.eq(externalfeeSplitter.address) + + await token0.transfer(wethToken0Pair.address, tokenAmount) + await WETH.transfer(wethToken0Pair.address, wethAmount) + await wethToken0Pair.mint(dxdao.address, overrides) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); + + const wethFromToken0FromProtocolFee = await getAmountOut(wethToken0Pair, token0.address, token0FromProtocolFee); + const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); + + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + const externalfeeSplitterBalanceBeforeTake = await provider.getBalance(externalfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) + + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await token0.balanceOf(protocolfeeSplitter.address))) + .to.eq(0) + expect((await token1.balanceOf(protocolfeeSplitter.address))) + .to.eq(0) + expect((await token0.balanceOf(externalfeeSplitter.address))) + .to.eq(0) + expect((await token1.balanceOf(externalfeeSplitter.address))) + .to.eq(0) + + const totalWethFromFees = wethFromToken0FromProtocolFee.add(wethFromToken1FromProtocolFee) + const wethToExternalReceiver = totalWethFromFees.mul(percentFeeToExternalReceiver).div(10000) + const wethToProtocolfeeSplitter = totalWethFromFees.sub(wethToExternalReceiver) + + expect((await provider.getBalance(protocolfeeSplitter.address)).div(ROUND_EXCEPTION)) + .to.be.eq((protocolfeeSplitterBalanceBeforeTake.add(wethToProtocolfeeSplitter)).div(ROUND_EXCEPTION)) + expect((await provider.getBalance(externalfeeSplitter.address)).div(ROUND_EXCEPTION)) + .to.be.eq((externalfeeSplitterBalanceBeforeTake.add(wethToExternalReceiver)).div(ROUND_EXCEPTION)) + }) + + // Where token0-token1, token0-WETH and token1-WETH pairs exist + it( + 'should split tkn0 & tkn1 fee when extracting from tkn0-tkn1 and swap to weth impossible', + async () => { + const tokenAmount = expandTo18Decimals(40); + const wethAmount = expandTo18Decimals(40); + const amountIn = expandTo18Decimals(4); + const newPercentFeeToExternalReceiver = 2000 //20% + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + // set external fee receiver + await feeSplitter.setExternalFeeReceiver(pair01.address, externalfeeSplitter.address) + await feeSplitter.setFeePercentageToExternalReceiver(pair01.address, newPercentFeeToExternalReceiver) + const [externalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair01.address) + expect(percentFeeToExternalReceiver).to.eq(newPercentFeeToExternalReceiver) + expect(externalReceiver).to.eq(externalfeeSplitter.address) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); + + const receiverBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + const externalfeeSplitterBalanceBeforeTake = await provider.getBalance(externalfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) + + const tkn0ToExternalReceiver = token0FromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) + const tkn1ToExternalReceiver = token1FromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) + const tkn0ToProtocolfeeSplitter = token0FromProtocolFee.sub(tkn0ToExternalReceiver) + const tkn1ToProtocolfeeSplitter = token1FromProtocolFee.sub(tkn1ToExternalReceiver) + + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + // send token0 and token1 to fallbackreceiver and external fee receiver + expect((await token0.balanceOf(fallbackReceiver.address))) + .to.eq(tkn0ToProtocolfeeSplitter) + expect((await token1.balanceOf(fallbackReceiver.address))) + .to.eq(tkn1ToProtocolfeeSplitter) + expect((await token0.balanceOf(externalfeeSplitter.address))) + .to.eq(tkn0ToExternalReceiver) + expect((await token1.balanceOf(externalfeeSplitter.address))) + .to.eq(tkn1ToExternalReceiver) + + // should not change eth balance + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.eq(receiverBalanceBeforeTake) + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.eq(protocolfeeSplitterBalanceBeforeTake) + expect((await provider.getBalance(externalfeeSplitter.address))) + .to.eq(externalfeeSplitterBalanceBeforeTake) + }) + + // Where token0-token1, token0-WETH and token1-WETH pairs exist + it( + 'should update protocol fee and split tkn0 & tkn1 fee when extracting from tkn0-tkn1 and swap to weth impossible', + async () => { + const tokenAmount = expandTo18Decimals(40); + const wethAmount = expandTo18Decimals(40); + const amountIn = expandTo18Decimals(4); + const newPercentFeeToExternalReceiver = 2000 //20% + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + // set external fee receiver + await feeSplitter.setExternalFeeReceiver(pair01.address, externalfeeSplitter.address) + await feeSplitter.setFeePercentageToExternalReceiver(pair01.address, newPercentFeeToExternalReceiver) + const [externalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair01.address) + expect(percentFeeToExternalReceiver).to.eq(newPercentFeeToExternalReceiver) + expect(externalReceiver).to.eq(externalfeeSplitter.address) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + // change protocol fee + await feeSetter.connect(dxdao).setProtocolFee(20) + expect(await factory.protocolFeeDenominator()).to.eq(20) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); + + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + const externalfeeSplitterBalanceBeforeTake = await provider.getBalance(externalfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair01.address], overrides) + + const tkn0ToExternalReceiver = token0FromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) + const tkn1ToExternalReceiver = token1FromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) + const tkn0ToProtocolfeeSplitter = token0FromProtocolFee.sub(tkn0ToExternalReceiver) + const tkn1ToProtocolfeeSplitter = token1FromProtocolFee.sub(tkn1ToExternalReceiver) + + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + // send token0 and token1 to fallbackreceiver and external fee receiver + expect((await token0.balanceOf(fallbackReceiver.address))) + .to.eq(tkn0ToProtocolfeeSplitter) + expect((await token1.balanceOf(fallbackReceiver.address))) + .to.eq(tkn1ToProtocolfeeSplitter) + expect((await token0.balanceOf(externalfeeSplitter.address))) + .to.eq(tkn0ToExternalReceiver) + expect((await token1.balanceOf(externalfeeSplitter.address))) + .to.eq(tkn1ToExternalReceiver) + + // should not change eth balance + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.eq(protocolfeeSplitterBalanceBeforeTake) + expect((await provider.getBalance(externalfeeSplitter.address))) + .to.eq(externalfeeSplitterBalanceBeforeTake) + }) + + // Where tokenA-tokenB, tokenC-tokenD and tokenC-WETH pairs exist + it( + 'should receive tokens 2,3 and ETH (token0 swapped) from pair 23, 03', + async () => { + const tokenAmount = expandTo18Decimals(100); + const wethAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(50); + + await token0.transfer(wethToken0Pair.address, tokenAmount) + await WETH.transfer(wethToken0Pair.address, wethAmount) + await wethToken0Pair.mint(dxdao.address, overrides) + + // pair23 + await token2.transfer(pair23.address, tokenAmount) + await token3.transfer(pair23.address, tokenAmount) + await pair23.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair23, token2.address, amountIn) + await token2.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? 0 : amountOut, + (token2.address < token3.address) ? amountOut : 0, + dxdao.address, '0x', overrides + ) + + amountOut = await getAmountOut(pair23, token3.address, amountIn) + await token3.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? amountOut : 0, + (token2.address < token3.address) ? 0 : amountOut, + dxdao.address, '0x', overrides + ) + + let protocolFeeToReceive = await calcProtocolFee(pair23, factory); + + await token2.transfer(pair23.address, expandTo18Decimals(10)) + await token3.transfer(pair23.address, expandTo18Decimals(10)) + await pair23.mint(dxdao.address, overrides) + + const protocolFeeLPPair23 = await pair23.balanceOf(feeSplitter.address); + expect(protocolFeeLPPair23.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + // pair03 + await token0.transfer(pair03.address, tokenAmount) + await token3.transfer(pair03.address, tokenAmount) + await pair03.mint(dxdao.address, overrides) + + amountOut = await getAmountOut(pair03, token2.address, amountIn) + await token0.transfer(pair03.address, amountIn) + await pair03.swap( + (token0.address < token3.address) ? 0 : amountOut, + (token0.address < token3.address) ? amountOut : 0, + dxdao.address, '0x', overrides + ) + + amountOut = await getAmountOut(pair03, token3.address, amountIn) + await token3.transfer(pair03.address, amountIn) + await pair03.swap( + (token0.address < token3.address) ? amountOut : 0, + (token0.address < token3.address) ? 0 : amountOut, + dxdao.address, '0x', overrides + ) + + protocolFeeToReceive = await calcProtocolFee(pair03, factory); + + await token0.transfer(pair03.address, expandTo18Decimals(10)) + await token3.transfer(pair03.address, expandTo18Decimals(10)) + await pair03.mint(dxdao.address, overrides) + + const protocolFeeLPPair03 = await pair03.balanceOf(feeSplitter.address); + expect(protocolFeeLPPair03.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const tokenAFromProtocolFee = protocolFeeLPPair23 + .mul(await token2.balanceOf(pair23.address)).div(await pair23.totalSupply()); + const tokenBFromProtocolFee = protocolFeeLPPair23 + .mul(await token3.balanceOf(pair23.address)).div(await pair23.totalSupply()); + const tokenCFromProtocolFee = protocolFeeLPPair03 + .mul(await token0.balanceOf(pair03.address)).div(await pair03.totalSupply()); + const tokenDFromProtocolFee = protocolFeeLPPair03 + .mul(await token3.balanceOf(pair03.address)).div(await pair03.totalSupply()); + + const wethFromToken0FromProtocolFee = await getAmountOut(wethToken0Pair, token0.address, tokenCFromProtocolFee); + const protocolfeeSplitterBalance = await provider.getBalance(protocolfeeSplitter.address) + + await expect(feeSplitter.connect(dxdao).takeProtocolFee([pair23.address, pair03.address], overrides) + ).to.emit(feeSplitter, 'TakeProtocolFee').withArgs(dxdao.address, protocolfeeSplitter.address, 2) + + expect(await token2.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token3.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await token2.balanceOf(fallbackReceiver.address))) + .to.be.eq(tokenAFromProtocolFee) + expect((await token3.balanceOf(fallbackReceiver.address))) + .to.be.eq(tokenBFromProtocolFee.add(tokenDFromProtocolFee)) + + expect((await token0.balanceOf(fallbackReceiver.address))) + .to.eq(0) + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalance.add(wethFromToken0FromProtocolFee)) + }) + + it( + 'should receive tkn0 and eth if split % was updated', + async () => { + const tokenAmount = expandTo18Decimals(40); + const wethAmount = expandTo18Decimals(40); + const amountIn = expandTo18Decimals(4); + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); + + const wethFromToken1FromProtocolFee = await getAmountOut(wethToken1Pair, token1.address, token1FromProtocolFee); + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + + // set external fee receiver + await feeSplitter.setExternalFeeReceiver(pair01.address, externalfeeSplitter.address) + await feeSplitter.setFeePercentageToExternalReceiver(pair01.address, 2000) + const [externalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair01.address) + expect(percentFeeToExternalReceiver).to.eq(2000) + expect(externalReceiver).to.eq(externalfeeSplitter.address) + + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect((await token0.balanceOf(fallbackReceiver.address))) + .to.be.eq(token0FromProtocolFee) + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalanceBeforeTake.add(wethFromToken1FromProtocolFee)) + }) + + // Where weth pairs don't exist + it( + 'should split and receive only tokens when extracting fee from tokenA-tokenB pair that has no path to WETH', + async () => { + const tokenAmount = expandTo18Decimals(100); + const amountIn = expandTo18Decimals(50); + + // set external fee receiver + await feeSplitter.setExternalFeeReceiver(pair23.address, externalfeeSplitter.address) + await feeSplitter.setFeePercentageToExternalReceiver(pair23.address, 1000) + + const [externalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair23.address) + expect(externalReceiver).to.eq(externalfeeSplitter.address) + expect(percentFeeToExternalReceiver).to.eq(1000) + + await token2.transfer(pair23.address, tokenAmount) + await token3.transfer(pair23.address, tokenAmount) + await pair23.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair23, token2.address, amountIn); + await token2.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? 0 : amountOut, + (token2.address < token3.address) ? amountOut : 0, + dxdao.address, '0x', overrides + ) + + amountOut = await getAmountOut(pair23, token3.address, amountIn); + await token3.transfer(pair23.address, amountIn) + await pair23.swap( + (token2.address < token3.address) ? amountOut : 0, + (token2.address < token3.address) ? 0 : amountOut, + dxdao.address, '0x', overrides + ) + + const protocolFeeToReceive = await calcProtocolFee(pair23, factory); + + await token2.transfer(pair23.address, expandTo18Decimals(10)) + await token3.transfer(pair23.address, expandTo18Decimals(10)) + await pair23.mint(dxdao.address, overrides) + + const protocolFeeLP = await pair23.balanceOf(feeSplitter.address); + expect(protocolFeeLP.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + const tokenAFromProtocolFee = protocolFeeLP + .mul(await token2.balanceOf(pair23.address)).div(await pair23.totalSupply()); + const tokenBFromProtocolFee = protocolFeeLP + .mul(await token3.balanceOf(pair23.address)).div(await pair23.totalSupply()); + + const protocolfeeSplitterBalance = await provider.getBalance(protocolfeeSplitter.address) + const externalBalance = await provider.getBalance(externalfeeSplitter.address) + + await feeSplitter.connect(dxdao).takeProtocolFee([pair23.address], overrides) + + const tknAExternalReceiver = tokenAFromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) + const tknBExternalReceiver = tokenBFromProtocolFee.mul(percentFeeToExternalReceiver).div(10000) + const tknAProtocolfeeSplitter = tokenAFromProtocolFee.sub(tknAExternalReceiver) + const tknBProtocolfeeSplitter = tokenBFromProtocolFee.sub(tknBExternalReceiver) + + expect(await token2.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token3.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair23.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + expect(await provider.getBalance(protocolfeeSplitter.address)) + .to.be.eq(protocolfeeSplitterBalance) + expect(await provider.getBalance(externalfeeSplitter.address)) + .to.be.eq(externalBalance) + expect(await token2.balanceOf(fallbackReceiver.address)) + .to.be.eq(tknAProtocolfeeSplitter) + expect(await token3.balanceOf(fallbackReceiver.address)) + .to.be.eq(tknBProtocolfeeSplitter) + expect(await token2.balanceOf(externalfeeSplitter.address)) + .to.be.eq(tknAExternalReceiver) + expect(await token3.balanceOf(externalfeeSplitter.address)) + .to.be.eq(tknBExternalReceiver) + }) + + // Where token0-token1, token0-WETH and token1-WETH pairs exist + it( + 'should swap tokens, split and sent to ethReceiver when extracting fee from token0-token1', + async () => { + const tokenAmount = expandTo18Decimals(40); + const wethAmount = expandTo18Decimals(40); + const amountIn = expandTo18Decimals(4); + + // set external fee receiver + await feeSplitter.setExternalFeeReceiver(pair01.address, externalfeeSplitter.address) + await feeSplitter.setFeePercentageToExternalReceiver(pair01.address, 3000) + + const [externalReceiver, percentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair01.address) + expect(externalReceiver).to.eq(externalfeeSplitter.address) + expect(percentFeeToExternalReceiver).to.eq(3000) + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + await token0.transfer(wethToken0Pair.address, tokenAmount) + await WETH.transfer(wethToken0Pair.address, wethAmount) + await wethToken0Pair.mint(dxdao.address, overrides) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(pair01, token1.address, amountIn); + await token1.transfer(pair01.address, amountIn) + await pair01.swap(amountOut, 0, dxdao.address, '0x', overrides) + + // estimate protocol fee received + const protocolFeeToReceive = await calcProtocolFee(pair01, factory); + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + const protocolFeeLPToknesReceived = await pair01.balanceOf(feeSplitter.address); + expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) + .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) + + // calculate tkn0 & tkn1 amount based on LP + const token0FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token0.balanceOf(pair01.address)).div(await pair01.totalSupply()); + const token1FromProtocolFee = protocolFeeLPToknesReceived + .mul(await token1.balanceOf(pair01.address)).div(await pair01.totalSupply()); + + const dxdaoBalanceBeforeTake = await provider.getBalance(dxdao.address) + const protocolfeeSplitterBalanceBeforeTake = await provider.getBalance(protocolfeeSplitter.address) + const externalfeeSplitterBalanceBeforeTake = await provider.getBalance(externalfeeSplitter.address) + + // estimate weth from tokens + const wethFromToken0 = await getAmountOut(wethToken0Pair, token0.address, token0FromProtocolFee); + const wethFromToken1 = await getAmountOut(wethToken1Pair, token0.address, token1FromProtocolFee); + + // set external fee receiver + await feeSplitter.setFeePercentageToExternalReceiver(pair01.address, 2000) + const [newExternalReceiver, newPercentFeeToExternalReceiver] = await feeSplitter.externalFeeReceivers(pair01.address) + expect(newExternalReceiver).to.eq(externalfeeSplitter.address) + expect(newPercentFeeToExternalReceiver).to.eq(2000) + + // split weth to avatar and external Receiver with OLD fee percentage + const wethTkn0ToExternalReceiver = wethFromToken0.mul(percentFeeToExternalReceiver).div(10000) + const wethTkn1ToExternalReceiver = wethFromToken1.mul(percentFeeToExternalReceiver).div(10000) + const tkn0ToProtocolfeeSplitter = wethFromToken0.sub(wethTkn0ToExternalReceiver) + const tkn1ToProtocolfeeSplitter = wethFromToken1.sub(wethTkn1ToExternalReceiver) + + // weth to external Receiver after token-weth swap + const wethExternal = wethTkn0ToExternalReceiver.add(wethTkn1ToExternalReceiver) + + // weth to dao after token-weth swap + const wethfeeSplitter = tkn0ToProtocolfeeSplitter.add(tkn1ToProtocolfeeSplitter) + + expect(await token0.balanceOf(feeSplitter.address)).to.eq(0) + expect(await token1.balanceOf(feeSplitter.address)).to.eq(0) + expect(await WETH.balanceOf(feeSplitter.address)).to.eq(0) + expect(await pair01.balanceOf(feeSplitter.address)).to.eq(0) + expect(await provider.getBalance(feeSplitter.address)).to.eq(0) + + // dont send token0 and token1 to fallbackreceiver and external fee receiver + expect((await token0.balanceOf(fallbackReceiver.address))) + .to.eq(0) + expect((await token1.balanceOf(fallbackReceiver.address))) + .to.eq(0) + expect((await token0.balanceOf(externalfeeSplitter.address))) + .to.eq(0) + expect((await token1.balanceOf(externalfeeSplitter.address))) + .to.eq(0) + + // should change eth balance for avatar and external Receiver + expect((await provider.getBalance(protocolfeeSplitter.address))) + .to.be.eq(protocolfeeSplitterBalanceBeforeTake.add(wethfeeSplitter)) + expect((await provider.getBalance(externalfeeSplitter.address))) + .to.be.eq(externalfeeSplitterBalanceBeforeTake.add(wethExternal)) + + // should not send eth to avatar (gas used for updating split %) + expect((await provider.getBalance(dxdao.address))) + .to.be.lte(dxdaoBalanceBeforeTake) + }) + + // Where token0-token1 and token1-WETH pairs exist + it( + 'should emit TakeProtocolFee event', + async () => { + const tokenAmount = expandTo18Decimals(40); + const wethAmount = expandTo18Decimals(40); + const amountIn = expandTo18Decimals(4); + + await token0.transfer(pair01.address, tokenAmount) + await token1.transfer(pair01.address, tokenAmount) + await pair01.mint(dxdao.address, overrides) + + await token1.transfer(wethToken1Pair.address, tokenAmount) + await WETH.transfer(wethToken1Pair.address, wethAmount) + await wethToken1Pair.mint(dxdao.address, overrides) + + let amountOut = await getAmountOut(pair01, token0.address, amountIn); + await token0.transfer(pair01.address, amountIn) + await pair01.swap(0, amountOut, dxdao.address, '0x', overrides) + + amountOut = await getAmountOut(wethToken1Pair, token1.address, amountIn); + await token1.transfer(wethToken1Pair.address, amountIn) + await wethToken1Pair.swap(0, amountOut, dxdao.address, '0x', overrides) + + await token0.transfer(pair01.address, expandTo18Decimals(10)) + await token1.transfer(pair01.address, expandTo18Decimals(10)) + await pair01.mint(dxdao.address, overrides) + + await token1.transfer(wethToken1Pair.address, expandTo18Decimals(10)) + await WETH.transfer(wethToken1Pair.address, expandTo18Decimals(10)) + await wethToken1Pair.mint(dxdao.address, overrides) + + await expect(feeSplitter.connect(dxdao).takeProtocolFee([pair01.address, wethToken1Pair.address], overrides) + ).to.emit(feeSplitter, 'TakeProtocolFee').withArgs(dxdao.address, protocolfeeSplitter.address, 2) + }) + }) +}) diff --git a/test/shared/fixtures.ts b/test/shared/fixtures.ts index 29fb56bf0..11908702b 100644 --- a/test/shared/fixtures.ts +++ b/test/shared/fixtures.ts @@ -3,6 +3,8 @@ import { DXswapFactory, DXswapFactory__factory, DXswapPair, DXswapPair__factory, import { defaultAbiCoder } from 'ethers/lib/utils'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { JsonRpcProvider } from '@ethersproject/providers'; +import { DXswapFeeSplitter } from '../../typechain/DXswapFeeSplitter'; +import { DXswapFeeSplitter__factory } from '../../typechain/factories/DXswapFeeSplitter__factory'; const overrides = { @@ -14,6 +16,7 @@ interface FactoryFixture { dxswapFactory: DXswapFactory feeSetter: DXswapFeeSetter feeReceiver: DXswapFeeReceiver + feeSplitter: DXswapFeeSplitter WETH: WETH9 } @@ -41,7 +44,10 @@ export async function factoryFixture(provider: JsonRpcProvider, [dxdao, protocol const feeReceiverAddress = await dxswapFactory.feeTo() const feeReceiver = (await new DXswapFeeReceiver__factory(dxdao).deploy(dxdao.address, dxswapFactory.address, WETH.address, protocolFeeReceiver.address, fallbackReceiver.address)).attach(feeReceiverAddress) - return { dxswapFactory, feeSetter, feeReceiver, WETH } + // deplot FeeSplitter + const feeSplitter = await new DXswapFeeSplitter__factory(dxdao).deploy(dxdao.address, dxswapFactory.address, WETH.address, protocolFeeReceiver.address, fallbackReceiver.address) + + return { dxswapFactory, feeSetter, feeReceiver, feeSplitter, WETH } } interface PairFixture extends FactoryFixture { @@ -101,6 +107,11 @@ export async function pairFixture(provider: JsonRpcProvider, [dxdao, protocolFee // set receivers feeReceiver.connect(dxdao).changeReceivers(protocolFeeReceiver.address, fallbackReceiver.address) + //deploy FeeSplitter + const feeSplitter = await new DXswapFeeSplitter__factory(dxdao).deploy(dxdao.address, dxswapFactory.address, WETH.address, protocolFeeReceiver.address, fallbackReceiver.address) + // set receivers + feeSplitter.connect(dxdao).changeReceivers(protocolFeeReceiver.address, fallbackReceiver.address) + // initialize DXswapPair factory const dxSwapPair_factory = await new DXswapPair__factory(dxdao).deploy() @@ -124,5 +135,5 @@ export async function pairFixture(provider: JsonRpcProvider, [dxdao, protocolFee const WETH0PairAddress = await dxswapFactory.getPair(token0.address, WETH.address) const wethToken0Pair = dxSwapPair_factory.attach(WETH0PairAddress) - return { dxswapFactory, feeSetter, feeReceiver, WETH, token0, token1, token2, token3, dxswapPair01, dxswapPair23, dxswapPair03, wethToken1Pair, wethToken0Pair } + return { dxswapFactory, feeSetter, feeReceiver, feeSplitter, WETH, token0, token1, token2, token3, dxswapPair01, dxswapPair23, dxswapPair03, wethToken1Pair, wethToken0Pair } } From ad1ca781488b69499164877f9b8e43d1d6a7432a Mon Sep 17 00:00:00 2001 From: karczu Date: Tue, 30 Aug 2022 16:49:47 +0200 Subject: [PATCH 07/11] refactor after cr: rename & remove reduntant checks --- contracts/DXswapFeeReceiver.sol | 73 +++++++++++++++++---------------- 1 file changed, 37 insertions(+), 36 deletions(-) diff --git a/contracts/DXswapFeeReceiver.sol b/contracts/DXswapFeeReceiver.sol index daf66f7b3..df2916d7d 100644 --- a/contracts/DXswapFeeReceiver.sol +++ b/contracts/DXswapFeeReceiver.sol @@ -8,35 +8,35 @@ import './libraries/SafeMath.sol'; contract DXswapFeeReceiver { using SafeMath for uint256; - - address public owner; IDXswapFactory public factory; - address public WETH; + + uint16 public maxSwapPriceImpact = 100; // uses default 1% as max allowed price impact for takeProtocolFee swap address public ethReceiver; address public fallbackReceiver; - uint32 public maxSwapPriceImpact = 100; // uses default 1% as max allowed price impact for takeProtocolFee swap + address public owner; + address public nativeCurrencyWrapper; // if needed set address of external project which can get % of total earned protocol fee // % of total protocol fee to external project (100 means 1%) is within the range <0, 50> struct ExternalFeeReceiver { address externalReceiver; - uint32 feePercentage; + uint16 feePercentage; } mapping(address => ExternalFeeReceiver) public externalFeeReceivers; - event TakeProtocolFee(address indexed sender, address indexed to, uint256 NumberOfPairs); + event TakeProtocolFee(address indexed sender, address indexed to, uint256 numberOfPairs); constructor( address _owner, address _factory, - address _WETH, + address _nativeCurrencyWrapper, address _ethReceiver, address _fallbackReceiver ) public { owner = _owner; factory = IDXswapFactory(_factory); - WETH = _WETH; + nativeCurrencyWrapper = _nativeCurrencyWrapper; ethReceiver = _ethReceiver; fallbackReceiver = _fallbackReceiver; } @@ -93,25 +93,25 @@ contract DXswapFeeReceiver { // Done with code form DXswapRouter and DXswapLibrary, removed the deadline argument function _swapTokensForETH(uint256 amountIn, address fromToken) internal returns (uint256 amountOut) { - IDXswapPair pairToUse = IDXswapPair(pairFor(fromToken, WETH)); + IDXswapPair pairToUse = IDXswapPair(pairFor(fromToken, nativeCurrencyWrapper)); (uint256 reserve0, uint256 reserve1, ) = pairToUse.getReserves(); - (uint256 reserveIn, uint256 reserveOut) = fromToken < WETH ? (reserve0, reserve1) : (reserve1, reserve0); + (uint256 reserveIn, uint256 reserveOut) = fromToken < nativeCurrencyWrapper ? (reserve0, reserve1) : (reserve1, reserve0); - require(reserveIn > 0 && reserveOut > 0, 'DXswapFeeReceiver: INSUFFICIENT_LIQUIDITY'); // should never happen since pool was checked before - uint256 amountInWithFee = amountIn.mul(uint256(10000).sub(pairToUse.swapFee())); - uint256 numerator = amountInWithFee.mul(reserveOut); - uint256 denominator = reserveIn.mul(10000).add(amountInWithFee); + require(reserveIn > 0 && reserveOut > 0, 'DXswapFeeSplitter: INSUFFICIENT_LIQUIDITY'); // should never happen since pool was checked before + uint256 amountInWithFee = amountIn * (10000 - pairToUse.swapFee()); + uint256 numerator = amountInWithFee * reserveOut; + uint256 denominator = reserveIn * 10000 + amountInWithFee; amountOut = numerator / denominator; TransferHelper.safeTransfer(fromToken, address(pairToUse), amountIn); - (uint256 amount0Out, uint256 amount1Out) = fromToken < WETH ? (uint256(0), amountOut) : (amountOut, uint256(0)); + (uint256 amount0Out, uint256 amount1Out) = fromToken < nativeCurrencyWrapper ? (uint256(0), amountOut) : (amountOut, uint256(0)); pairToUse.swap(amount0Out, amount1Out, address(this), new bytes(0)); } - // Helper function to know if token-WETH pool exists and has enough liquidity + // Helper function to know if token-nativeCurrencyWrapper pool exists and has enough liquidity function _isSwapPossible( address token0, address token1, @@ -124,7 +124,7 @@ contract DXswapFeeReceiver { (uint256 reserveIn, uint256 reserveOut) = token0 < token1 ? (reserve0, reserve1) : (reserve1, reserve0); if (reserveIn == 0 || reserveOut == 0) return false; - uint256 priceImpact = amount.mul(10000) / reserveIn; // simplified formula + uint256 priceImpact = amount * 10000 / reserveIn; // simplified formula if (priceImpact > maxSwapPriceImpact) return false; return true; @@ -141,10 +141,10 @@ contract DXswapFeeReceiver { uint32 _percentFeeToExternalReceiver = externalFeeReceivers[pair].feePercentage; if (_percentFeeToExternalReceiver > 0 && _externalFeeReceiver != address(0)) { - uint256 feeToExternalReceiver = amount.mul(_percentFeeToExternalReceiver) / 10000; - uint256 feeToAvatarDAO = amount.sub(feeToExternalReceiver); - if (token == WETH) { - IWETH(WETH).withdraw(amount); + uint256 feeToExternalReceiver = amount * _percentFeeToExternalReceiver / 10000; + uint256 feeToAvatarDAO = amount - feeToExternalReceiver; + if (token == nativeCurrencyWrapper) { + IWETH(nativeCurrencyWrapper).withdraw(amount); TransferHelper.safeTransferETH(_externalFeeReceiver, feeToExternalReceiver); TransferHelper.safeTransferETH(ethReceiver, feeToAvatarDAO); } else { @@ -152,8 +152,8 @@ contract DXswapFeeReceiver { TransferHelper.safeTransfer(token, fallbackReceiver, feeToAvatarDAO); } } else { - if (token == WETH) { - IWETH(WETH).withdraw(amount); + if (token == nativeCurrencyWrapper) { + IWETH(nativeCurrencyWrapper).withdraw(amount); TransferHelper.safeTransferETH(ethReceiver, amount); } else { TransferHelper.safeTransfer(token, fallbackReceiver, amount); @@ -167,12 +167,12 @@ contract DXswapFeeReceiver { address token, uint256 amount ) internal { - if (token != WETH && _isSwapPossible(token, WETH, amount)) { - // If it is not WETH and there is a direct path to WETH, swap tokens + if (token != nativeCurrencyWrapper && _isSwapPossible(token, nativeCurrencyWrapper, amount)) { + // If it is not nativeCurrencyWrapper and there is a direct path to nativeCurrencyWrapper, swap tokens uint256 amountOut = _swapTokensForETH(amount, token); - _splitAndTransferFee(pair, WETH, amountOut); + _splitAndTransferFee(pair, nativeCurrencyWrapper, amountOut); } else { - // If it is WETH or there is not a direct path from token to WETH, transfer tokens + // If it is nativeCurrencyWrapper or there is not a direct path from token to nativeCurrencyWrapper, transfer tokens _splitAndTransferFee(pair, token, amount); } } @@ -190,8 +190,9 @@ contract DXswapFeeReceiver { emit TakeProtocolFee(msg.sender, ethReceiver, pairs.length); } - // called by the owner to set maximum swap price impact allowed for single token-weth swap (within 0-100% range) - function setMaxSwapPriceImpact(uint32 _maxSwapPriceImpact) external { + // called by the owner to set maximum swap price impact allowed for single swap + // 0-100% range where 100 is 1% + function setMaxSwapPriceImpact(uint16 _maxSwapPriceImpact) external { require(msg.sender == owner, 'DXswapFeeReceiver: CALLER_NOT_OWNER'); require(_maxSwapPriceImpact > 0 && _maxSwapPriceImpact < 10000, 'DXswapFeeReceiver: FORBIDDEN_PRICE_IMPACT'); maxSwapPriceImpact = _maxSwapPriceImpact; @@ -204,8 +205,14 @@ contract DXswapFeeReceiver { } // called by the owner to set fee percentage to external receiver - function setFeePercentageToExternalReceiver(address _pair, uint32 _feePercentageToExternalReceiver) external { + function setFeePercentageToExternalReceiver(address _pair, uint16 _feePercentageToExternalReceiver) external { require(msg.sender == owner, 'DXswapFeeReceiver: CALLER_NOT_OWNER'); + // fee percentage check if is not more than 50% + require( + _feePercentageToExternalReceiver <= 5000, + 'DXswapFeeReceiver: FORBIDDEN_FEE_PERCENTAGE_SPLIT' + ); + IDXswapPair swapPair = IDXswapPair(_pair); uint256 feeReceiverBalance = swapPair.balanceOf(address(this)); if (feeReceiverBalance > 0) { @@ -218,13 +225,7 @@ contract DXswapFeeReceiver { if (amount1 > 0) _takeTokenOrETH(address(swapPair), token1, amount1); emit TakeProtocolFee(msg.sender, ethReceiver, 1); } - require(swapPair.balanceOf(address(this)) == 0, 'DXswapFeeReceiver: TOKENS_NOT_BURNED'); - // fee percentage check - require( - _feePercentageToExternalReceiver >= 0 && _feePercentageToExternalReceiver <= 5000, - 'DXswapFeeReceiver: FORBIDDEN_FEE_PERCENTAGE_SPLIT' - ); // update the split percentage for specific pair externalFeeReceivers[_pair].feePercentage = _feePercentageToExternalReceiver; } From 8dff1650d0f35ec6874f9c8f4caf635fe04c622f Mon Sep 17 00:00:00 2001 From: karczu Date: Thu, 1 Sep 2022 12:12:22 +0200 Subject: [PATCH 08/11] refactor: remove isContract & pairFor internal functions and replace by calling factory --- contracts/DXswapFeeSplitter.sol | 189 +++++++++++++++++++------------- 1 file changed, 114 insertions(+), 75 deletions(-) diff --git a/contracts/DXswapFeeSplitter.sol b/contracts/DXswapFeeSplitter.sol index 62e9297a3..2f35e14ce 100644 --- a/contracts/DXswapFeeSplitter.sol +++ b/contracts/DXswapFeeSplitter.sol @@ -1,9 +1,9 @@ pragma solidity =0.8.15; -import './interfaces/IDXswapFactory.sol'; -import './interfaces/IDXswapPair.sol'; -import './interfaces/IWETH.sol'; -import './libraries/TransferHelperV2.sol'; +import "./interfaces/IDXswapFactory.sol"; +import "./interfaces/IDXswapPair.sol"; +import "./interfaces/IWETH.sol"; +import "./libraries/TransferHelperV2.sol"; contract DXswapFeeSplitter { address public owner; @@ -22,7 +22,11 @@ contract DXswapFeeSplitter { mapping(address => ExternalFeeReceiver) public externalFeeReceivers; - event TakeProtocolFee(address indexed sender, address indexed to, uint256 NumberOfPairs); + event TakeProtocolFee( + address indexed sender, + address indexed to, + uint256 NumberOfPairs + ); constructor( address _owner, @@ -42,62 +46,51 @@ contract DXswapFeeSplitter { // called by the owner to set the new owner function transferOwnership(address newOwner) external { - require(msg.sender == owner, 'DXswapFeeSplitter: FORBIDDEN'); + require(msg.sender == owner, "DXswapFeeSplitter: FORBIDDEN"); owner = newOwner; } // called by the owner to change receivers addresses - function changeReceivers(address _ethReceiver, address _fallbackReceiver) external { - require(msg.sender == owner, 'DXswapFeeSplitter: FORBIDDEN'); + function changeReceivers(address _ethReceiver, address _fallbackReceiver) + external + { + require(msg.sender == owner, "DXswapFeeSplitter: FORBIDDEN"); ethReceiver = _ethReceiver; fallbackReceiver = _fallbackReceiver; } // 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, 'DXswapFeeSplitter: IDENTICAL_ADDRESSES'); - (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); - require(token0 != address(0), 'DXswapFeeSplitter: ZERO_ADDRESS'); - } - - // Helper function to know if an address is a contract, extcodesize returns the size of the code of a smart - // contract in a specific address - function isContract(address addr) internal view returns (bool) { - uint256 size; - assembly { - size := extcodesize(addr) - } - return size > 0; - } - - // Calculates the CREATE2 address for a pair without making any external calls - // Taken from DXswapLibrary, removed the factory parameter - function pairFor(address tokenA, address tokenB) internal view returns (address pair) { - (address token0, address token1) = sortTokens(tokenA, tokenB); - pair = address( - uint160( - uint256( - keccak256( - abi.encodePacked( - hex'ff', - factory, - keccak256(abi.encodePacked(token0, token1)), - hex'd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776' // init code hash - ) - ) - ) - ) - ); + function sortTokens(address tokenA, address tokenB) + internal + pure + returns (address token0, address token1) + { + require(tokenA != tokenB, "DXswapFeeSplitter: IDENTICAL_ADDRESSES"); + (token0, token1) = tokenA < tokenB + ? (tokenA, tokenB) + : (tokenB, tokenA); + require(token0 != address(0), "DXswapFeeSplitter: ZERO_ADDRESS"); } // Done with code form DXswapRouter and DXswapLibrary, removed the deadline argument - function _swapTokensForETH(uint256 amountIn, address fromToken) internal returns (uint256 amountOut) { - IDXswapPair pairToUse = IDXswapPair(pairFor(fromToken, nativeCurrencyWrapper)); + function _swapTokensForETH(uint256 amountIn, address fromToken) + internal + returns (uint256 amountOut) + { + IDXswapPair pairToUse = IDXswapPair( + factory.getPair(fromToken, nativeCurrencyWrapper) + ); (uint256 reserve0, uint256 reserve1, ) = pairToUse.getReserves(); - (uint256 reserveIn, uint256 reserveOut) = fromToken < nativeCurrencyWrapper ? (reserve0, reserve1) : (reserve1, reserve0); + (uint256 reserveIn, uint256 reserveOut) = fromToken < + nativeCurrencyWrapper + ? (reserve0, reserve1) + : (reserve1, reserve0); - require(reserveIn > 0 && reserveOut > 0, 'DXswapFeeSplitter: INSUFFICIENT_LIQUIDITY'); // should never happen since pool was checked before + require( + reserveIn > 0 && reserveOut > 0, + "DXswapFeeSplitter: INSUFFICIENT_LIQUIDITY" + ); // should never happen since pool was checked before uint256 amountInWithFee = amountIn * (10000 - pairToUse.swapFee()); uint256 numerator = amountInWithFee * reserveOut; uint256 denominator = reserveIn * 10000 + amountInWithFee; @@ -105,7 +98,10 @@ contract DXswapFeeSplitter { TransferHelper.safeTransfer(fromToken, address(pairToUse), amountIn); - (uint256 amount0Out, uint256 amount1Out) = fromToken < nativeCurrencyWrapper ? (uint256(0), amountOut) : (amountOut, uint256(0)); + (uint256 amount0Out, uint256 amount1Out) = fromToken < + nativeCurrencyWrapper + ? (uint256(0), amountOut) + : (amountOut, uint256(0)); pairToUse.swap(amount0Out, amount1Out, address(this), new bytes(0)); } @@ -116,14 +112,17 @@ contract DXswapFeeSplitter { address token1, uint256 amount ) internal view returns (bool) { - address pair = pairFor(token0, token1); - if (!isContract(pair)) return false; + address pair = factory.getPair(token0, token1); + if (pair == address(0)) return false; - (uint256 reserve0, uint256 reserve1, ) = IDXswapPair(pair).getReserves(); - (uint256 reserveIn, uint256 reserveOut) = token0 < token1 ? (reserve0, reserve1) : (reserve1, reserve0); + (uint256 reserve0, uint256 reserve1, ) = IDXswapPair(pair) + .getReserves(); + (uint256 reserveIn, uint256 reserveOut) = token0 < token1 + ? (reserve0, reserve1) + : (reserve1, reserve0); if (reserveIn == 0 || reserveOut == 0) return false; - uint256 priceImpact = amount * 10000 / reserveIn; // simplified formula + uint256 priceImpact = (amount * 10000) / reserveIn; // simplified formula if (priceImpact > maxSwapPriceImpact) return false; return true; @@ -136,19 +135,36 @@ contract DXswapFeeSplitter { address token, uint256 amount ) internal { - address _externalFeeReceiver = externalFeeReceivers[pair].externalReceiver; - uint16 _percentFeeToExternalReceiver = externalFeeReceivers[pair].feePercentage; + address _externalFeeReceiver = externalFeeReceivers[pair] + .externalReceiver; + uint16 _percentFeeToExternalReceiver = externalFeeReceivers[pair] + .feePercentage; - if (_percentFeeToExternalReceiver > 0 && _externalFeeReceiver != address(0)) { - uint256 feeToExternalReceiver = amount * _percentFeeToExternalReceiver / 10000; + if ( + _percentFeeToExternalReceiver > 0 && + _externalFeeReceiver != address(0) + ) { + uint256 feeToExternalReceiver = (amount * + _percentFeeToExternalReceiver) / 10000; uint256 feeToAvatarDAO = amount - feeToExternalReceiver; if (token == nativeCurrencyWrapper) { IWETH(nativeCurrencyWrapper).withdraw(amount); - TransferHelper.safeTransferETH(_externalFeeReceiver, feeToExternalReceiver); + TransferHelper.safeTransferETH( + _externalFeeReceiver, + feeToExternalReceiver + ); TransferHelper.safeTransferETH(ethReceiver, feeToAvatarDAO); } else { - TransferHelper.safeTransfer(token, _externalFeeReceiver, feeToExternalReceiver); - TransferHelper.safeTransfer(token, fallbackReceiver, feeToAvatarDAO); + TransferHelper.safeTransfer( + token, + _externalFeeReceiver, + feeToExternalReceiver + ); + TransferHelper.safeTransfer( + token, + fallbackReceiver, + feeToAvatarDAO + ); } } else { if (token == nativeCurrencyWrapper) { @@ -166,7 +182,10 @@ contract DXswapFeeSplitter { address token, uint256 amount ) internal { - if (token != nativeCurrencyWrapper && _isSwapPossible(token, nativeCurrencyWrapper, amount)) { + if ( + token != nativeCurrencyWrapper && + _isSwapPossible(token, nativeCurrencyWrapper, amount) + ) { // If it is not nativeCurrencyWrapper and there is a direct path to nativeCurrencyWrapper, swap tokens uint256 amountOut = _swapTokensForETH(amount, token); _splitAndTransferFee(pair, nativeCurrencyWrapper, amountOut); @@ -181,30 +200,43 @@ contract DXswapFeeSplitter { for (uint256 i = 0; i < pairs.length; i++) { address token0 = pairs[i].token0(); address token1 = pairs[i].token1(); - pairs[i].transfer(address(pairs[i]), pairs[i].balanceOf(address(this))); + pairs[i].transfer( + address(pairs[i]), + pairs[i].balanceOf(address(this)) + ); (uint256 amount0, uint256 amount1) = pairs[i].burn(address(this)); - if (amount0 > 0) _takeTokenOrETH(address(pairs[i]), token0, amount0); - if (amount1 > 0) _takeTokenOrETH(address(pairs[i]), token1, amount1); + if (amount0 > 0) + _takeTokenOrETH(address(pairs[i]), token0, amount0); + if (amount1 > 0) + _takeTokenOrETH(address(pairs[i]), token1, amount1); } emit TakeProtocolFee(msg.sender, ethReceiver, pairs.length); } // called by the owner to set maximum swap price impact allowed for single token-nativeCurrencyWrapper swap (within 0-100% range) function setMaxSwapPriceImpact(uint16 _maxSwapPriceImpact) external { - require(msg.sender == owner, 'DXswapFeeSplitter: CALLER_NOT_OWNER'); - require(_maxSwapPriceImpact > 0 && _maxSwapPriceImpact < 10000, 'DXswapFeeSplitter: FORBIDDEN_PRICE_IMPACT'); + require(msg.sender == owner, "DXswapFeeSplitter: CALLER_NOT_OWNER"); + require( + _maxSwapPriceImpact > 0 && _maxSwapPriceImpact < 10000, + "DXswapFeeSplitter: FORBIDDEN_PRICE_IMPACT" + ); maxSwapPriceImpact = _maxSwapPriceImpact; } // called by the owner to set external fee receiver address - function setExternalFeeReceiver(address _pair, address _externalReceiver) external { - require(msg.sender == owner, 'DXswapFeeSplitter: CALLER_NOT_OWNER'); + function setExternalFeeReceiver(address _pair, address _externalReceiver) + external + { + require(msg.sender == owner, "DXswapFeeSplitter: CALLER_NOT_OWNER"); externalFeeReceivers[_pair].externalReceiver = _externalReceiver; } // called by the owner to set fee percentage to external receiver - function setFeePercentageToExternalReceiver(address _pair, uint16 _feePercentageToExternalReceiver) external { - require(msg.sender == owner, 'DXswapFeeSplitter: CALLER_NOT_OWNER'); + function setFeePercentageToExternalReceiver( + address _pair, + uint16 _feePercentageToExternalReceiver + ) external { + require(msg.sender == owner, "DXswapFeeSplitter: CALLER_NOT_OWNER"); IDXswapPair swapPair = IDXswapPair(_pair); uint256 feeReceiverBalance = swapPair.balanceOf(address(this)); if (feeReceiverBalance > 0) { @@ -213,18 +245,25 @@ contract DXswapFeeSplitter { address token1 = swapPair.token1(); swapPair.transfer(address(swapPair), feeReceiverBalance); (uint256 amount0, uint256 amount1) = swapPair.burn(address(this)); - if (amount0 > 0) _takeTokenOrETH(address(swapPair), token0, amount0); - if (amount1 > 0) _takeTokenOrETH(address(swapPair), token1, amount1); + if (amount0 > 0) + _takeTokenOrETH(address(swapPair), token0, amount0); + if (amount1 > 0) + _takeTokenOrETH(address(swapPair), token1, amount1); emit TakeProtocolFee(msg.sender, ethReceiver, 1); } - require(swapPair.balanceOf(address(this)) == 0, 'DXswapFeeSplitter: TOKENS_NOT_BURNED'); + require( + swapPair.balanceOf(address(this)) == 0, + "DXswapFeeSplitter: TOKENS_NOT_BURNED" + ); // fee percentage check require( - _feePercentageToExternalReceiver >= 0 && _feePercentageToExternalReceiver <= 5000, - 'DXswapFeeSplitter: FORBIDDEN_FEE_PERCENTAGE_SPLIT' + _feePercentageToExternalReceiver >= 0 && + _feePercentageToExternalReceiver <= 5000, + "DXswapFeeSplitter: FORBIDDEN_FEE_PERCENTAGE_SPLIT" ); // update the split percentage for specific pair - externalFeeReceivers[_pair].feePercentage = _feePercentageToExternalReceiver; + externalFeeReceivers[_pair] + .feePercentage = _feePercentageToExternalReceiver; } } From 677acb58103041543eca41d5d0df154f0170a361 Mon Sep 17 00:00:00 2001 From: karczu Date: Mon, 5 Sep 2022 17:49:47 +0200 Subject: [PATCH 09/11] refactor: upgrade sol & price impact formula & lint --- .gitignore | 3 +- contracts/DXswapFeeSplitter.sol | 157 ++---- contracts/libraries/TransferHelperV2.sol | 25 +- hardhat.config.ts | 7 +- package.json | 7 +- yarn.lock | 580 ++++++++++++++++++++++- 6 files changed, 641 insertions(+), 138 deletions(-) diff --git a/.gitignore b/.gitignore index 50c9c2726..5e3393f98 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,5 @@ coverage/ coverage.json typechain deployments/hardhat -deployments/localhost \ No newline at end of file +deployments/localhost +.vscode \ No newline at end of file diff --git a/contracts/DXswapFeeSplitter.sol b/contracts/DXswapFeeSplitter.sol index 2f35e14ce..00b77ce11 100644 --- a/contracts/DXswapFeeSplitter.sol +++ b/contracts/DXswapFeeSplitter.sol @@ -1,17 +1,17 @@ -pragma solidity =0.8.15; +pragma solidity =0.8.16; -import "./interfaces/IDXswapFactory.sol"; -import "./interfaces/IDXswapPair.sol"; -import "./interfaces/IWETH.sol"; -import "./libraries/TransferHelperV2.sol"; +import './interfaces/IDXswapFactory.sol'; +import './interfaces/IDXswapPair.sol'; +import './interfaces/IWETH.sol'; +import './libraries/TransferHelperV2.sol'; contract DXswapFeeSplitter { + uint16 public maxSwapPriceImpact = 100; // uses default 1% as max allowed price impact for takeProtocolFee swap address public owner; - IDXswapFactory public factory; address public nativeCurrencyWrapper; address public ethReceiver; address public fallbackReceiver; - uint16 public maxSwapPriceImpact = 100; // uses default 1% as max allowed price impact for takeProtocolFee swap + IDXswapFactory public factory; // if needed set address of external project which can get % of total earned protocol fee // % of total protocol fee to external project (100 means 1%) is within the range <0, 50> @@ -22,11 +22,7 @@ contract DXswapFeeSplitter { mapping(address => ExternalFeeReceiver) public externalFeeReceivers; - event TakeProtocolFee( - address indexed sender, - address indexed to, - uint256 NumberOfPairs - ); + event TakeProtocolFee(address indexed sender, address indexed to, uint256 NumberOfPairs); constructor( address _owner, @@ -46,51 +42,34 @@ contract DXswapFeeSplitter { // called by the owner to set the new owner function transferOwnership(address newOwner) external { - require(msg.sender == owner, "DXswapFeeSplitter: FORBIDDEN"); + require(msg.sender == owner, 'DXswapFeeSplitter: FORBIDDEN'); owner = newOwner; } // called by the owner to change receivers addresses - function changeReceivers(address _ethReceiver, address _fallbackReceiver) - external - { - require(msg.sender == owner, "DXswapFeeSplitter: FORBIDDEN"); + function changeReceivers(address _ethReceiver, address _fallbackReceiver) external { + require(msg.sender == owner, 'DXswapFeeSplitter: FORBIDDEN'); ethReceiver = _ethReceiver; fallbackReceiver = _fallbackReceiver; } // 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, "DXswapFeeSplitter: IDENTICAL_ADDRESSES"); - (token0, token1) = tokenA < tokenB - ? (tokenA, tokenB) - : (tokenB, tokenA); - require(token0 != address(0), "DXswapFeeSplitter: ZERO_ADDRESS"); + function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { + require(tokenA != tokenB, 'DXswapFeeSplitter: IDENTICAL_ADDRESSES'); + (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); + require(token0 != address(0), 'DXswapFeeSplitter: ZERO_ADDRESS'); } // Done with code form DXswapRouter and DXswapLibrary, removed the deadline argument - function _swapTokensForETH(uint256 amountIn, address fromToken) - internal - returns (uint256 amountOut) - { - IDXswapPair pairToUse = IDXswapPair( - factory.getPair(fromToken, nativeCurrencyWrapper) - ); + function _swapTokensForETH(uint256 amountIn, address fromToken) internal returns (uint256 amountOut) { + IDXswapPair pairToUse = IDXswapPair(factory.getPair(fromToken, nativeCurrencyWrapper)); (uint256 reserve0, uint256 reserve1, ) = pairToUse.getReserves(); - (uint256 reserveIn, uint256 reserveOut) = fromToken < - nativeCurrencyWrapper + (uint256 reserveIn, uint256 reserveOut) = fromToken < nativeCurrencyWrapper ? (reserve0, reserve1) : (reserve1, reserve0); - require( - reserveIn > 0 && reserveOut > 0, - "DXswapFeeSplitter: INSUFFICIENT_LIQUIDITY" - ); // should never happen since pool was checked before + require(reserveIn > 0 && reserveOut > 0, 'DXswapFeeSplitter: INSUFFICIENT_LIQUIDITY'); // should never happen since pool was checked before uint256 amountInWithFee = amountIn * (10000 - pairToUse.swapFee()); uint256 numerator = amountInWithFee * reserveOut; uint256 denominator = reserveIn * 10000 + amountInWithFee; @@ -98,8 +77,7 @@ contract DXswapFeeSplitter { TransferHelper.safeTransfer(fromToken, address(pairToUse), amountIn); - (uint256 amount0Out, uint256 amount1Out) = fromToken < - nativeCurrencyWrapper + (uint256 amount0Out, uint256 amount1Out) = fromToken < nativeCurrencyWrapper ? (uint256(0), amountOut) : (amountOut, uint256(0)); @@ -115,14 +93,11 @@ contract DXswapFeeSplitter { address pair = factory.getPair(token0, token1); if (pair == address(0)) return false; - (uint256 reserve0, uint256 reserve1, ) = IDXswapPair(pair) - .getReserves(); - (uint256 reserveIn, uint256 reserveOut) = token0 < token1 - ? (reserve0, reserve1) - : (reserve1, reserve0); + (uint256 reserve0, uint256 reserve1, ) = IDXswapPair(pair).getReserves(); + (uint256 reserveIn, uint256 reserveOut) = token0 < token1 ? (reserve0, reserve1) : (reserve1, reserve0); if (reserveIn == 0 || reserveOut == 0) return false; - uint256 priceImpact = (amount * 10000) / reserveIn; // simplified formula + uint256 priceImpact = (amount * 10000) / (reserveIn + amount); // simplified formula if (priceImpact > maxSwapPriceImpact) return false; return true; @@ -135,36 +110,19 @@ contract DXswapFeeSplitter { address token, uint256 amount ) internal { - address _externalFeeReceiver = externalFeeReceivers[pair] - .externalReceiver; - uint16 _percentFeeToExternalReceiver = externalFeeReceivers[pair] - .feePercentage; + address _externalFeeReceiver = externalFeeReceivers[pair].externalReceiver; + uint16 _percentFeeToExternalReceiver = externalFeeReceivers[pair].feePercentage; - if ( - _percentFeeToExternalReceiver > 0 && - _externalFeeReceiver != address(0) - ) { - uint256 feeToExternalReceiver = (amount * - _percentFeeToExternalReceiver) / 10000; + if (_percentFeeToExternalReceiver > 0 && _externalFeeReceiver != address(0)) { + uint256 feeToExternalReceiver = (amount * _percentFeeToExternalReceiver) / 10000; uint256 feeToAvatarDAO = amount - feeToExternalReceiver; if (token == nativeCurrencyWrapper) { IWETH(nativeCurrencyWrapper).withdraw(amount); - TransferHelper.safeTransferETH( - _externalFeeReceiver, - feeToExternalReceiver - ); + TransferHelper.safeTransferETH(_externalFeeReceiver, feeToExternalReceiver); TransferHelper.safeTransferETH(ethReceiver, feeToAvatarDAO); } else { - TransferHelper.safeTransfer( - token, - _externalFeeReceiver, - feeToExternalReceiver - ); - TransferHelper.safeTransfer( - token, - fallbackReceiver, - feeToAvatarDAO - ); + TransferHelper.safeTransfer(token, _externalFeeReceiver, feeToExternalReceiver); + TransferHelper.safeTransfer(token, fallbackReceiver, feeToAvatarDAO); } } else { if (token == nativeCurrencyWrapper) { @@ -182,10 +140,7 @@ contract DXswapFeeSplitter { address token, uint256 amount ) internal { - if ( - token != nativeCurrencyWrapper && - _isSwapPossible(token, nativeCurrencyWrapper, amount) - ) { + if (token != nativeCurrencyWrapper && _isSwapPossible(token, nativeCurrencyWrapper, amount)) { // If it is not nativeCurrencyWrapper and there is a direct path to nativeCurrencyWrapper, swap tokens uint256 amountOut = _swapTokensForETH(amount, token); _splitAndTransferFee(pair, nativeCurrencyWrapper, amountOut); @@ -200,43 +155,30 @@ contract DXswapFeeSplitter { for (uint256 i = 0; i < pairs.length; i++) { address token0 = pairs[i].token0(); address token1 = pairs[i].token1(); - pairs[i].transfer( - address(pairs[i]), - pairs[i].balanceOf(address(this)) - ); + pairs[i].transfer(address(pairs[i]), pairs[i].balanceOf(address(this))); (uint256 amount0, uint256 amount1) = pairs[i].burn(address(this)); - if (amount0 > 0) - _takeTokenOrETH(address(pairs[i]), token0, amount0); - if (amount1 > 0) - _takeTokenOrETH(address(pairs[i]), token1, amount1); + if (amount0 > 0) _takeTokenOrETH(address(pairs[i]), token0, amount0); + if (amount1 > 0) _takeTokenOrETH(address(pairs[i]), token1, amount1); } emit TakeProtocolFee(msg.sender, ethReceiver, pairs.length); } // called by the owner to set maximum swap price impact allowed for single token-nativeCurrencyWrapper swap (within 0-100% range) function setMaxSwapPriceImpact(uint16 _maxSwapPriceImpact) external { - require(msg.sender == owner, "DXswapFeeSplitter: CALLER_NOT_OWNER"); - require( - _maxSwapPriceImpact > 0 && _maxSwapPriceImpact < 10000, - "DXswapFeeSplitter: FORBIDDEN_PRICE_IMPACT" - ); + require(msg.sender == owner, 'DXswapFeeSplitter: CALLER_NOT_OWNER'); + require(_maxSwapPriceImpact > 0 && _maxSwapPriceImpact < 10000, 'DXswapFeeSplitter: FORBIDDEN_PRICE_IMPACT'); maxSwapPriceImpact = _maxSwapPriceImpact; } // called by the owner to set external fee receiver address - function setExternalFeeReceiver(address _pair, address _externalReceiver) - external - { - require(msg.sender == owner, "DXswapFeeSplitter: CALLER_NOT_OWNER"); + function setExternalFeeReceiver(address _pair, address _externalReceiver) external { + require(msg.sender == owner, 'DXswapFeeSplitter: CALLER_NOT_OWNER'); externalFeeReceivers[_pair].externalReceiver = _externalReceiver; } // called by the owner to set fee percentage to external receiver - function setFeePercentageToExternalReceiver( - address _pair, - uint16 _feePercentageToExternalReceiver - ) external { - require(msg.sender == owner, "DXswapFeeSplitter: CALLER_NOT_OWNER"); + function setFeePercentageToExternalReceiver(address _pair, uint16 _feePercentageToExternalReceiver) external { + require(msg.sender == owner, 'DXswapFeeSplitter: CALLER_NOT_OWNER'); IDXswapPair swapPair = IDXswapPair(_pair); uint256 feeReceiverBalance = swapPair.balanceOf(address(this)); if (feeReceiverBalance > 0) { @@ -245,25 +187,18 @@ contract DXswapFeeSplitter { address token1 = swapPair.token1(); swapPair.transfer(address(swapPair), feeReceiverBalance); (uint256 amount0, uint256 amount1) = swapPair.burn(address(this)); - if (amount0 > 0) - _takeTokenOrETH(address(swapPair), token0, amount0); - if (amount1 > 0) - _takeTokenOrETH(address(swapPair), token1, amount1); + if (amount0 > 0) _takeTokenOrETH(address(swapPair), token0, amount0); + if (amount1 > 0) _takeTokenOrETH(address(swapPair), token1, amount1); emit TakeProtocolFee(msg.sender, ethReceiver, 1); } - require( - swapPair.balanceOf(address(this)) == 0, - "DXswapFeeSplitter: TOKENS_NOT_BURNED" - ); + require(swapPair.balanceOf(address(this)) == 0, 'DXswapFeeSplitter: TOKENS_NOT_BURNED'); // fee percentage check require( - _feePercentageToExternalReceiver >= 0 && - _feePercentageToExternalReceiver <= 5000, - "DXswapFeeSplitter: FORBIDDEN_FEE_PERCENTAGE_SPLIT" + _feePercentageToExternalReceiver >= 0 && _feePercentageToExternalReceiver <= 5000, + 'DXswapFeeSplitter: FORBIDDEN_FEE_PERCENTAGE_SPLIT' ); // update the split percentage for specific pair - externalFeeReceivers[_pair] - .feePercentage = _feePercentageToExternalReceiver; + externalFeeReceivers[_pair].feePercentage = _feePercentageToExternalReceiver; } } diff --git a/contracts/libraries/TransferHelperV2.sol b/contracts/libraries/TransferHelperV2.sol index dafdf8b9e..6d3c8478b 100644 --- a/contracts/libraries/TransferHelperV2.sol +++ b/contracts/libraries/TransferHelperV2.sol @@ -1,27 +1,40 @@ -pragma solidity =0.8.15; +pragma solidity =0.8.16; // 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 { + function safeApprove( + address token, + address to, + uint256 value + ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED'); } - function safeTransfer(address token, address to, uint value) internal { + function safeTransfer( + address token, + address to, + uint256 value + ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED'); } - function safeTransferFrom(address token, address from, address to, uint value) internal { + function safeTransferFrom( + address token, + address from, + address to, + uint256 value + ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED'); } - function safeTransferETH(address to, uint msgValue) internal { - (bool success,) = to.call{ value: msgValue }(new bytes(0)); + function safeTransferETH(address to, uint256 msgValue) internal { + (bool success, ) = to.call{value: msgValue}(new bytes(0)); require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); } } diff --git a/hardhat.config.ts b/hardhat.config.ts index 095df546a..84b35c776 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -6,6 +6,7 @@ import "@nomiclabs/hardhat-etherscan"; import "solidity-coverage"; import "@typechain/hardhat"; import { HardhatUserConfig } from "hardhat/types"; +import "hardhat-gas-reporter" dotenv.config(); @@ -13,7 +14,7 @@ const config: HardhatUserConfig = { solidity: { compilers: [ { - version: "0.8.15", + version: "0.8.16", settings: { optimizer: { enabled: true, @@ -76,5 +77,9 @@ const config: HardhatUserConfig = { etherscan: { apiKey: process.env.ETHERSCAN_KEY, }, + gasReporter: { + currency: "USD", + enabled: true, + }, }; export default config; \ No newline at end of file diff --git a/package.json b/package.json index 4fc4e71d4..dabca5b84 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,8 @@ "glob": "^7.1.7", "glob-promise": "^4.2.0", "hardhat": "^2.9.5", + "hardhat-gas-reporter": "^1.0.8", + "mathjs": "^10.6.1", "mocha": "^6.2.2", "prettier": "^2.3.2", "prettier-plugin-solidity": "^1.0.0-beta.17", @@ -41,8 +43,7 @@ "truffle-hdwallet-provider": "^1.0.17", "ts-node": "10.7.0", "typechain": "^5.1.2", - "typescript": "^4.5.2", - "mathjs": "^10.6.1" + "typescript": "^4.5.2" }, "dependencies": { "@metamask/eth-sig-util": "^4.0.0", @@ -72,4 +73,4 @@ "flattener": "./scripts/flattener.sh" }, "license": "AGPL-3.0-or-later" -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index 5ec34e1ef..4b57fde2c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -363,6 +363,21 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/strings" "^5.6.1" +"@ethersproject/abi@^5.0.0-beta.146": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/abstract-provider@5.6.1", "@ethersproject/abstract-provider@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz#02ddce150785caf0c77fe036a0ebfcee61878c59" @@ -389,6 +404,19 @@ "@ethersproject/transactions" "^5.0.9" "@ethersproject/web" "^5.0.12" +"@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + "@ethersproject/abstract-signer@5.6.2", "@ethersproject/abstract-signer@^5.4.1", "@ethersproject/abstract-signer@^5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz#491f07fc2cbd5da258f46ec539664713950b0b33" @@ -411,6 +439,17 @@ "@ethersproject/logger" "^5.0.8" "@ethersproject/properties" "^5.0.7" +"@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/address@5.6.1", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.4.0", "@ethersproject/address@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.1.tgz#ab57818d9aefee919c5721d28cd31fd95eff413d" @@ -433,6 +472,17 @@ "@ethersproject/logger" "^5.0.8" "@ethersproject/rlp" "^5.0.7" +"@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/base64@5.6.1", "@ethersproject/base64@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.6.1.tgz#2c40d8a0310c9d1606c2c37ae3092634b41d87cb" @@ -447,6 +497,13 @@ dependencies: "@ethersproject/bytes" "^5.0.9" +"@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/basex@5.6.1", "@ethersproject/basex@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.6.1.tgz#badbb2f1d4a6f52ce41c9064f01eab19cc4c5305" @@ -473,6 +530,15 @@ "@ethersproject/logger" "^5.0.8" bn.js "^4.4.0" +"@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + "@ethersproject/bytes@5.6.1", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.4.0", "@ethersproject/bytes@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" @@ -487,6 +553,13 @@ dependencies: "@ethersproject/logger" "^5.0.8" +"@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + "@ethersproject/constants@5.6.1", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.4.0", "@ethersproject/constants@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.6.1.tgz#e2e974cac160dd101cf79fdf879d7d18e8cb1370" @@ -501,6 +574,13 @@ dependencies: "@ethersproject/bignumber" "^5.0.13" +"@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/contracts@5.6.2", "@ethersproject/contracts@^5.4.1": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.6.2.tgz#20b52e69ebc1b74274ff8e3d4e508de971c287bc" @@ -545,6 +625,21 @@ "@ethersproject/properties" "^5.0.7" "@ethersproject/strings" "^5.0.8" +"@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/hdnode@5.6.2", "@ethersproject/hdnode@^5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.6.2.tgz#26f3c83a3e8f1b7985c15d1db50dc2903418b2d2" @@ -598,6 +693,14 @@ "@ethersproject/bytes" "^5.0.9" js-sha3 "0.5.7" +"@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + "@ethersproject/logger@5.6.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" @@ -608,6 +711,11 @@ resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.8.tgz#135c1903d35c878265f3cbf2b287042c4c20d5d4" integrity sha512-SkJCTaVTnaZ3/ieLF5pVftxGEFX56pTH+f2Slrpv7cU0TNpUZNib84QQdukd++sWUp/S7j5t5NW+WegbXd4U/A== +"@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + "@ethersproject/networks@5.6.4", "@ethersproject/networks@^5.6.3": version "5.6.4" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.4.tgz#51296d8fec59e9627554f5a8a9c7791248c8dc07" @@ -622,6 +730,13 @@ dependencies: "@ethersproject/logger" "^5.0.8" +"@ethersproject/networks@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.0.tgz#df72a392f1a63a57f87210515695a31a245845ad" + integrity sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA== + dependencies: + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2@5.6.1", "@ethersproject/pbkdf2@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz#f462fe320b22c0d6b1d72a9920a3963b09eb82d1" @@ -644,6 +759,13 @@ dependencies: "@ethersproject/logger" "^5.0.8" +"@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + "@ethersproject/providers@5.6.8", "@ethersproject/providers@^5.4.4": version "5.6.8" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.8.tgz#22e6c57be215ba5545d3a46cf759d265bb4e879d" @@ -694,6 +816,14 @@ "@ethersproject/bytes" "^5.0.9" "@ethersproject/logger" "^5.0.8" +"@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/sha2@5.6.1", "@ethersproject/sha2@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.1.tgz#211f14d3f5da5301c8972a8827770b6fd3e51656" @@ -725,6 +855,18 @@ "@ethersproject/properties" "^5.0.7" elliptic "6.5.3" +"@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + "@ethersproject/solidity@5.6.1", "@ethersproject/solidity@^5.4.0": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.6.1.tgz#5845e71182c66d32e6ec5eefd041fca091a473e2" @@ -755,6 +897,15 @@ "@ethersproject/constants" "^5.0.8" "@ethersproject/logger" "^5.0.8" +"@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/transactions@5.6.2", "@ethersproject/transactions@^5.4.0", "@ethersproject/transactions@^5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.6.2.tgz#793a774c01ced9fe7073985bb95a4b4e57a6370b" @@ -785,6 +936,21 @@ "@ethersproject/rlp" "^5.0.7" "@ethersproject/signing-key" "^5.0.8" +"@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/units@5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.6.1.tgz#ecc590d16d37c8f9ef4e89e2005bda7ddc6a4e6f" @@ -837,6 +1003,17 @@ "@ethersproject/properties" "^5.0.7" "@ethersproject/strings" "^5.0.8" +"@ethersproject/web@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.0.tgz#40850c05260edad8b54827923bbad23d96aac0bc" + integrity sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/wordlists@5.6.1", "@ethersproject/wordlists@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.6.1.tgz#1e78e2740a8a21e9e99947e47979d72e130aeda1" @@ -915,11 +1092,21 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.0.0.tgz#d5e38bfbdaba174805a4e649f13be9a9ed3351ae" integrity sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg== +"@noble/hashes@1.1.2", "@noble/hashes@~1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" + integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== + "@noble/secp256k1@1.5.5", "@noble/secp256k1@~1.5.2": version "1.5.5" resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.5.5.tgz#315ab5745509d1a8c8e90d0bdf59823ccf9bcfc3" integrity sha512-sZ1W6gQzYnu45wPrWx8D3kwI2/U29VYTx9OjbDAd7jwRItJ0cSTMPRL/C8AWZFn9kWFLQGqEXVEE86w4Z8LpIQ== +"@noble/secp256k1@1.6.3", "@noble/secp256k1@~1.6.0": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.6.3.tgz#7eed12d9f4404b416999d0c87686836c4c5c9b94" + integrity sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1048,6 +1235,11 @@ resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.0.0.tgz#109fb595021de285f05a7db6806f2f48296fcee7" integrity sha512-gIVaYhUsy+9s58m/ETjSJVKHhKTBMmcRb9cEV5/5dwvfDlfORjKrFsDeDHWRrm6RjcPvCLZFwGJjAjLj1gg4HA== +"@scure/base@~1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" + integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== + "@scure/bip32@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.0.1.tgz#1409bdf9f07f0aec99006bb0d5827693418d3aa5" @@ -1057,6 +1249,15 @@ "@noble/secp256k1" "~1.5.2" "@scure/base" "~1.0.0" +"@scure/bip32@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.0.tgz#dea45875e7fbc720c2b4560325f1cf5d2246d95b" + integrity sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q== + dependencies: + "@noble/hashes" "~1.1.1" + "@noble/secp256k1" "~1.6.0" + "@scure/base" "~1.1.0" + "@scure/bip39@1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.0.0.tgz#47504e58de9a56a4bbed95159d2d6829fa491bb0" @@ -1065,6 +1266,14 @@ "@noble/hashes" "~1.0.0" "@scure/base" "~1.0.0" +"@scure/bip39@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.0.tgz#92f11d095bae025f166bef3defcc5bf4945d419a" + integrity sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w== + dependencies: + "@noble/hashes" "~1.1.1" + "@scure/base" "~1.1.0" + "@sentry/core@5.30.0": version "5.30.0" resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" @@ -1260,6 +1469,20 @@ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.1.tgz#e2c6e73e0bdeb2521d00756d099218e9f5d90a04" integrity sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ== +"@types/concat-stream@^1.6.0": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" + integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== + dependencies: + "@types/node" "*" + +"@types/form-data@0.0.33": + version "0.0.33" + resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" + integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== + dependencies: + "@types/node" "*" + "@types/glob@^7.1.1", "@types/glob@^7.1.3": version "7.2.0" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" @@ -1327,6 +1550,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-13.11.1.tgz#49a2a83df9d26daacead30d0ccc8762b128d53c7" integrity sha512-eWQGP3qtxwL8FGneRrC5DwrJLGN4/dH1clNTuLfN81HCrxVtxRjygDTUoZJ5ASlDEeo0ppYFQjQIlXhtXpOn6g== +"@types/node@^10.0.3": + version "10.17.60" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== + "@types/node@^10.3.2": version "10.17.19" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.19.tgz#1d31ddd5503dba2af7a901aafef3392e4955620e" @@ -1337,6 +1565,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.15.tgz#0de7e978fb43db62da369db18ea088a63673c182" integrity sha512-lowukE3GUI+VSYSu6VcBXl14d61Rp5hA1D+61r16qnwC0lYNSqdxcvRh0pswejorHfS+HgwBasM8jLXz0/aOsw== +"@types/node@^8.0.0": + version "8.10.66" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" + integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== + "@types/pbkdf2@^3.0.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" @@ -1349,7 +1582,7 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.3.tgz#68ada76827b0010d0db071f739314fa429943d0a" integrity sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg== -"@types/qs@^6.9.7": +"@types/qs@^6.2.31", "@types/qs@^6.9.7": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== @@ -1732,7 +1965,7 @@ any-promise@1.3.0, any-promise@^1.3.0: resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= -anymatch@~3.1.2: +anymatch@~3.1.1, anymatch@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== @@ -1816,11 +2049,21 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array-uniq@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== +asap@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" @@ -2972,7 +3215,7 @@ caniuse-lite@^1.0.30000844: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001041.tgz#c2ea138dafc6fe03877921ddcddd4a02a14daf76" integrity sha512-fqDtRCApddNrQuBxBS7kEiSGdBsgO4wiVw4G/IClfqzfhW45MbTumfN4cuUJGTM0YGFNn97DCXPJ683PS6zwvA== -caseless@~0.12.0: +caseless@^0.12.0, caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= @@ -3039,6 +3282,11 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +"charenc@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== + check-error@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" @@ -3051,6 +3299,21 @@ checkpoint-store@^1.1.0: dependencies: functional-red-black-tree "^1.0.1" +chokidar@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" + integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.2.0" + optionalDependencies: + fsevents "~2.1.1" + chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.2: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -3122,6 +3385,16 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-table3@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + cli-width@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" @@ -3203,6 +3476,11 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +colors@1.4.0, colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -3256,7 +3534,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.1: +concat-stream@^1.5.1, concat-stream@^1.6.0, concat-stream@^1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -3429,6 +3707,11 @@ cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" +"crypt@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== + crypto-browserify@3.12.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -4276,6 +4559,27 @@ eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.8: idna-uts46-hx "^2.3.1" js-sha3 "^0.5.7" +eth-gas-reporter@^0.2.24: + version "0.2.25" + resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz#546dfa946c1acee93cb1a94c2a1162292d6ff566" + integrity sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ== + dependencies: + "@ethersproject/abi" "^5.0.0-beta.146" + "@solidity-parser/parser" "^0.14.0" + cli-table3 "^0.5.0" + colors "1.4.0" + ethereum-cryptography "^1.0.3" + ethers "^4.0.40" + fs-readdir-recursive "^1.1.0" + lodash "^4.17.14" + markdown-table "^1.1.3" + mocha "^7.1.1" + req-cwd "^2.0.0" + request "^2.88.0" + request-promise-native "^1.0.5" + sha1 "^1.1.1" + sync-request "^6.0.0" + eth-json-rpc-filters@^4.2.1: version "4.2.2" resolved "https://registry.yarnpkg.com/eth-json-rpc-filters/-/eth-json-rpc-filters-4.2.2.tgz#eb35e1dfe9357ace8a8908e7daee80b2cd60a10d" @@ -4500,6 +4804,16 @@ ethereum-cryptography@^0.1.2, ethereum-cryptography@^0.1.3: secp256k1 "^4.0.1" setimmediate "^1.0.5" +ethereum-cryptography@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz#74f2ac0f0f5fe79f012c889b3b8446a9a6264e6d" + integrity sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ== + dependencies: + "@noble/hashes" "1.1.2" + "@noble/secp256k1" "1.6.3" + "@scure/bip32" "1.1.0" + "@scure/bip39" "1.1.0" + ethereum-protocol@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz#b7d68142f4105e0ae7b5e178cf42f8d4dc4b93cf" @@ -4838,6 +5152,21 @@ ethers@^4.0.32: uuid "2.0.1" xmlhttprequest "1.8.0" +ethers@^4.0.40: + version "4.0.49" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.49.tgz#0eb0e9161a0c8b4761be547396bbe2fb121a8894" + integrity sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg== + dependencies: + aes-js "3.0.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.3" + js-sha3 "0.5.7" + scrypt-js "2.0.4" + setimmediate "1.0.4" + uuid "2.0.1" + xmlhttprequest "1.8.0" + ethers@^5.0.1, ethers@^5.0.2, ethers@^5.4.6, ethers@^5.5.2: version "5.6.9" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.6.9.tgz#4e12f8dfcb67b88ae7a78a9519b384c23c576a4d" @@ -5303,6 +5632,15 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= +form-data@^2.2.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + form-data@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682" @@ -5431,11 +5769,21 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.6.0" +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= +fsevents@~2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" @@ -5512,6 +5860,11 @@ get-intrinsic@^1.0.2: has "^1.0.3" has-symbols "^1.0.1" +get-port@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== + get-stream@^2.2.0: version "2.3.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" @@ -5559,7 +5912,7 @@ ghost-testrpc@^0.0.2: chalk "^2.4.2" node-emoji "^1.10.0" -glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -5814,6 +6167,15 @@ hardhat-deploy@^0.9.0: murmur-128 "^0.2.1" qs "^6.9.4" +hardhat-gas-reporter@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.8.tgz#93ce271358cd748d9c4185dbb9d1d5525ec145e0" + integrity sha512-1G5thPnnhcwLHsFnl759f2tgElvuwdkzxlI65fC9PwxYMEe9cmjkVAAWTf3/3y8uP6ZSPiUiOW8PgZnykmZe0g== + dependencies: + array-uniq "1.0.3" + eth-gas-reporter "^0.2.24" + sha1 "^1.1.1" + hardhat@^2.9.5: version "2.9.9" resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.9.9.tgz#05c1015eb73e0230309534b00deeb080724aace0" @@ -6006,6 +6368,16 @@ hosted-git-info@^2.6.0: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== +http-basic@^8.1.1: + version "8.1.3" + resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" + integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== + dependencies: + caseless "^0.12.0" + concat-stream "^1.6.2" + http-response-object "^3.0.1" + parse-cache-control "^1.0.1" + http-cache-semantics@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" @@ -6049,6 +6421,13 @@ http-https@^1.0.0: resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs= +http-response-object@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" + integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== + dependencies: + "@types/node" "^10.0.3" + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -7145,6 +7524,13 @@ log-symbols@2.2.0: dependencies: chalk "^2.0.1" +log-symbols@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + log-symbols@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" @@ -7247,6 +7633,11 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +markdown-table@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" + integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== + match-all@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.6.tgz#66d276ad6b49655551e63d3a6ee53e8be0566f8d" @@ -7538,6 +7929,13 @@ mkdirp@0.5.1: dependencies: minimist "0.0.8" +mkdirp@0.5.5, mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + mkdirp@0.5.x: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" @@ -7545,13 +7943,6 @@ mkdirp@0.5.x: dependencies: minimist "^1.2.6" -mkdirp@^0.5.0, mkdirp@^0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - mnemonist@^0.38.0: version "0.38.5" resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" @@ -7588,6 +7979,36 @@ mocha@^6.2.2: yargs-parser "13.1.1" yargs-unparser "1.6.0" +mocha@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604" + integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== + dependencies: + ansi-colors "3.2.3" + browser-stdout "1.3.1" + chokidar "3.3.0" + debug "3.2.6" + diff "3.5.0" + escape-string-regexp "1.0.5" + find-up "3.0.0" + glob "7.1.3" + growl "1.10.5" + he "1.2.0" + js-yaml "3.13.1" + log-symbols "3.0.0" + minimatch "3.0.4" + mkdirp "0.5.5" + ms "2.1.1" + node-environment-flags "1.0.6" + object.assign "4.1.0" + strip-json-comments "2.0.1" + supports-color "6.0.0" + which "1.3.1" + wide-align "1.1.3" + yargs "13.3.2" + yargs-parser "13.1.2" + yargs-unparser "1.6.0" + mocha@^9.2.0: version "9.2.2" resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" @@ -7784,6 +8205,14 @@ node-environment-flags@1.0.5: object.getownpropertydescriptors "^2.0.3" semver "^5.7.0" +node-environment-flags@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" + integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== + dependencies: + object.getownpropertydescriptors "^2.0.3" + semver "^5.7.0" + node-fetch@1.7.3, node-fetch@~1.7.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" @@ -8137,6 +8566,11 @@ parse-asn1@^5.0.0: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" +parse-cache-control@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" + integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== + parse-headers@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" @@ -8446,6 +8880,13 @@ promise-to-callback@^1.0.0: is-fn "^1.0.0" set-immediate-shim "^1.0.1" +promise@^8.0.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.2.0.tgz#a1f6280ab67457fbfc8aad2b198c9497e9e5c806" + integrity sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg== + dependencies: + asap "~2.0.6" + proxy-addr@~2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" @@ -8557,7 +8998,7 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== -qs@^6.7.0, qs@^6.9.4: +qs@^6.4.0, qs@^6.7.0, qs@^6.9.4: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== @@ -8692,6 +9133,13 @@ readable-stream@~1.0.15: isarray "0.0.1" string_decoder "~0.10.x" +readdirp@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" + integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== + dependencies: + picomatch "^2.0.4" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -8806,7 +9254,37 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request@^2.79.0, request@^2.85.0: +req-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" + integrity sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ== + dependencies: + req-from "^2.0.0" + +req-from@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/req-from/-/req-from-2.0.0.tgz#d74188e47f93796f4aa71df6ee35ae689f3e0e70" + integrity sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA== + dependencies: + resolve-from "^3.0.0" + +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== + dependencies: + lodash "^4.17.19" + +request-promise-native@^1.0.5: + version "1.0.9" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== + dependencies: + request-promise-core "1.1.4" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.79.0, request@^2.85.0, request@^2.88.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -9277,6 +9755,14 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +sha1@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848" + integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== + dependencies: + charenc ">= 0.0.1" + crypt ">= 0.0.1" + sha3@^1.2.2: version "1.2.6" resolved "https://registry.yarnpkg.com/sha3/-/sha3-1.2.6.tgz#102aa3e47dc793e2357902c3cce8760822f9e905" @@ -9661,6 +10147,11 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g== + stream-to-pull-stream@^1.7.1: version "1.7.3" resolved "https://registry.yarnpkg.com/stream-to-pull-stream/-/stream-to-pull-stream-1.7.3.tgz#4161aa2d2eb9964de60bfa1af7feaf917e874ece" @@ -9683,7 +10174,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.1.0: +"string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -9926,6 +10417,22 @@ swarm-js@^0.1.40: tar "^4.0.2" xhr-request "^1.0.1" +sync-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/sync-request/-/sync-request-6.1.0.tgz#e96217565b5e50bbffe179868ba75532fb597e68" + integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== + dependencies: + http-response-object "^3.0.1" + sync-rpc "^1.2.1" + then-request "^6.0.0" + +sync-rpc@^1.2.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/sync-rpc/-/sync-rpc-1.3.6.tgz#b2e8b2550a12ccbc71df8644810529deb68665a7" + integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== + dependencies: + get-port "^3.1.0" + table@^5.2.3: version "5.4.6" resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" @@ -10012,6 +10519,23 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +then-request@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/then-request/-/then-request-6.0.2.tgz#ec18dd8b5ca43aaee5cb92f7e4c1630e950d4f0c" + integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== + dependencies: + "@types/concat-stream" "^1.6.0" + "@types/form-data" "0.0.33" + "@types/node" "^8.0.0" + "@types/qs" "^6.2.31" + caseless "~0.12.0" + concat-stream "^1.6.0" + form-data "^2.2.0" + http-basic "^8.1.1" + http-response-object "^3.0.1" + promise "^8.0.0" + qs "^6.4.0" + through2@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -10111,7 +10635,7 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tough-cookie@~2.5.0: +tough-cookie@^2.3.3, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== @@ -11680,6 +12204,14 @@ yargs-parser@13.1.1, yargs-parser@^13.1.1: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@13.1.2, yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@20.2.4: version "20.2.4" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" @@ -11733,6 +12265,22 @@ yargs@13.3.0, yargs@^13.3.0: y18n "^4.0.0" yargs-parser "^13.1.1" +yargs@13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + yargs@16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" From 721aa225c75ec24fbd7cb5cf748794a35d07bc7d Mon Sep 17 00:00:00 2001 From: karczu Date: Thu, 15 Dec 2022 13:37:31 +0100 Subject: [PATCH 10/11] fix bugs after master merge --- hardhat.config.ts | 2 +- test/DXswapFactory.spec.ts | 2 +- test/DXswapFeeReceiver.spec.ts | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/hardhat.config.ts b/hardhat.config.ts index 84b35c776..c094d87f2 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -79,7 +79,7 @@ const config: HardhatUserConfig = { }, gasReporter: { currency: "USD", - enabled: true, + enabled: false, }, }; export default config; \ No newline at end of file diff --git a/test/DXswapFactory.spec.ts b/test/DXswapFactory.spec.ts index c1435e75c..18b2c04b4 100644 --- a/test/DXswapFactory.spec.ts +++ b/test/DXswapFactory.spec.ts @@ -55,7 +55,7 @@ describe('DXswapFactory', () => { expect(await factory.feeTo()).to.eq(AddressZero) expect(await factory.feeToSetter()).to.eq(randomTestFeeSetter.address) expect(await factory.allPairsLength()).to.eq(0) - expect(await factory.INIT_CODE_PAIR_HASH()).to.eq('0xd306a548755b9295ee49cc729e13ca4a45e00199bbd890fa146da43a50571776') + expect(await factory.INIT_CODE_PAIR_HASH()).to.eq('0x9e43bdf627764c4a3e3e452d1b558fff8466adc4dc8a900396801d26f4c542f2') }) async function createPair(tokens: [string, string]) { diff --git a/test/DXswapFeeReceiver.spec.ts b/test/DXswapFeeReceiver.spec.ts index 0aec314ea..846c427e5 100644 --- a/test/DXswapFeeReceiver.spec.ts +++ b/test/DXswapFeeReceiver.spec.ts @@ -32,6 +32,7 @@ describe('DXswapFeeReceiver', () => { let pair23: DXswapPair let pair03: DXswapPair let wethPair: DXswapPair + let wethToken1Pair: DXswapPair let WETH: WETH9 beforeEach('assign signers', async function () { @@ -55,6 +56,7 @@ describe('DXswapFeeReceiver', () => { pair23 = fixture.dxswapPair23 pair03 = fixture.dxswapPair03 wethPair = fixture.wethToken1Pair + wethToken1Pair = fixture.wethToken0Pair WETH = fixture.WETH }) From dadbb470ead21c1f1ea4f413e207174b74ef395a Mon Sep 17 00:00:00 2001 From: karczu Date: Thu, 15 Dec 2022 15:44:08 +0100 Subject: [PATCH 11/11] fix bugs after merge --- contracts/DXswapFeeSplitter.sol | 140 ++++++------ hardhat.config.ts | 2 +- test/DXswapFeeReceiver.spec.ts | 155 +++---------- test/DXswapPair.spec.ts | 1 + yarn.lock | 388 ++------------------------------ 5 files changed, 112 insertions(+), 574 deletions(-) diff --git a/contracts/DXswapFeeSplitter.sol b/contracts/DXswapFeeSplitter.sol index 00b77ce11..490fae9d8 100644 --- a/contracts/DXswapFeeSplitter.sol +++ b/contracts/DXswapFeeSplitter.sol @@ -40,6 +40,19 @@ contract DXswapFeeSplitter { receive() external payable {} + // Take what was charged as protocol fee from the DXswap pair liquidity + function takeProtocolFee(IDXswapPair[] calldata pairs) external { + for (uint256 i = 0; i < pairs.length; i++) { + address token0 = pairs[i].token0(); + address token1 = pairs[i].token1(); + pairs[i].transfer(address(pairs[i]), pairs[i].balanceOf(address(this))); + (uint256 amount0, uint256 amount1) = pairs[i].burn(address(this)); + if (amount0 > 0) _takeTokenOrETH(address(pairs[i]), token0, amount0); + if (amount1 > 0) _takeTokenOrETH(address(pairs[i]), token1, amount1); + } + emit TakeProtocolFee(msg.sender, ethReceiver, pairs.length); + } + // called by the owner to set the new owner function transferOwnership(address newOwner) external { require(msg.sender == owner, 'DXswapFeeSplitter: FORBIDDEN'); @@ -60,6 +73,45 @@ contract DXswapFeeSplitter { require(token0 != address(0), 'DXswapFeeSplitter: ZERO_ADDRESS'); } + // called by the owner to set maximum swap price impact allowed for single token-nativeCurrencyWrapper swap (within 0-100% range) + function setMaxSwapPriceImpact(uint16 _maxSwapPriceImpact) external { + require(msg.sender == owner, 'DXswapFeeSplitter: CALLER_NOT_OWNER'); + require(_maxSwapPriceImpact > 0 && _maxSwapPriceImpact < 10000, 'DXswapFeeSplitter: FORBIDDEN_PRICE_IMPACT'); + maxSwapPriceImpact = _maxSwapPriceImpact; + } + + // called by the owner to set external fee receiver address + function setExternalFeeReceiver(address _pair, address _externalReceiver) external { + require(msg.sender == owner, 'DXswapFeeSplitter: CALLER_NOT_OWNER'); + externalFeeReceivers[_pair].externalReceiver = _externalReceiver; + } + + // called by the owner to set fee percentage to external receiver + function setFeePercentageToExternalReceiver(address _pair, uint16 _feePercentageToExternalReceiver) external { + require(msg.sender == owner, 'DXswapFeeSplitter: CALLER_NOT_OWNER'); + IDXswapPair swapPair = IDXswapPair(_pair); + uint256 feeReceiverBalance = swapPair.balanceOf(address(this)); + if (feeReceiverBalance > 0) { + // withdraw accumulated fees before updating the split percentage + address token0 = swapPair.token0(); + address token1 = swapPair.token1(); + swapPair.transfer(address(swapPair), feeReceiverBalance); + (uint256 amount0, uint256 amount1) = swapPair.burn(address(this)); + if (amount0 > 0) _takeTokenOrETH(address(swapPair), token0, amount0); + if (amount1 > 0) _takeTokenOrETH(address(swapPair), token1, amount1); + emit TakeProtocolFee(msg.sender, ethReceiver, 1); + } + require(swapPair.balanceOf(address(this)) == 0, 'DXswapFeeSplitter: TOKENS_NOT_BURNED'); + + // fee percentage check + require( + _feePercentageToExternalReceiver >= 0 && _feePercentageToExternalReceiver <= 5000, + 'DXswapFeeSplitter: FORBIDDEN_FEE_PERCENTAGE_SPLIT' + ); + // update the split percentage for specific pair + externalFeeReceivers[_pair].feePercentage = _feePercentageToExternalReceiver; + } + // Done with code form DXswapRouter and DXswapLibrary, removed the deadline argument function _swapTokensForETH(uint256 amountIn, address fromToken) internal returns (uint256 amountOut) { IDXswapPair pairToUse = IDXswapPair(factory.getPair(fromToken, nativeCurrencyWrapper)); @@ -84,32 +136,9 @@ contract DXswapFeeSplitter { pairToUse.swap(amount0Out, amount1Out, address(this), new bytes(0)); } - // Helper function to know if token-nativeCurrencyWrapper pool exists and has enough liquidity - function _isSwapPossible( - address token0, - address token1, - uint256 amount - ) internal view returns (bool) { - address pair = factory.getPair(token0, token1); - if (pair == address(0)) return false; - - (uint256 reserve0, uint256 reserve1, ) = IDXswapPair(pair).getReserves(); - (uint256 reserveIn, uint256 reserveOut) = token0 < token1 ? (reserve0, reserve1) : (reserve1, reserve0); - if (reserveIn == 0 || reserveOut == 0) return false; - - uint256 priceImpact = (amount * 10000) / (reserveIn + amount); // simplified formula - if (priceImpact > maxSwapPriceImpact) return false; - - return true; - } - // Checks if LP has an extra external address which participates in the distrubution of protocol fee // External Receiver address has to be defined and fee % > 0 to transfer tokens - function _splitAndTransferFee( - address pair, - address token, - uint256 amount - ) internal { + function _splitAndTransferFee(address pair, address token, uint256 amount) internal { address _externalFeeReceiver = externalFeeReceivers[pair].externalReceiver; uint16 _percentFeeToExternalReceiver = externalFeeReceivers[pair].feePercentage; @@ -135,11 +164,7 @@ contract DXswapFeeSplitter { } // Convert tokens into ETH if possible, if not just transfer the token - function _takeTokenOrETH( - address pair, - address token, - uint256 amount - ) internal { + function _takeTokenOrETH(address pair, address token, uint256 amount) internal { if (token != nativeCurrencyWrapper && _isSwapPossible(token, nativeCurrencyWrapper, amount)) { // If it is not nativeCurrencyWrapper and there is a direct path to nativeCurrencyWrapper, swap tokens uint256 amountOut = _swapTokensForETH(amount, token); @@ -150,55 +175,18 @@ contract DXswapFeeSplitter { } } - // Take what was charged as protocol fee from the DXswap pair liquidity - function takeProtocolFee(IDXswapPair[] calldata pairs) external { - for (uint256 i = 0; i < pairs.length; i++) { - address token0 = pairs[i].token0(); - address token1 = pairs[i].token1(); - pairs[i].transfer(address(pairs[i]), pairs[i].balanceOf(address(this))); - (uint256 amount0, uint256 amount1) = pairs[i].burn(address(this)); - if (amount0 > 0) _takeTokenOrETH(address(pairs[i]), token0, amount0); - if (amount1 > 0) _takeTokenOrETH(address(pairs[i]), token1, amount1); - } - emit TakeProtocolFee(msg.sender, ethReceiver, pairs.length); - } - - // called by the owner to set maximum swap price impact allowed for single token-nativeCurrencyWrapper swap (within 0-100% range) - function setMaxSwapPriceImpact(uint16 _maxSwapPriceImpact) external { - require(msg.sender == owner, 'DXswapFeeSplitter: CALLER_NOT_OWNER'); - require(_maxSwapPriceImpact > 0 && _maxSwapPriceImpact < 10000, 'DXswapFeeSplitter: FORBIDDEN_PRICE_IMPACT'); - maxSwapPriceImpact = _maxSwapPriceImpact; - } + // Helper function to know if token-nativeCurrencyWrapper pool exists and has enough liquidity + function _isSwapPossible(address token0, address token1, uint256 amount) internal view returns (bool) { + address pair = factory.getPair(token0, token1); + if (pair == address(0)) return false; - // called by the owner to set external fee receiver address - function setExternalFeeReceiver(address _pair, address _externalReceiver) external { - require(msg.sender == owner, 'DXswapFeeSplitter: CALLER_NOT_OWNER'); - externalFeeReceivers[_pair].externalReceiver = _externalReceiver; - } + (uint256 reserve0, uint256 reserve1, ) = IDXswapPair(pair).getReserves(); + (uint256 reserveIn, uint256 reserveOut) = token0 < token1 ? (reserve0, reserve1) : (reserve1, reserve0); + if (reserveIn == 0 || reserveOut == 0) return false; - // called by the owner to set fee percentage to external receiver - function setFeePercentageToExternalReceiver(address _pair, uint16 _feePercentageToExternalReceiver) external { - require(msg.sender == owner, 'DXswapFeeSplitter: CALLER_NOT_OWNER'); - IDXswapPair swapPair = IDXswapPair(_pair); - uint256 feeReceiverBalance = swapPair.balanceOf(address(this)); - if (feeReceiverBalance > 0) { - // withdraw accumulated fees before updating the split percentage - address token0 = swapPair.token0(); - address token1 = swapPair.token1(); - swapPair.transfer(address(swapPair), feeReceiverBalance); - (uint256 amount0, uint256 amount1) = swapPair.burn(address(this)); - if (amount0 > 0) _takeTokenOrETH(address(swapPair), token0, amount0); - if (amount1 > 0) _takeTokenOrETH(address(swapPair), token1, amount1); - emit TakeProtocolFee(msg.sender, ethReceiver, 1); - } - require(swapPair.balanceOf(address(this)) == 0, 'DXswapFeeSplitter: TOKENS_NOT_BURNED'); + uint256 priceImpact = (amount * 10000) / (reserveIn + amount); // simplified formula + if (priceImpact > maxSwapPriceImpact) return false; - // fee percentage check - require( - _feePercentageToExternalReceiver >= 0 && _feePercentageToExternalReceiver <= 5000, - 'DXswapFeeSplitter: FORBIDDEN_FEE_PERCENTAGE_SPLIT' - ); - // update the split percentage for specific pair - externalFeeReceivers[_pair].feePercentage = _feePercentageToExternalReceiver; + return true; } } diff --git a/hardhat.config.ts b/hardhat.config.ts index f19c6161e..695f31089 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -18,7 +18,7 @@ const config: HardhatUserConfig = { solidity: { compilers: [ { - version: "0.8.15", + version: "0.8.16", settings: { optimizer: { enabled: true, diff --git a/test/DXswapFeeReceiver.spec.ts b/test/DXswapFeeReceiver.spec.ts index 817404a42..7e3cf35b2 100644 --- a/test/DXswapFeeReceiver.spec.ts +++ b/test/DXswapFeeReceiver.spec.ts @@ -33,8 +33,8 @@ describe('DXswapFeeReceiver', () => { let pair23: DXswapPair let pair03: DXswapPair let pair24: DXswapPair - let wethPair: DXswapPair - let wethTkn0Pair: DXswapPair + let wethToken1Pair: DXswapPair + let wethToken0Pair: DXswapPair let WETH: WETH9 beforeEach('assign signers', async function () { @@ -54,13 +54,11 @@ describe('DXswapFeeReceiver', () => { token1 = fixture.token1 token2 = fixture.token2 token3 = fixture.token3 - token4 = fixture.token4 pair01 = fixture.dxswapPair01 pair23 = fixture.dxswapPair23 pair03 = fixture.dxswapPair03 - pair24 = fixture.dxswapPair24 - wethPair = fixture.wethToken1Pair - wethTkn0Pair = fixture.wethToken0Pair + wethToken1Pair = fixture.wethToken1Pair + wethToken0Pair = fixture.wethToken0Pair WETH = fixture.WETH }) @@ -96,9 +94,9 @@ describe('DXswapFeeReceiver', () => { await token3.transfer(pair03.address, tokenAmount) await pair03.mint(dxdao.address, overrides) - await token0.transfer(wethTkn0Pair.address, tokenAmount) - await WETH.transfer(wethTkn0Pair.address, wethAmount) - await wethTkn0Pair.mint(dxdao.address, overrides) + await token0.transfer(wethToken0Pair.address, tokenAmount) + await WETH.transfer(wethToken0Pair.address, wethAmount) + await wethToken0Pair.mint(dxdao.address, overrides) let amountOut = await getAmountOut(pair03, token0.address, amountIn); @@ -124,7 +122,7 @@ describe('DXswapFeeReceiver', () => { const token0FromProtocolFee = protocolFeeLPToknesReceived .mul(await token0.balanceOf(pair03.address)).div(await pair03.totalSupply()); - const wethFromToken0FromProtocolFee = await getAmountOut(wethTkn0Pair, token0.address, token0FromProtocolFee); + const wethFromToken0FromProtocolFee = await getAmountOut(wethToken0Pair, token0.address, token0FromProtocolFee); const protocolFeeReceiverBalanceBeforeTake = await provider.getBalance(protocolFeeReceiver.address) await feeReceiver.connect(dxdao).takeProtocolFee([pair03.address], overrides) @@ -146,47 +144,47 @@ describe('DXswapFeeReceiver', () => { const wethAmount = expandTo18Decimals(40); const amountIn = expandTo18Decimals(20); - await token1.transfer(wethPair.address, tokenAmount, overrides) - await WETH.transfer(wethPair.address, wethAmount, overrides) - await wethPair.mint(dxdao.address, overrides) + await token1.transfer(wethToken1Pair.address, tokenAmount, overrides) + await WETH.transfer(wethToken1Pair.address, wethAmount, overrides) + await wethToken1Pair.mint(dxdao.address, overrides) const token1IsFirstToken = (token1.address < WETH.address) - let amountOut = await getAmountOut(wethPair, token1.address, amountIn); - await token1.transfer(wethPair.address, amountIn, overrides) - await wethPair.swap( + let amountOut = await getAmountOut(wethToken1Pair, token1.address, amountIn); + await token1.transfer(wethToken1Pair.address, amountIn, overrides) + await wethToken1Pair.swap( token1IsFirstToken ? 0 : amountOut, token1IsFirstToken ? amountOut : 0, dxdao.address, '0x', overrides ) - amountOut = await getAmountOut(wethPair, WETH.address, amountIn); - await WETH.transfer(wethPair.address, amountIn, overrides) - await wethPair.swap( + amountOut = await getAmountOut(wethToken1Pair, WETH.address, amountIn); + await WETH.transfer(wethToken1Pair.address, amountIn, overrides) + await wethToken1Pair.swap( token1IsFirstToken ? amountOut : 0, token1IsFirstToken ? 0 : amountOut, dxdao.address, '0x', overrides ) - const protocolFeeToReceive = await calcProtocolFee(wethPair, factory); + const protocolFeeToReceive = await calcProtocolFee(wethToken1Pair, factory); - await token1.transfer(wethPair.address, expandTo18Decimals(10), overrides) - await WETH.transfer(wethPair.address, expandTo18Decimals(10), overrides) - await wethPair.mint(dxdao.address, overrides) + await token1.transfer(wethToken1Pair.address, expandTo18Decimals(10), overrides) + await WETH.transfer(wethToken1Pair.address, expandTo18Decimals(10), overrides) + await wethToken1Pair.mint(dxdao.address, overrides) - const protocolFeeLPToknesReceived = await wethPair.balanceOf(feeReceiver.address); + const protocolFeeLPToknesReceived = await wethToken1Pair.balanceOf(feeReceiver.address); expect(protocolFeeLPToknesReceived.div(ROUND_EXCEPTION)) .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) const token1FromProtocolFee = protocolFeeLPToknesReceived - .mul(await token1.balanceOf(wethPair.address)).div(await wethPair.totalSupply()); + .mul(await token1.balanceOf(wethToken1Pair.address)).div(await wethToken1Pair.totalSupply()); const wethFromProtocolFee = protocolFeeLPToknesReceived - .mul(await WETH.balanceOf(wethPair.address)).div(await wethPair.totalSupply()); + .mul(await WETH.balanceOf(wethToken1Pair.address)).div(await wethToken1Pair.totalSupply()); - const swapFee = BigNumber.from(await wethPair.swapFee()) - const token1ReserveBeforeSwap = (await token1.balanceOf(wethPair.address)).sub(token1FromProtocolFee) - const wethReserveBeforeSwap = (await WETH.balanceOf(wethPair.address)).sub(wethFromProtocolFee) + const swapFee = BigNumber.from(await wethToken1Pair.swapFee()) + const token1ReserveBeforeSwap = (await token1.balanceOf(wethToken1Pair.address)).sub(token1FromProtocolFee) + const wethReserveBeforeSwap = (await WETH.balanceOf(wethToken1Pair.address)).sub(wethFromProtocolFee) const wethFromToken1FromProtocolFee = await getAmountOutSync( token1IsFirstToken ? token1ReserveBeforeSwap : wethReserveBeforeSwap, token1IsFirstToken ? wethReserveBeforeSwap : token1ReserveBeforeSwap, @@ -197,7 +195,7 @@ describe('DXswapFeeReceiver', () => { const protocolFeeReceiverBalanceBeforeTake = await provider.getBalance(protocolFeeReceiver.address) - await feeReceiver.connect(dxdao).takeProtocolFee([wethPair.address], overrides) + await feeReceiver.connect(dxdao).takeProtocolFee([wethToken1Pair.address], overrides) expect(await token1.balanceOf(feeReceiver.address)).to.eq(0) expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) @@ -267,103 +265,6 @@ describe('DXswapFeeReceiver', () => { .to.be.eq(protocolFeeReceiverBalance) }) - it( - 'should receive only tokens when extracting fee from both token2-tonken3 pair and token2-token4 pair', - async () => { - const tokenAmount = expandTo18Decimals(100); - const amountIn = expandTo18Decimals(50); - - await token2.transfer(pair23.address, tokenAmount) - await token3.transfer(pair23.address, tokenAmount) - await pair23.mint(dxdao.address, overrides) - - let amountOut = await getAmountOut(pair23, token2.address, amountIn); - await token2.transfer(pair23.address, amountIn) - await pair23.swap( - (token2.address < token3.address) ? 0 : amountOut, - (token2.address < token3.address) ? amountOut : 0, - dxdao.address, '0x', overrides - ) - - amountOut = await getAmountOut(pair23, token3.address, amountIn); - await token3.transfer(pair23.address, amountIn) - await pair23.swap( - (token2.address < token3.address) ? amountOut : 0, - (token2.address < token3.address) ? 0 : amountOut, - dxdao.address, '0x', overrides - ) - - let protocolFeeToReceive = await calcProtocolFee(pair23, factory); - - await token2.transfer(pair23.address, expandTo18Decimals(10)) - await token3.transfer(pair23.address, expandTo18Decimals(10)) - await pair23.mint(dxdao.address, overrides) - - const protocolFeeLPpair23 = await pair23.balanceOf(feeReceiver.address); - expect(protocolFeeLPpair23.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - await token2.transfer(pair24.address, tokenAmount) - await token4.transfer(pair24.address, tokenAmount) - await pair24.mint(dxdao.address, overrides) - - amountOut = await getAmountOut(pair24, token2.address, amountIn); - await token2.transfer(pair24.address, amountIn) - await pair24.swap( - (token2.address < token4.address) ? 0 : amountOut, - (token2.address < token4.address) ? amountOut : 0, - dxdao.address, '0x', overrides - ) - - amountOut = await getAmountOut(pair24, token4.address, amountIn); - await token4.transfer(pair24.address, amountIn) - await pair24.swap( - (token2.address < token4.address) ? amountOut : 0, - (token2.address < token4.address) ? 0 : amountOut, - dxdao.address, '0x', overrides - ) - - protocolFeeToReceive = await calcProtocolFee(pair24, factory); - - await token2.transfer(pair24.address, expandTo18Decimals(10)) - await token4.transfer(pair24.address, expandTo18Decimals(10)) - await pair24.mint(dxdao.address, overrides) - - const protocolFeeLPPair24 = await pair24.balanceOf(feeReceiver.address); - expect(protocolFeeLPPair24.div(ROUND_EXCEPTION)) - .to.be.eq(protocolFeeToReceive.div(ROUND_EXCEPTION)) - - const token2FromPair23 = protocolFeeLPpair23 - .mul(await token2.balanceOf(pair23.address)).div(await pair23.totalSupply()); - const token3FromPair23 = protocolFeeLPpair23 - .mul(await token3.balanceOf(pair23.address)).div(await pair23.totalSupply()); - const token2FromPair24 = protocolFeeLPPair24 - .mul(await token2.balanceOf(pair24.address)).div(await pair24.totalSupply()); - const token4FromPair24 = protocolFeeLPPair24 - .mul(await token4.balanceOf(pair24.address)).div(await pair24.totalSupply()); - - const protocolFeeReceiverBalance = await provider.getBalance(protocolFeeReceiver.address) - - await feeReceiver.connect(dxdao).takeProtocolFee([pair23.address, pair24.address], overrides) - - expect(await provider.getBalance(protocolFeeReceiver.address)).to.eq(protocolFeeReceiverBalance.toString()) - - expect(await token2.balanceOf(feeReceiver.address)).to.eq(0) - expect(await token3.balanceOf(feeReceiver.address)).to.eq(0) - expect(await token4.balanceOf(feeReceiver.address)).to.eq(0) - expect(await WETH.balanceOf(feeReceiver.address)).to.eq(0) - expect(await provider.getBalance(feeReceiver.address)).to.eq(0) - - expect((await provider.getBalance(protocolFeeReceiver.address))) - .to.be.eq(protocolFeeReceiverBalance) - expect((await token3.balanceOf(fallbackReceiver.address))) - .to.be.eq(token3FromPair23) - expect((await token4.balanceOf(fallbackReceiver.address))) - .to.be.eq(token4FromPair24) - expect((await token2.balanceOf(fallbackReceiver.address))) - .to.be.eq(token2FromPair23.add(token2FromPair24)) - }) - it( 'should only allow owner to transfer ownership', async () => { diff --git a/test/DXswapPair.spec.ts b/test/DXswapPair.spec.ts index 0a843141e..2eff2a21f 100644 --- a/test/DXswapPair.spec.ts +++ b/test/DXswapPair.spec.ts @@ -6,6 +6,7 @@ import { BigNumber, constants } from 'ethers' import { pairFixture } from './shared/fixtures' import { DXswapFactory, DXswapFeeReceiver, DXswapFeeSetter, DXswapPair, ERC20 } from './../typechain' import { encodePrice, expandTo18Decimals, mineBlock } from './shared/utilities'; +import { time } from '@nomicfoundation/hardhat-network-helpers' const MINIMUM_LIQUIDITY = BigNumber.from(10).pow(3) const ROUND_EXCEPTION = BigNumber.from(10).pow(4) diff --git a/yarn.lock b/yarn.lock index 4b12ba0f2..8b926b4b7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -962,7 +962,6 @@ resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== dependencies: - "@types/minimatch" "*" "@types/node" "*" "@types/form-data@0.0.33": @@ -1525,19 +1524,6 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -1572,13 +1558,6 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bip66@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/bip66/-/bip66-1.1.5.tgz#01fa8748785ca70955d5011217d1b3139969ca22" - integrity sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI= - dependencies: - safe-buffer "^5.0.1" - blakejs@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" @@ -1609,7 +1588,7 @@ bn.js@^5.1.2: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== -bn.js@^5.1.3, bn.js@^5.2.1: +bn.js@^5.1.3, bn.js@^5.2.0, bn.js@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== @@ -1662,7 +1641,7 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.0.6, browserify-aes@^1.2.0: +browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== @@ -2004,15 +1983,6 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w== - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -2170,11 +2140,6 @@ cookiejar@^2.1.1: resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== - core-js-pure@^3.0.1: version "3.6.5" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" @@ -2494,15 +2459,6 @@ dotenv@^10.0.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== -drbg.js@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/drbg.js/-/drbg.js-1.0.1.tgz#3e36b6c42b37043823cdbc332d58f31e2445480b" - integrity sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs= - dependencies: - browserify-aes "^1.0.6" - create-hash "^1.1.2" - create-hmac "^1.1.4" - duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" @@ -2565,11 +2521,6 @@ emoji-regex@^10.1.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.1.0.tgz#d50e383743c0f7a5945c47087295afc112e3cf66" integrity sha512-xAEnNCT3w2Tg6MA7ly6QqYJvEoY1tm9iIjJ3yMKK9JPlWuRHAMoe5iETwQnx3M9TVbFMfsrBgWKR+IsmswwNjg== -emoji-regex@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.1.0.tgz#d50e383743c0f7a5945c47087295afc112e3cf66" - integrity sha512-xAEnNCT3w2Tg6MA7ly6QqYJvEoY1tm9iIjJ3yMKK9JPlWuRHAMoe5iETwQnx3M9TVbFMfsrBgWKR+IsmswwNjg== - emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -3047,34 +2998,22 @@ ethereumjs-util@^6.0.0: "@types/bn.js" "^4.11.3" bn.js "^4.11.0" create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" ethjs-util "0.1.6" + keccak "^2.0.0" rlp "^2.2.3" + secp256k1 "^3.0.1" ethereumjs-util@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== dependencies: + "@types/bn.js" "^4.11.3" bn.js "^4.11.0" create-hash "^1.1.2" elliptic "^6.5.2" ethereum-cryptography "^0.1.3" - ethjs-util "^0.1.3" - rlp "^2.0.0" - safe-buffer "^5.1.1" - -ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.0.tgz#23ec79b2488a7d041242f01e25f24e5ad0357960" - integrity sha512-vb0XN9J2QGdZGIEKG2vXM+kUdEivUfU6Wmi5y0cg+LRhDYKnXIZ/Lz7XjFbHRR9VIKq2lVGLzGBkA++y2nOdOQ== - dependencies: - "@types/bn.js" "^4.11.3" - bn.js "^4.11.0" - create-hash "^1.1.2" ethjs-util "0.1.6" - keccak "^2.0.0" rlp "^2.2.3" ethereumjs-util@^7.0.10, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.3, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: @@ -3181,7 +3120,7 @@ ethjs-unit@0.1.6: bn.js "4.11.6" number-to-bn "1.7.0" -ethjs-util@0.1.6, ethjs-util@^0.1.6: +ethjs-util@0.1.6, ethjs-util@^0.1.3, ethjs-util@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== @@ -3207,19 +3146,6 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - express@^4.14.0: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -3277,20 +3203,6 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -3370,16 +3282,6 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -3422,14 +3324,6 @@ find-up@5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA== - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -3516,15 +3410,6 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -3696,11 +3581,6 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== - getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -4210,11 +4090,6 @@ idna-uts46-hx@^2.3.1: dependencies: punycode "2.1.0" -ieee754@1.1.13, ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -4340,20 +4215,6 @@ ipaddr.js@1.9.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - is-arguments@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" @@ -4393,27 +4254,6 @@ is-core-module@^2.9.0: dependencies: has "^1.0.3" -is-core-module@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" - integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== - dependencies: - has "^1.0.3" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - is-date-object@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" @@ -4473,13 +4313,6 @@ is-negative-zero@^2.0.1: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== - dependencies: - kind-of "^3.0.2" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -4562,18 +4395,6 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -4698,11 +4519,6 @@ jsonschema@^1.2.4: resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== -jsonschema@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" - integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== - jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -4750,13 +4566,6 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw== - dependencies: - invert-kv "^1.0.0" - level-codec@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.1.tgz#042f4aa85e56d4328ace368c950811ba802b7247" @@ -5150,14 +4959,6 @@ minizlib@^1.2.1: dependencies: minipass "^2.9.0" -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - mkdirp-promise@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" @@ -5249,66 +5050,6 @@ mocha@^7.1.1: yargs-parser "13.1.2" yargs-unparser "1.6.0" -mocha@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604" - integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== - dependencies: - ansi-colors "3.2.3" - browser-stdout "1.3.1" - chokidar "3.3.0" - debug "3.2.6" - diff "3.5.0" - escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" - growl "1.10.5" - he "1.2.0" - js-yaml "3.13.1" - log-symbols "3.0.0" - minimatch "3.0.4" - mkdirp "0.5.5" - ms "2.1.1" - node-environment-flags "1.0.6" - object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" - wide-align "1.1.3" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.0" - -mocha@^9.2.0: - version "9.2.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" - integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== - dependencies: - "@ungap/promise-all-settled" "1.1.2" - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.3" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - growl "1.10.5" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "4.2.1" - ms "2.1.3" - nanoid "3.3.1" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - which "2.0.2" - workerpool "6.2.0" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - mock-fs@^4.1.0: version "4.11.0" resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.11.0.tgz#0828107e4b843a6ba855ecebfe3c6e073b69db92" @@ -6154,11 +5895,6 @@ require-from-string@^2.0.0, require-from-string@^2.0.2: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug== - require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -6251,6 +5987,13 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rlp@^2.0.0: + version "2.2.7" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + rlp@^2.2.3: version "2.2.4" resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.4.tgz#d6b0e1659e9285fc509a5d169a9bd06f704951c1" @@ -6304,13 +6047,6 @@ safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== - dependencies: - ret "~0.1.10" - "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -6346,20 +6082,6 @@ scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== -secp256k1@^3.0.1: - version "3.8.0" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-3.8.0.tgz#28f59f4b01dbee9575f56a47034b7d2e3b3b352d" - integrity sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw== - dependencies: - bindings "^1.5.0" - bip66 "^1.1.5" - bn.js "^4.11.8" - create-hash "^1.2.0" - drbg.js "^1.0.1" - elliptic "^6.5.2" - nan "^2.14.0" - safe-buffer "^5.1.2" - secp256k1@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1" @@ -6568,14 +6290,13 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -solc@0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" - integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== +solc@0.5.16: + version "0.5.16" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.5.16.tgz#6c8d710a3792ccc79db924606b558a1149b1c603" + integrity sha512-weEtRtisJyf+8UjELs7S4ST1KK7UIq6SRB7tpprfJBL9b5mTrZAT7m4gJKi2h6MiBpuSWfnraK8BnkyWzuTMRA== dependencies: command-exists "^1.2.8" commander "3.0.2" - follow-redirects "^1.12.1" fs-extra "^0.30.0" js-sha3 "0.8.0" memorystream "^0.3.1" @@ -7022,14 +6743,6 @@ to-readable-stream@^1.0.0: resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -7037,16 +6750,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" @@ -7109,11 +6812,6 @@ tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - tsort@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" @@ -7278,14 +6976,6 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -7293,11 +6983,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== - url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" @@ -7807,19 +7492,6 @@ xhr@^2.0.4, xhr@^2.3.3: parse-headers "^2.0.0" xtend "^4.0.0" -xml2js@0.4.19: - version "0.4.19" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" - integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== - dependencies: - sax ">=0.6.0" - xmlbuilder "~9.0.1" - -xmlbuilder@~9.0.1: - version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - integrity sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ== - xmlhttprequest@1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" @@ -7868,14 +7540,6 @@ yargs-parser@20.2.4: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== -yargs-parser@^13.1.1: - version "13.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" - integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^20.2.2: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" @@ -7938,23 +7602,7 @@ yargs@^13.3.0: find-up "^3.0.0" get-caller-file "^2.0.1" require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^4.7.1: - version "4.8.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" - integrity sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA== - dependencies: - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - lodash.assign "^4.0.3" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" + require-main-filename "^2.0.0" set-blocking "^2.0.0" string-width "^3.0.0" which-module "^2.0.0"