Contract 0x51d493c9788f4b6f87eae50f555dd671c4cf653e 1

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xbdad99784661506f20f0d126d6cf9f8b7ad67055d7aeca5338a7f0877eefcd2bApprove469290712022-09-14 11:35:3213 days 11 hrs ago0x8c194ff0955a9de6c4851c825d422d9f22da8fe8 IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.000116135
0x63f7257e1dfe9855578fa5431feecdddc09b4e44b61ffd7e86c4a32a969cd892Approve461923562022-09-02 8:56:5125 days 14 hrs ago0x51a0d39666247200d834ffcdf2ec4bf18271426b IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.000116135
0x08abed5a1dec9a5e9f938a8ae4e9d234ac69da2b5db63a4c81b96c1461206481Approve461922292022-09-02 8:54:3525 days 14 hrs ago0x51a0d39666247200d834ffcdf2ec4bf18271426b IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.000064045
0x19fa331633c717531d738aa15fc648e94de754b19af92a55363a7abe82355902Approve461537502022-09-01 19:40:2326 days 3 hrs ago0x51a0d39666247200d834ffcdf2ec4bf18271426b IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.001130521395
0x17789ff2e98941d4429dd40ca180d431fce68e963e8752718e46ec7d9b56e2ddApprove461517642022-09-01 18:57:5926 days 4 hrs ago0x51a0d39666247200d834ffcdf2ec4bf18271426b IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.000075381905
0x334ac5b08a151a0a703c618f8f8a71e55c60b6566f7eb792dd38f7689b94dee5Approve461513332022-09-01 18:49:4426 days 4 hrs ago0x51a0d39666247200d834ffcdf2ec4bf18271426b IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.000115029534
0x95a9e0e898760cacffe2fa2b8c81479476fc4970553883bcb0c31c7fdc212801Approve461512312022-09-01 18:47:3026 days 4 hrs ago0x51a0d39666247200d834ffcdf2ec4bf18271426b IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.000077020182
0x712bb832c8ce952b91038c742148cff3537bd78ade204f2637e5f4a2e46a0e32Approve461511582022-09-01 18:46:0926 days 4 hrs ago0x51a0d39666247200d834ffcdf2ec4bf18271426b IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.000086804174
0xdfabd40a721627b6220d273b45b1d5c7144c2eca209db747939ffd3b04ad82cbApprove461509922022-09-01 18:43:0226 days 4 hrs ago0x51a0d39666247200d834ffcdf2ec4bf18271426b IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.000077020182
0x2aa77965d334c3883c50d4f8895687c3fe6b8fb2ac03d20cb2720868e2913ac2Approve461491922022-09-01 18:07:3526 days 4 hrs ago0x51a0d39666247200d834ffcdf2ec4bf18271426b IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.000478356811
0x2cb8df623da763e1b07833caef4520337383a2d108bcf6824ef9feb0ad1e5982Approve438096502022-07-29 18:41:0360 days 4 hrs ago0x3ac9ff7cf08bb1a18571e0b02322edc949c02d80 IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.00018092651
0xa14cc4ca094a1c43626ea0861575a05ed2ac0216548352d02592719c7187a8fbApprove437830752022-07-29 9:01:4360 days 14 hrs ago0x757056e3ab3c65c6c8c710f7e6f9a8327cc6bae7 IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.000145618507
0xfee180df267e5458856d2b0ef3061e0c9b1c086862645c409db2c16452ab383cApprove434268482022-07-24 5:44:1965 days 17 hrs ago0xc9c17b24a3e97783c018ee20259502341ce09732 IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.001898664147
0xf753cb289b7e7ae02620cae0ee26f5ccf44cafff38b4836883b4e86f945a760eApprove422955042022-07-08 10:46:1781 days 12 hrs ago0xba7f59244ecb7c951ba057205180519dd7e97761 IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.000143304532
0xbdf16615603fb091ca2a5111a87ba046e972633d4fc1e0f346d658f9f46de06cApprove406677132022-06-16 20:13:47103 days 2 hrs ago0x9df2a4918acbe781b55d14f79a1f97058e24d953 IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.116135
0x4e000514caf77794d91d2bdd3bf5a77ba3631255cfd901947c41cbf91bdc580cApprove400872782022-06-08 20:26:23111 days 2 hrs ago0x02a97382e09a4e5aea6e1389b6d5689511b8f3d2 IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.00108420464
0xe9023a849f86d56b47c6b9b920c04723ec298f918b0bf02b154e6777b4582e1aApprove389437872022-05-24 9:36:53126 days 13 hrs ago0xe62c6205e8c64761b7c15ceb276a8657863c8959 IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.008447985036
0x7dfe7a519759a23bb0a1fce3923abd063e8b2a39cbf6594ec5e7e2de3f1a8df5Approve377679892022-05-07 15:18:01143 days 7 hrs ago0x55c76a4e94e085dafcc769404ffbb5592b51ad40 IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.007926241622
0xc6bac8e10fe41aa996deafcf836045101a84bab5b109e481a2026743ea1afa4dApprove375664482022-05-04 23:18:55145 days 23 hrs ago0xde51aa6a0c60449912bb0787514fd7a5803bc17f IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.008504124737
0xdb1a80030e6e0d303905f4a68c74f714a20aa3077ddfe1e36872db63139efb7dApprove375332722022-05-04 13:05:39146 days 9 hrs ago0x1abceb40467b2e14992ed76fad18bd935e23e506 IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.01083389039
0x1a80335d315d9d98a29165b5da66538de4ff26c524cb1689b1a36521ac3a7194Approve375189292022-05-04 8:20:27146 days 14 hrs ago0xaef5243b0a9ecfaeb432929d13e000779fea5ee4 IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.006775631787
0x0f98e17be719db6886898b8ebe900e02c45b1f454cbbea37dea4a9a40d4cec4fApprove374391792022-05-03 6:24:43147 days 16 hrs ago0xec85f096227ade9efa7df91e31d83710017acaaa IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.016267139978
0x8bc57b39d6f1fc289a563efa0be72c159658a785e85290b800a905a274f6f90dApprove373884352022-05-02 11:04:10148 days 12 hrs ago0xcbf91db7192f95e4fa6bcfaf8e47aad40c4d083e IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.012709691924
0x32cc0791cd1815e8f27eea8fbc8d251ded8b64b3acc345ab27588dabdc933638Approve373801102022-05-02 8:10:24148 days 14 hrs ago0xdfaaec16aa49ae413dca692b504b08c70765d1ec IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.009799178009
0xe0a54f28a3d115fbf2603440086962a2c70c0229956caf0f600f9b000507aa66Approve373347172022-05-01 14:08:55149 days 8 hrs ago0x5cf57fd8c76c85fd1cb3826d8589ad2d84f52835 IN  0x51d493c9788f4b6f87eae50f555dd671c4cf653e0 FTM0.014394323375
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x2131d97d300f3b899aa1fdd17176c8527afb2b4464683af986a76d2eeee7441b197601442021-10-22 12:48:43340 days 10 hrs ago 0xc5bc174cb6382fbab17771d05e6a918441deceea  Contract Creation0 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UniswapV2Pair

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2022-01-17
*/

// SPDX-License-Identifier: GPL-3.0-or-later

// File: contracts/uniswapv2/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function migrator() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
    function setMigrator(address) external;
}

// File: contracts/uniswapv2/libraries/SafeMath.sol

pragma solidity =0.6.12;

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)

library SafeMathUniswap {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x, 'ds-math-sub-underflow');
    }

    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');
    }
}

// File: contracts/uniswapv2/UniswapV2ERC20.sol

pragma solidity =0.6.12;


contract UniswapV2ERC20 {
    using SafeMathUniswap for uint;

    string public constant name = 'YOSHI LP Token';
    string public constant symbol = 'YLP';
    uint8 public constant decimals = 18;
    uint  public totalSupply;
    mapping(address => uint) public balanceOf;
    mapping(address => mapping(address => uint)) public allowance;

    bytes32 public DOMAIN_SEPARATOR;
    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;
    mapping(address => uint) public nonces;

    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    constructor() public {
        uint chainId;
        assembly {
            chainId := chainid()
        }
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
                keccak256(bytes(name)),
                keccak256(bytes('1')),
                chainId,
                address(this)
            )
        );
    }

    function _mint(address to, uint value) internal {
        totalSupply = totalSupply.add(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(address(0), to, value);
    }

    function _burn(address from, uint value) internal {
        balanceOf[from] = balanceOf[from].sub(value);
        totalSupply = totalSupply.sub(value);
        emit Transfer(from, address(0), value);
    }

    function _approve(address owner, address spender, uint value) private {
        allowance[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    function _transfer(address from, address to, uint value) private {
        balanceOf[from] = balanceOf[from].sub(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(from, to, value);
    }

    function approve(address spender, uint value) external returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    function transfer(address to, uint value) external returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    function transferFrom(address from, address to, uint value) external returns (bool) {
        if (allowance[from][msg.sender] != uint(-1)) {
            allowance[from][msg.sender] = allowance[from][msg.sender].sub(value);
        }
        _transfer(from, to, value);
        return true;
    }

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
        require(deadline >= block.timestamp, 'UniswapV2: EXPIRED');
        bytes32 digest = keccak256(
            abi.encodePacked(
                '\x19\x01',
                DOMAIN_SEPARATOR,
                keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline))
            )
        );
        address recoveredAddress = ecrecover(digest, v, r, s);
        require(recoveredAddress != address(0) && recoveredAddress == owner, 'UniswapV2: INVALID_SIGNATURE');
        _approve(owner, spender, value);
    }
}

// File: contracts/uniswapv2/libraries/Math.sol

pragma solidity =0.6.12;

// a library for performing various math operations

library Math {
    function min(uint x, uint y) internal pure returns (uint z) {
        z = x < y ? x : y;
    }

    // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
    function sqrt(uint y) internal pure returns (uint z) {
        if (y > 3) {
            z = y;
            uint x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}

// File: contracts/uniswapv2/libraries/UQ112x112.sol

pragma solidity =0.6.12;

// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))

// range: [0, 2**112 - 1]
// resolution: 1 / 2**112

library UQ112x112 {
    uint224 constant Q112 = 2**112;

    // encode a uint112 as a UQ112x112
    function encode(uint112 y) internal pure returns (uint224 z) {
        z = uint224(y) * Q112; // never overflows
    }

    // divide a UQ112x112 by a uint112, returning a UQ112x112
    function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) {
        z = x / uint224(y);
    }
}

// File: contracts/uniswapv2/interfaces/IERC20.sol

pragma solidity >=0.5.0;

interface IERC20Uniswap {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}

// File: contracts/uniswapv2/interfaces/IUniswapV2Callee.sol

pragma solidity >=0.5.0;

interface IUniswapV2Callee {
    function uniswapV2Call(address sender, uint amount0, uint amount1, bytes calldata data) external;
}

// File: contracts/uniswapv2/UniswapV2Pair.sol

pragma solidity =0.6.12;








interface IMigrator {
    // Return the desired amount of liquidity token that the migrator wants.
    function desiredLiquidity() external view returns (uint256);
}

contract UniswapV2Pair is UniswapV2ERC20 {
    using SafeMathUniswap  for uint;
    using UQ112x112 for uint224;

    uint public constant MINIMUM_LIQUIDITY = 10**3;
    bytes4 private constant SELECTOR = bytes4(keccak256(bytes('transfer(address,uint256)')));

    address public factory;
    address public token0;
    address public token1;

    uint112 private reserve0;           // uses single storage slot, accessible via getReserves
    uint112 private reserve1;           // uses single storage slot, accessible via getReserves
    uint32  private blockTimestampLast; // uses single storage slot, accessible via getReserves

    uint public price0CumulativeLast;
    uint public price1CumulativeLast;
    uint public kLast; // reserve0 * reserve1, as of immediately after the most recent liquidity event

    uint private unlocked = 1;
    modifier lock() {
        require(unlocked == 1, 'UniswapV2: LOCKED');
        unlocked = 0;
        _;
        unlocked = 1;
    }

    function getReserves() public view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast) {
        _reserve0 = reserve0;
        _reserve1 = reserve1;
        _blockTimestampLast = blockTimestampLast;
    }

    function _safeTransfer(address token, address to, uint value) private {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'UniswapV2: TRANSFER_FAILED');
    }

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    constructor() public {
        factory = msg.sender;
    }

    // called once by the factory at time of deployment
    function initialize(address _token0, address _token1) external {
        require(msg.sender == factory, 'UniswapV2: FORBIDDEN'); // sufficient check
        token0 = _token0;
        token1 = _token1;
    }

    // update reserves and, on the first call per block, price accumulators
    function _update(uint balance0, uint balance1, uint112 _reserve0, uint112 _reserve1) private {
        require(balance0 <= uint112(-1) && balance1 <= uint112(-1), 'UniswapV2: OVERFLOW');
        uint32 blockTimestamp = uint32(block.timestamp % 2**32);
        uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired
        if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) {
            // * never overflows, and + overflow is desired
            price0CumulativeLast += uint(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) * timeElapsed;
            price1CumulativeLast += uint(UQ112x112.encode(_reserve0).uqdiv(_reserve1)) * timeElapsed;
        }
        reserve0 = uint112(balance0);
        reserve1 = uint112(balance1);
        blockTimestampLast = blockTimestamp;
        emit Sync(reserve0, reserve1);
    }

    // if fee is on, mint liquidity equivalent to 1/6th of the growth in sqrt(k)
    function _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) {
        address feeTo = IUniswapV2Factory(factory).feeTo();
        feeOn = feeTo != address(0);
        uint _kLast = kLast; // gas savings
        if (feeOn) {
            if (_kLast != 0) {
                uint rootK = Math.sqrt(uint(_reserve0).mul(_reserve1));
                uint rootKLast = Math.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint numerator = totalSupply.mul(rootK.sub(rootKLast));
                    uint denominator = rootK.mul(5).add(rootKLast);
                    uint liquidity = numerator / denominator;
                    if (liquidity > 0) _mint(feeTo, liquidity);
                }
            }
        } else if (_kLast != 0) {
            kLast = 0;
        }
    }

    // this low-level function should be called from a contract which performs important safety checks
    function mint(address to) external lock returns (uint liquidity) {
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        uint balance0 = IERC20Uniswap(token0).balanceOf(address(this));
        uint balance1 = IERC20Uniswap(token1).balanceOf(address(this));
        uint amount0 = balance0.sub(_reserve0);
        uint amount1 = balance1.sub(_reserve1);

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        if (_totalSupply == 0) {
            address migrator = IUniswapV2Factory(factory).migrator();
            if (msg.sender == migrator) {
                liquidity = IMigrator(migrator).desiredLiquidity();
                require(liquidity > 0 && liquidity != uint256(-1), "Bad desired liquidity");
            } else {
                require(migrator == address(0), "Must not have migrator");
                liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);
            }
            _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens
        } else {
            liquidity = Math.min(amount0.mul(_totalSupply) / _reserve0, amount1.mul(_totalSupply) / _reserve1);
        }
        require(liquidity > 0, 'UniswapV2: INSUFFICIENT_LIQUIDITY_MINTED');
        _mint(to, liquidity);

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date
        emit Mint(msg.sender, amount0, amount1);
    }

    // this low-level function should be called from a contract which performs important safety checks
    function burn(address to) external lock returns (uint amount0, uint amount1) {
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        address _token0 = token0;                                // gas savings
        address _token1 = token1;                                // gas savings
        uint balance0 = IERC20Uniswap(_token0).balanceOf(address(this));
        uint balance1 = IERC20Uniswap(_token1).balanceOf(address(this));
        uint liquidity = balanceOf[address(this)];

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        amount0 = liquidity.mul(balance0) / _totalSupply; // using balances ensures pro-rata distribution
        amount1 = liquidity.mul(balance1) / _totalSupply; // using balances ensures pro-rata distribution
        require(amount0 > 0 && amount1 > 0, 'UniswapV2: INSUFFICIENT_LIQUIDITY_BURNED');
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20Uniswap(_token0).balanceOf(address(this));
        balance1 = IERC20Uniswap(_token1).balanceOf(address(this));

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date
        emit Burn(msg.sender, amount0, amount1, to);
    }

    // this low-level function should be called from a contract which performs important safety checks
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external lock {
        require(amount0Out > 0 || amount1Out > 0, 'UniswapV2: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'UniswapV2: INSUFFICIENT_LIQUIDITY');

        uint balance0;
        uint balance1;
        { // scope for _token{0,1}, avoids stack too deep errors
            address _token0 = token0;
            address _token1 = token1;
            require(to != _token0 && to != _token1, 'UniswapV2: INVALID_TO');
            if (amount0Out > 0) _safeTransfer(_token0, to, amount0Out); // optimistically transfer tokens
            if (amount1Out > 0) _safeTransfer(_token1, to, amount1Out); // optimistically transfer tokens
            if (data.length > 0) IUniswapV2Callee(to).uniswapV2Call(msg.sender, amount0Out, amount1Out, data);
            balance0 = IERC20Uniswap(_token0).balanceOf(address(this));
            balance1 = IERC20Uniswap(_token1).balanceOf(address(this));
        }
        uint amount0In = balance0 > _reserve0 - amount0Out ? balance0 - (_reserve0 - amount0Out) : 0;
        uint amount1In = balance1 > _reserve1 - amount1Out ? balance1 - (_reserve1 - amount1Out) : 0;
        require(amount0In > 0 || amount1In > 0, 'UniswapV2: INSUFFICIENT_INPUT_AMOUNT');
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
            uint balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(3));
            uint balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(3));
            require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(1000**2), 'UniswapV2: K');
        }

        _update(balance0, balance1, _reserve0, _reserve1);
        emit Swap(msg.sender, amount0In, amount1In, amount0Out, amount1Out, to);
    }

    // force balances to match reserves
    function skim(address to) external lock {
        address _token0 = token0; // gas savings
        address _token1 = token1; // gas savings
        _safeTransfer(_token0, to, IERC20Uniswap(_token0).balanceOf(address(this)).sub(reserve0));
        _safeTransfer(_token1, to, IERC20Uniswap(_token1).balanceOf(address(this)).sub(reserve1));
    }

    // force reserves to match balances
    function sync() external lock {
        _update(IERC20Uniswap(token0).balanceOf(address(this)), IERC20Uniswap(token1).balanceOf(address(this)), reserve0, reserve1);
    }
}

// File: contracts/uniswapv2/UniswapV2Factory.sol

pragma solidity =0.6.12;



contract UniswapV2Factory is IUniswapV2Factory {
    address public override feeTo;
    address public override feeToSetter;
    address public override migrator;

    mapping(address => mapping(address => address)) public override getPair;
    address[] public override allPairs;

    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    constructor(address _feeToSetter) public {
        feeToSetter = _feeToSetter;
    }

    function allPairsLength() external override view returns (uint) {
        return allPairs.length;
    }

    function pairCodeHash() external pure returns (bytes32) {
        return keccak256(type(UniswapV2Pair).creationCode);
    }

    function createPair(address tokenA, address tokenB) external override returns (address pair) {
        require(tokenA != tokenB, 'UniswapV2: IDENTICAL_ADDRESSES');
        (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'UniswapV2: ZERO_ADDRESS');
        require(getPair[token0][token1] == address(0), 'UniswapV2: PAIR_EXISTS'); // single check is sufficient
        bytes memory bytecode = type(UniswapV2Pair).creationCode;
        bytes32 salt = keccak256(abi.encodePacked(token0, token1));
        assembly {
            pair := create2(0, add(bytecode, 32), mload(bytecode), salt)
        }
        UniswapV2Pair(pair).initialize(token0, token1);
        getPair[token0][token1] = pair;
        getPair[token1][token0] = pair; // populate mapping in the reverse direction
        allPairs.push(pair);
        emit PairCreated(token0, token1, pair, allPairs.length);
    }

    function setFeeTo(address _feeTo) external override {
        require(msg.sender == feeToSetter, 'UniswapV2: FORBIDDEN');
        feeTo = _feeTo;
    }

    function setMigrator(address _migrator) external override {
        require(msg.sender == feeToSetter, 'UniswapV2: FORBIDDEN');
        migrator = _migrator;
    }

    function setFeeToSetter(address _feeToSetter) external override {
        require(msg.sender == feeToSetter, 'UniswapV2: FORBIDDEN');
        feeToSetter = _feeToSetter;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"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"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint32","name":"_blockTimestampLast","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"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"}],"stateMutability":"nonpayable","type":"function"}]

60806040526001600c5534801561001557600080fd5b50604080518082018252600e81526d2ca7a9a424902628102a37b5b2b760911b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f75d58d7ac7b99942cd5bbdcbfe9e85c8a371b14b1fb9a947167ff7bdc49ff5a4818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b031916331790556123748061010c6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610acb565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610af5565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b1f565b604080519115158252519081900360200190f35b610339610b36565b604080516001600160a01b039092168252519081900360200190f35b61035d610b45565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610b4b565b61035d610bdf565b6103b5610c03565b6040805160ff9092168252519081900360200190f35b61035d610c08565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c0e565b61035d610c92565b61035d610c98565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610c9e565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b031661111b565b61035d61112d565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316611133565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611145565b6040805192835260208301919091528051918290030190f35b6102446114d9565b61031d600480360360408110156104e857600080fd5b506001600160a01b0381351690602001356114f8565b61035d611505565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b031661150b565b61033961167d565b61033961168c565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c0013561169b565b61035d600480360360408110156105a357600080fd5b506001600160a01b038135811691602001351661189d565b61023a6118ba565b600c5460011461060e576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c55841515806106215750600084115b61065c5760405162461bcd60e51b81526004018080602001828103825260258152602001806122856025913960400191505060405180910390fd5b600080610667610af5565b5091509150816001600160701b03168710801561068c5750806001600160701b031686105b6106c75760405162461bcd60e51b81526004018080602001828103825260218152602001806122ce6021913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107055750806001600160a01b0316896001600160a01b031614155b61074e576040805162461bcd60e51b8152602060048201526015602482015274556e697377617056323a20494e56414c49445f544f60581b604482015290519081900360640190fd5b8a1561075f5761075f828a8d611a1c565b891561077057610770818a8c611a1c565b861561082257886001600160a01b03166310d1e85c338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561080957600080fd5b505af115801561081d573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561086857600080fd5b505afa15801561087c573d6000803e3d6000fd5b505050506040513d602081101561089257600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108de57600080fd5b505afa1580156108f2573d6000803e3d6000fd5b505050506040513d602081101561090857600080fd5b5051925060009150506001600160701b0385168a9003831161092b57600061093a565b89856001600160701b03160383035b9050600089856001600160701b0316038311610957576000610966565b89856001600160701b03160383035b905060008211806109775750600081115b6109b25760405162461bcd60e51b81526004018080602001828103825260248152602001806122aa6024913960400191505060405180910390fd5b60006109d46109c2846003611bb6565b6109ce876103e8611bb6565b90611c19565b905060006109e66109c2846003611bb6565b9050610a0b620f4240610a056001600160701b038b8116908b16611bb6565b90611bb6565b610a158383611bb6565b1015610a57576040805162461bcd60e51b815260206004820152600c60248201526b556e697377617056323a204b60a01b604482015290519081900360640190fd5b5050610a6584848888611c69565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600e81526020016d2ca7a9a424902628102a37b5b2b760911b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b2c338484611e28565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610bca576001600160a01b0384166000908152600260209081526040808320338452909152902054610ba59083611c19565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610bd5848484611e8a565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610c64576040805162461bcd60e51b81526020600482015260146024820152732ab734b9bbb0b82b191d102327a92124a22222a760611b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610ceb576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c81905580610cfb610af5565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d4f57600080fd5b505afa158015610d63573d6000803e3d6000fd5b505050506040513d6020811015610d7957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610dcc57600080fd5b505afa158015610de0573d6000803e3d6000fd5b505050506040513d6020811015610df657600080fd5b505190506000610e0f836001600160701b038716611c19565b90506000610e26836001600160701b038716611c19565b90506000610e348787611f38565b6000549091508061100c5760055460408051637cd07e4760e01b815290516000926001600160a01b031691637cd07e47916004808301926020929190829003018186803b158015610e8457600080fd5b505afa158015610e98573d6000803e3d6000fd5b505050506040513d6020811015610eae57600080fd5b50519050336001600160a01b0382161415610f8957806001600160a01b03166340dc0e376040518163ffffffff1660e01b815260040160206040518083038186803b158015610efc57600080fd5b505afa158015610f10573d6000803e3d6000fd5b505050506040513d6020811015610f2657600080fd5b505199508915801590610f3b57506000198a14155b610f84576040805162461bcd60e51b81526020600482015260156024820152744261642064657369726564206c697175696469747960581b604482015290519081900360640190fd5b610ff9565b6001600160a01b03811615610fde576040805162461bcd60e51b815260206004820152601660248201527526bab9ba103737ba103430bb329036b4b3b930ba37b960511b604482015290519081900360640190fd5b610ff66103e86109ce610ff18888611bb6565b612078565b99505b61100660006103e86120ca565b5061104f565b61104c6001600160701b0389166110238684611bb6565b8161102a57fe5b046001600160701b03891661103f8685611bb6565b8161104657fe5b04612154565b98505b6000891161108e5760405162461bcd60e51b81526004018080602001828103825260288152602001806123176028913960400191505060405180910390fd5b6110988a8a6120ca565b6110a486868a8a611c69565b81156110ce576008546110ca906001600160701b0380821691600160701b900416611bb6565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c54600114611193576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c819055806111a3610af5565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b1580156111ff57600080fd5b505afa158015611213573d6000803e3d6000fd5b505050506040513d602081101561122957600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561127757600080fd5b505afa15801561128b573d6000803e3d6000fd5b505050506040513d60208110156112a157600080fd5b5051306000908152600160205260408120549192506112c08888611f38565b600054909150806112d18487611bb6565b816112d857fe5b049a50806112e68486611bb6565b816112ed57fe5b04995060008b118015611300575060008a115b61133b5760405162461bcd60e51b81526004018080602001828103825260288152602001806122ef6028913960400191505060405180910390fd5b611345308461216c565b611350878d8d611a1c565b61135b868d8c611a1c565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156113a157600080fd5b505afa1580156113b5573d6000803e3d6000fd5b505050506040513d60208110156113cb57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561141757600080fd5b505afa15801561142b573d6000803e3d6000fd5b505050506040513d602081101561144157600080fd5b5051935061145185858b8b611c69565b811561147b57600854611477906001600160701b0380821691600160701b900416611bb6565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b604051806040016040528060038152602001620594c560ec1b81525081565b6000610b2c338484611e8a565b6103e881565b600c54600114611556576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b0394851694909316926115ff92859287926115fa926001600160701b03169185916370a0823191602480820192602092909190829003018186803b1580156115c857600080fd5b505afa1580156115dc573d6000803e3d6000fd5b505050506040513d60208110156115f257600080fd5b505190611c19565b611a1c565b61167381846115fa6008600e9054906101000a90046001600160701b03166001600160701b0316856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156115c857600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b428410156116e5576040805162461bcd60e51b8152602060048201526012602482015271155b9a5cddd85c158c8e881156141254915160721b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611800573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906118365750886001600160a01b0316816001600160a01b0316145b611887576040805162461bcd60e51b815260206004820152601c60248201527f556e697377617056323a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b611892898989611e28565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611905576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b81523060048201529051611a15926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561195657600080fd5b505afa15801561196a573d6000803e3d6000fd5b505050506040513d602081101561198057600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119cd57600080fd5b505afa1580156119e1573d6000803e3d6000fd5b505050506040513d60208110156119f757600080fd5b50516008546001600160701b0380821691600160701b900416611c69565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611ac95780518252601f199092019160209182019101611aaa565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b2b576040519150601f19603f3d011682016040523d82523d6000602084013e611b30565b606091505b5091509150818015611b5e575080511580611b5e5750808060200190516020811015611b5b57600080fd5b50515b611baf576040805162461bcd60e51b815260206004820152601a60248201527f556e697377617056323a205452414e534645525f4641494c4544000000000000604482015290519081900360640190fd5b5050505050565b6000811580611bd157505080820282828281611bce57fe5b04145b610b30576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b30576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611c8757506001600160701b038311155b611cce576040805162461bcd60e51b8152602060048201526013602482015272556e697377617056323a204f564552464c4f5760681b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611cfe57506001600160701b03841615155b8015611d1257506001600160701b03831615155b15611d7d578063ffffffff16611d3a85611d2b866121fe565b6001600160e01b031690612210565b600980546001600160e01b03929092169290920201905563ffffffff8116611d6584611d2b876121fe565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611ead9082611c19565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611edc9082612235565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611f8957600080fd5b505afa158015611f9d573d6000803e3d6000fd5b505050506040513d6020811015611fb357600080fd5b5051600b546001600160a01b03821615801594509192509061206457801561205f576000611ff0610ff16001600160701b03888116908816611bb6565b90506000611ffd83612078565b90508082111561205c57600061201f6120168484611c19565b60005490611bb6565b9050600061203883612032866005611bb6565b90612235565b9050600081838161204557fe5b04905080156120585761205887826120ca565b5050505b50505b612070565b8015612070576000600b555b505092915050565b600060038211156120bb575080600160028204015b818110156120b5578091506002818285816120a457fe5b0401816120ad57fe5b04905061208d565b506120c5565b81156120c5575060015b919050565b6000546120d79082612235565b60009081556001600160a01b0383168152600160205260409020546120fc9082612235565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106121635781612165565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461218f9082611c19565b6001600160a01b038316600090815260016020526040812091909155546121b69082611c19565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161222d57fe5b049392505050565b80820182811015610b30576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe556e697377617056323a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f494e5055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f4c4951554944495459556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4255524e4544556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4d494e544544a2646970667358221220788682b5e07a6f4925194cfbc577313ab6e1b870171bbd0da6fe114766d6f3d764736f6c634300060c0033

Deployed ByteCode Sourcemap

7764:10201:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15397:1947;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15397:1947:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15397:1947:0;;-1:-1:-1;15397:1947:0;-1:-1:-1;15397:1947:0;:::i;:::-;;1691:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8776:231;;;:::i;:::-;;;;-1:-1:-1;;;;;8776:231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3741:147;;;;;;;;;;;;;;;;-1:-1:-1;3741:147:0;;-1:-1:-1;;;;;3741:147:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;8065:21;;;:::i;:::-;;;;-1:-1:-1;;;;;8065:21:0;;;;;;;;;;;;;;1830:24;;;:::i;:::-;;;;;;;;;;;;;;;;4043:301;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4043:301:0;;;;;;;;;;;;;;;;;:::i;2122:108::-;;;:::i;1788:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1979:31;;;:::i;9836:210::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;9836:210:0;;;;;;;;;;:::i;8416:32::-;;;:::i;8455:::-;;;:::i;12030:1649::-;;;;;;;;;;;;;;;;-1:-1:-1;12030:1649:0;-1:-1:-1;;;;;12030:1649:0;;:::i;1861:41::-;;;;;;;;;;;;;;;;-1:-1:-1;1861:41:0;-1:-1:-1;;;;;1861:41:0;;:::i;8494:17::-;;;:::i;2237:38::-;;;;;;;;;;;;;;;;-1:-1:-1;2237:38:0;-1:-1:-1;;;;;2237:38:0;;:::i;13791:1494::-;;;;;;;;;;;;;;;;-1:-1:-1;13791:1494:0;-1:-1:-1;;;;;13791:1494:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1744:37;;;:::i;3896:139::-;;;;;;;;;;;;;;;;-1:-1:-1;3896:139:0;;-1:-1:-1;;;;;3896:139:0;;;;;;:::i;7886:46::-;;;:::i;17393:348::-;;;;;;;;;;;;;;;;-1:-1:-1;17393:348:0;-1:-1:-1;;;;;17393:348:0;;:::i;8036:22::-;;;:::i;8093:21::-;;;:::i;4352:674::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4352:674:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4352:674:0;;;;;;;;:::i;1909:61::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1909:61:0;;;;;;;;;;:::i;17790:172::-;;;:::i;15397:1947::-;8667:8;;8679:1;8667:13;8659:43;;;;;-1:-1:-1;;;8659:43:0;;;;;;;;;;;;-1:-1:-1;;;8659:43:0;;;;;;;;;;;;;;;8724:1;8713:8;:12;15511:14;;;;:32:::1;;;15542:1;15529:10;:14;15511:32;15503:82;;;;-1:-1:-1::0;;;15503:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15597:17;15616::::0;15638:13:::1;:11;:13::i;:::-;-1:-1:-1::0;15596:55:0;;-1:-1:-1;15596:55:0;-1:-1:-1;;;;;;15685:22:0;::::1;::::0;::::1;:48:::0;::::1;;;-1:-1:-1::0;;;;;;15711:22:0;::::1;::::0;::::1;15685:48;15677:94;;;;-1:-1:-1::0;;;15677:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15920:6;::::0;15959::::1;::::0;15784:13:::1;::::0;;;-1:-1:-1;;;;;15920:6:0;;::::1;::::0;15959;;::::1;::::0;15988:13;::::1;::::0;::::1;::::0;::::1;::::0;:30:::1;;-1:-1:-1::0;;;;;;16005:13:0;;::::1;::::0;;::::1;;;15988:30;15980:64;;;::::0;;-1:-1:-1;;;15980:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15980:64:0;;;;;;;;;;;;;::::1;;16063:14:::0;;16059:58:::1;;16079:38;16093:7;16102:2;16106:10;16079:13;:38::i;:::-;16170:14:::0;;16166:58:::1;;16186:38;16200:7;16209:2;16213:10;16186:13;:38::i;:::-;16277:15:::0;;16273:97:::1;;16311:2;-1:-1:-1::0;;;;;16294:34:0::1;;16329:10;16341;16353;16365:4;;16294:76;;;;;;;;;;;;;-1:-1:-1::0;;;;;16294:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16273:97;16396:47;::::0;;-1:-1:-1;;;16396:47:0;;16437:4:::1;16396:47;::::0;::::1;::::0;;;-1:-1:-1;;;;;16396:32:0;::::1;::::0;-1:-1:-1;;16396:47:0;;;;;::::1;::::0;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16396:47:0;16469::::1;::::0;;-1:-1:-1;;;16469:47:0;;16510:4:::1;16469:47;::::0;::::1;::::0;;;16396;;-1:-1:-1;;;;;;16469:32:0;::::1;::::0;-1:-1:-1;;16469:47:0;;;;;16396::::1;::::0;16469;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16469:47:0;;-1:-1:-1;16538:14:0::1;::::0;-1:-1:-1;;;;;;;16566:22:0;::::1;::::0;;::::1;16555:33:::0;::::1;:75;;16629:1;16555:75;;;-1:-1:-1::0;;;;;16603:22:0;::::1;::::0;;::::1;16591:35:::0;::::1;16555:75;16538:92:::0;-1:-1:-1;16641:14:0::1;-1:-1:-1::0;;;;;16669:22:0;::::1;::::0;;::::1;16658:33:::0;::::1;:75;;16732:1;16658:75;;;-1:-1:-1::0;;;;;16706:22:0;::::1;::::0;;::::1;16694:35:::0;::::1;16658:75;16641:92;;16764:1;16752:9;:13;:30;;;;16781:1;16769:9;:13;16752:30;16744:79;;;;-1:-1:-1::0;;;16744:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16913:21;16937:40;16960:16;:9:::0;16974:1:::1;16960:13;:16::i;:::-;16937:18;:8:::0;16950:4:::1;16937:12;:18::i;:::-;:22:::0;::::1;:40::i;:::-;16913:64:::0;-1:-1:-1;16992:21:0::1;17016:40;17039:16;:9:::0;17053:1:::1;17039:13;:16::i;17016:40::-;16992:64:::0;-1:-1:-1;17121:43:0::1;17156:7;17121:30;-1:-1:-1::0;;;;;17121:15:0;;::::1;::::0;:30;::::1;:19;:30::i;:::-;:34:::0;::::1;:43::i;:::-;17079:38;:16:::0;17100;17079:20:::1;:38::i;:::-;:85;;17071:110;;;::::0;;-1:-1:-1;;;17071:110:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;17071:110:0;;;;;;;;;;;;;::::1;;8736:1;;17205:49;17213:8;17223;17233:9;17244;17205:7;:49::i;:::-;17270:66;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17270:66:0;::::1;::::0;17275:10:::1;::::0;17270:66:::1;::::0;;;;;;;::::1;-1:-1:-1::0;;8759:1:0;8748:8;:12;-1:-1:-1;;;;;;;;;15397:1947:0:o;1691:46::-;;;;;;;;;;;;;-1:-1:-1;;;1691:46:0;;;;;:::o;8776:231::-;8909:8;;-1:-1:-1;;;;;8909:8:0;;;;-1:-1:-1;;;8940:8:0;;;;;;-1:-1:-1;;;8981:18:0;;;;;8776:231::o;3741:147::-;3805:4;3822:36;3831:10;3843:7;3852:5;3822:8;:36::i;:::-;-1:-1:-1;3876:4:0;3741:147;;;;;:::o;8065:21::-;;;-1:-1:-1;;;;;8065:21:0;;:::o;1830:24::-;;;;:::o;4043:301::-;-1:-1:-1;;;;;4142:15:0;;4121:4;4142:15;;;:9;:15;;;;;;;;4158:10;4142:27;;;;;;;;-1:-1:-1;;4142:39:0;4138:140;;-1:-1:-1;;;;;4228:15:0;;;;;;:9;:15;;;;;;;;4244:10;4228:27;;;;;;;;:38;;4260:5;4228:31;:38::i;:::-;-1:-1:-1;;;;;4198:15:0;;;;;;:9;:15;;;;;;;;4214:10;4198:27;;;;;;;:68;4138:140;4288:26;4298:4;4304:2;4308:5;4288:9;:26::i;:::-;-1:-1:-1;4332:4:0;4043:301;;;;;:::o;2122:108::-;2164:66;2122:108;:::o;1788:35::-;1821:2;1788:35;:::o;1979:31::-;;;;:::o;9836:210::-;9932:7;;-1:-1:-1;;;;;9932:7:0;9918:10;:21;9910:54;;;;;-1:-1:-1;;;9910:54:0;;;;;;;;;;;;-1:-1:-1;;;9910:54:0;;;;;;;;;;;;;;;9995:6;:16;;-1:-1:-1;;;;;9995:16:0;;;-1:-1:-1;;;;;;9995:16:0;;;;;;;10022:6;:16;;;;;;;;;;;9836:210::o;8416:32::-;;;;:::o;8455:::-;;;;:::o;12030:1649::-;12079:14;8667:8;;8679:1;8667:13;8659:43;;;;;-1:-1:-1;;;8659:43:0;;;;;;;;;;;;-1:-1:-1;;;8659:43:0;;;;;;;;;;;;;;;8724:1;8713:8;:12;;;8724:1;12148:13:::1;:11;:13::i;:::-;-1:-1:-1::0;12217:6:0::1;::::0;12203:46:::1;::::0;;-1:-1:-1;;;12203:46:0;;12243:4:::1;12203:46;::::0;::::1;::::0;;;12106:55;;-1:-1:-1;12106:55:0;;-1:-1:-1;;;;;;;;12217:6:0;;::::1;::::0;-1:-1:-1;;12203:46:0;;;;;::::1;::::0;;;;;;;;12217:6;12203:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12203:46:0;12290:6:::1;::::0;12276:46:::1;::::0;;-1:-1:-1;;;12276:46:0;;12316:4:::1;12276:46;::::0;::::1;::::0;;;12203;;-1:-1:-1;;;;;;;;12290:6:0;;::::1;::::0;-1:-1:-1;;12276:46:0;;;;;12203::::1;::::0;12276;;;;;;;;12290:6;12276:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12276:46:0;;-1:-1:-1;12333:12:0::1;12348:23;:8:::0;-1:-1:-1;;;;;12348:23:0;::::1;:12;:23::i;:::-;12333:38:::0;-1:-1:-1;12382:12:0::1;12397:23;:8:::0;-1:-1:-1;;;;;12397:23:0;::::1;:12;:23::i;:::-;12382:38;;12433:10;12446:30;12455:9;12466;12446:8;:30::i;:::-;12487:17;12507:11:::0;12433:43;;-1:-1:-1;12611:17:0;12607:747:::1;;12682:7;::::0;12664:37:::1;::::0;;-1:-1:-1;;;12664:37:0;;;;12645:16:::1;::::0;-1:-1:-1;;;;;12682:7:0::1;::::0;-1:-1:-1;;12664:37:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;12682:7;12664:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12664:37:0;;-1:-1:-1;;;;;;12720:22:0;::::1;:10;:22;12716:390;;;12785:8;-1:-1:-1::0;;;;;12775:36:0::1;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12775:38:0;;-1:-1:-1;12840:13:0;;;;;:41:::1;;-1:-1:-1::0;;;12857:24:0;::::1;;12840:41;12832:75;;;::::0;;-1:-1:-1;;;12832:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;12832:75:0;;;;;;;;;;;;;::::1;;12716:390;;;-1:-1:-1::0;;;;;12956:22:0;::::1;::::0;12948:57:::1;;;::::0;;-1:-1:-1;;;12948:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;12948:57:0;;;;;;;;;;;;;::::1;;13036:54;7927:5;13036:31;13046:20;:7:::0;13058;13046:11:::1;:20::i;:::-;13036:9;:31::i;:54::-;13024:66;;12716:390;13120:36;13134:1;7927:5;13120;:36::i;:::-;12607:747;;;;13256:86;-1:-1:-1::0;;;;;13265:37:0;::::1;:25;:7:::0;13277:12;13265:11:::1;:25::i;:::-;:37;;;;;;-1:-1:-1::0;;;;;13304:37:0;::::1;:25;:7:::0;13316:12;13304:11:::1;:25::i;:::-;:37;;;;;;13256:8;:86::i;:::-;13244:98;;12607:747;13384:1;13372:9;:13;13364:66;;;;-1:-1:-1::0;;;13364:66:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13441:20;13447:2;13451:9;13441:5;:20::i;:::-;13474:49;13482:8;13492;13502:9;13513;13474:7;:49::i;:::-;13538:5;13534:47;;;13572:8;::::0;13553:28:::1;::::0;-1:-1:-1;;;;;13558:8:0;;::::1;::::0;-1:-1:-1;;;13572:8:0;::::1;;13553:18;:28::i;:::-;13545:5;:36:::0;13534:47:::1;13637:34;::::0;;;;;::::1;::::0;::::1;::::0;;;;;13642:10:::1;::::0;13637:34:::1;::::0;;;;;;::::1;-1:-1:-1::0;;8759:1:0;8748:8;:12;-1:-1:-1;12030:1649:0;;;-1:-1:-1;;;;;;12030:1649:0:o;1861:41::-;;;;;;;;;;;;;:::o;8494:17::-;;;;:::o;2237:38::-;;;;;;;;;;;;;:::o;13791:1494::-;13840:12;13854;8667:8;;8679:1;8667:13;8659:43;;;;;-1:-1:-1;;;8659:43:0;;;;;;;;;;;;-1:-1:-1;;;8659:43:0;;;;;;;;;;;;;;;8724:1;8713:8;:12;;;8724:1;13921:13:::1;:11;:13::i;:::-;-1:-1:-1::0;13978:6:0::1;::::0;14059::::1;::::0;14138:47:::1;::::0;;-1:-1:-1;;;14138:47:0;;14179:4:::1;14138:47;::::0;::::1;::::0;;;13879:55;;-1:-1:-1;13879:55:0;;-1:-1:-1;;;;;;13978:6:0;;::::1;::::0;14059;::::1;::::0;-1:-1:-1;;13978:6:0;;-1:-1:-1;;14138:47:0;;;;;::::1;::::0;;;;;;;;13978:6;14138:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14138:47:0;14212::::1;::::0;;-1:-1:-1;;;14212:47:0;;14253:4:::1;14212:47;::::0;::::1;::::0;;;14138;;-1:-1:-1;;;;;;;;14212:32:0;::::1;::::0;-1:-1:-1;;14212:47:0;;;;;14138::::1;::::0;14212;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14212:47:0;14305:4:::1;14270:14;14287:24:::0;;;:9:::1;14212:47;14287:24:::0;;;;;14212:47;;-1:-1:-1;14337:30:0::1;14346:9:::0;14357;14337:8:::1;:30::i;:::-;14378:17;14398:11:::0;14324:43;;-1:-1:-1;14398:11:0;14508:23:::1;:9:::0;14522:8;14508:13:::1;:23::i;:::-;:38;;;;;;::::0;-1:-1:-1;14641:12:0;14615:23:::1;:9:::0;14629:8;14615:13:::1;:23::i;:::-;:38;;;;;;14605:48;;14730:1;14720:7;:11;:26;;;;;14745:1;14735:7;:11;14720:26;14712:79;;;;-1:-1:-1::0;;;14712:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14802:31;14816:4;14823:9;14802:5;:31::i;:::-;14844:35;14858:7;14867:2;14871:7;14844:13;:35::i;:::-;14890;14904:7;14913:2;14917:7;14890:13;:35::i;:::-;14947:47;::::0;;-1:-1:-1;;;14947:47:0;;14988:4:::1;14947:47;::::0;::::1;::::0;;;-1:-1:-1;;;;;14947:32:0;::::1;::::0;-1:-1:-1;;14947:47:0;;;;;::::1;::::0;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14947:47:0;15016::::1;::::0;;-1:-1:-1;;;15016:47:0;;15057:4:::1;15016:47;::::0;::::1;::::0;;;14947;;-1:-1:-1;;;;;;15016:32:0;::::1;::::0;-1:-1:-1;;15016:47:0;;;;;14947::::1;::::0;15016;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;15016:47:0;;-1:-1:-1;15076:49:0::1;15084:8:::0;15016:47;15104:9;15115;15076:7:::1;:49::i;:::-;15140:5;15136:47;;;15174:8;::::0;15155:28:::1;::::0;-1:-1:-1;;;;;15160:8:0;;::::1;::::0;-1:-1:-1;;;15174:8:0;::::1;;15155:18;:28::i;:::-;15147:5;:36:::0;15136:47:::1;15239:38;::::0;;;;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;15239:38:0;::::1;::::0;15244:10:::1;::::0;15239:38:::1;::::0;;;;;;;;;::::1;8736:1;;;;;;;;;8759::::0;8748:8;:12;;;;13791:1494;;;:::o;1744:37::-;;;;;;;;;;;;;-1:-1:-1;;;1744:37:0;;;;;:::o;3896:139::-;3956:4;3973:32;3983:10;3995:2;3999:5;3973:9;:32::i;7886:46::-;7927:5;7886:46;:::o;17393:348::-;8667:8;;8679:1;8667:13;8659:43;;;;;-1:-1:-1;;;8659:43:0;;;;;;;;;;;;-1:-1:-1;;;8659:43:0;;;;;;;;;;;;;;;8724:1;8713:8;:12;17462:6:::1;::::0;17512::::1;::::0;17623:8:::1;::::0;17571:47:::1;::::0;;-1:-1:-1;;;17571:47:0;;17612:4:::1;17571:47;::::0;::::1;::::0;;;-1:-1:-1;;;;;17462:6:0;;::::1;::::0;17512;;::::1;::::0;17544:89:::1;::::0;17462:6;;17567:2;;17571:61:::1;::::0;-1:-1:-1;;;;;17623:8:0::1;::::0;17462:6;;-1:-1:-1;;17571:47:0;;;;;::::1;::::0;;;;;;;;;17462:6;17571:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17571:47:0;;:51:::1;:61::i;:::-;17544:13;:89::i;:::-;17723:8;::::0;17671:47:::1;::::0;;-1:-1:-1;;;17671:47:0;;17712:4:::1;17671:47;::::0;::::1;::::0;;;17644:89:::1;::::0;17658:7;;17667:2;;17671:61:::1;::::0;-1:-1:-1;;;17723:8:0;::::1;-1:-1:-1::0;;;;;17723:8:0::1;::::0;-1:-1:-1;;;;;17671:32:0;::::1;::::0;::::1;::::0;:47;;;;;::::1;::::0;;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;17644:89;-1:-1:-1::0;;8759:1:0;8748:8;:12;-1:-1:-1;17393:348:0:o;8036:22::-;;;-1:-1:-1;;;;;8036:22:0;;:::o;8093:21::-;;;-1:-1:-1;;;;;8093:21:0;;:::o;4352:674::-;4498:15;4486:8;:27;;4478:58;;;;;-1:-1:-1;;;4478:58:0;;;;;;;;;;;;-1:-1:-1;;;4478:58:0;;;;;;;;;;;;;;;4652:16;;-1:-1:-1;;;;;4748:13:0;;;4547:14;4748:13;;;:6;:13;;;;;;;;:15;;-1:-1:-1;4748:15:0;;;;;;4697:77;;2164:66;4697:77;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4697:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4687:88;;;;;;-1:-1:-1;;;4588:202:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4564:237;;;;;;;;;4839:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4547:14;;-1:-1:-1;4839:26:0;;;;;-1:-1:-1;;4839:26:0;;;;;;;;;;-1:-1:-1;4839:26:0;;;;;;;;;;;;;;;-1:-1:-1;;4839:26:0;;-1:-1:-1;;4839:26:0;;;-1:-1:-1;;;;;;;4884:30:0;;;;;;:59;;-1:-1:-1;;;;;;4918:25:0;;;;;;;4884:59;4876:100;;;;;-1:-1:-1;;;4876:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4987:31;4996:5;5003:7;5012:5;4987:8;:31::i;:::-;4352:674;;;;;;;;;:::o;1909:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;17790:172::-;8667:8;;8679:1;8667:13;8659:43;;;;;-1:-1:-1;;;8659:43:0;;;;;;;;;;;;-1:-1:-1;;;8659:43:0;;;;;;;;;;;;;;;8724:1;8713:8;:12;17853:6:::1;::::0;17839:46:::1;::::0;;-1:-1:-1;;;17839:46:0;;17879:4:::1;17839:46;::::0;::::1;::::0;;;17831:123:::1;::::0;-1:-1:-1;;;;;17853:6:0::1;::::0;-1:-1:-1;;17839:46:0;;;;;::::1;::::0;;;;;;;;17853:6;17839:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17839:46:0;17901:6:::1;::::0;17887:46:::1;::::0;;-1:-1:-1;;;17887:46:0;;17927:4:::1;17887:46;::::0;::::1;::::0;;;-1:-1:-1;;;;;17901:6:0;;::::1;::::0;-1:-1:-1;;17887:46:0;;;;;17839::::1;::::0;17887;;;;;;;;17901:6;17887:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17887:46:0;17935:8:::1;::::0;-1:-1:-1;;;;;17935:8:0;;::::1;::::0;-1:-1:-1;;;17945:8:0;::::1;;17831:7;:123::i;:::-;8759:1:::0;8748:8;:12;17790:172::o;9015:287::-;7991:34;;;;;;;;;;;;;;;;;9143:43;;-1:-1:-1;;;;;9143:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9143:43:0;-1:-1:-1;;;9143:43:0;;;9132:55;;;;-1:-1:-1;;9111:17:0;;9132:10;;;9143:43;9132:55;;;9143:43;9132:55;;9143:43;9132:55;;;;;;;;;;-1:-1:-1;;9132:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9096:91;;;;9206:7;:57;;;;-1:-1:-1;9218:11:0;;:16;;:44;;;9249:4;9238:24;;;;;;;;;;;;;;;-1:-1:-1;9238:24:0;9218:44;9198:96;;;;;-1:-1:-1;;;9198:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9015:287;;;;;:::o;1391:142::-;1443:6;1470;;;:30;;-1:-1:-1;;1485:5:0;;;1499:1;1494;1485:5;1494:1;1480:15;;;;;:20;1470:30;1462:63;;;;;-1:-1:-1;;;1462:63:0;;;;;;;;;;;;-1:-1:-1;;;1462:63:0;;;;;;;;;;;;;;1254:129;1338:5;;;1333:16;;;;1325:50;;;;;-1:-1:-1;;;1325:50:0;;;;;;;;;;;;-1:-1:-1;;;1325:50:0;;;;;;;;;;;;;;10131:860;-1:-1:-1;;;;;10243:23:0;;;;;:50;;-1:-1:-1;;;;;;10270:23:0;;;10243:50;10235:82;;;;;-1:-1:-1;;;10235:82:0;;;;;;;;;;;;-1:-1:-1;;;10235:82:0;;;;;;;;;;;;;;;10432:18;;10359:23;:15;:23;;;-1:-1:-1;;;10432:18:0;;;;10415:35;;;10488:15;;;;;;:33;;-1:-1:-1;;;;;;10507:14:0;;;;10488:33;:51;;;;-1:-1:-1;;;;;;10525:14:0;;;;10488:51;10484:336;;;10694:11;10641:64;;10646:44;10680:9;10646:27;10663:9;10646:16;:27::i;:::-;-1:-1:-1;;;;;10646:33:0;;;:44::i;:::-;10617:20;:88;;-1:-1:-1;;;;;10641:50:0;;;;:64;;;;10617:88;;;10744:64;;;10749:44;10783:9;10749:27;10766:9;10749:16;:27::i;:44::-;10720:20;:88;;-1:-1:-1;;;;;10744:50:0;;;;:64;;;;10720:88;;;10484:336;10830:8;:28;;-1:-1:-1;;10830:28:0;-1:-1:-1;;;;;10830:28:0;;;;;;;-1:-1:-1;;;;10869:28:0;-1:-1:-1;;;10869:28:0;;;;;;;;;-1:-1:-1;;;;;10908:35:0;-1:-1:-1;;;10908:35:0;;;;;;;;;10959:24;;;10964:8;;;10959:24;;10974:8;;;;;;;10959:24;;;;;;;;;;;;;;;;;10131:860;;;;;;:::o;3336:169::-;-1:-1:-1;;;;;3417:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;3466:31;;;;;;;;;;;;;;;;;3336:169;;;:::o;3513:220::-;-1:-1:-1;;;;;3607:15:0;;;;;;-1:-1:-1;3607:15:0;;;;;;:26;;3627:5;3607:19;:26::i;:::-;-1:-1:-1;;;;;3589:15:0;;;;;;;-1:-1:-1;3589:15:0;;;;;;:44;;;;3660:13;;;;;;;:24;;3678:5;3660:17;:24::i;:::-;-1:-1:-1;;;;;3644:13:0;;;;;;;-1:-1:-1;3644:13:0;;;;;;;;;:40;;;;3700:25;;;;;;;3644:13;;3700:25;;;;;;;;;;;;;3513:220;;;:::o;11081:837::-;11211:7;;11193:34;;;-1:-1:-1;;;11193:34:0;;;;11154:10;;;;-1:-1:-1;;;;;11211:7:0;;;;11193:32;;:34;;;;;;;;;;;;;;;11211:7;11193:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11193:34:0;11290:5;;-1:-1:-1;;;;;11246:19:0;;;;;;-1:-1:-1;11193:34:0;;-1:-1:-1;11290:5:0;11321:590;;11351:11;;11347:494;;11383:10;11396:41;11406:30;-1:-1:-1;;;;;11406:15:0;;;;:30;;:19;:30::i;11396:41::-;11383:54;;11456:14;11473:17;11483:6;11473:9;:17::i;:::-;11456:34;;11521:9;11513:5;:17;11509:317;;;11555:14;11572:37;11588:20;:5;11598:9;11588;:20::i;:::-;11572:11;;;:15;:37::i;:::-;11555:54;-1:-1:-1;11632:16:0;11651:27;11668:9;11651:12;:5;11661:1;11651:9;:12::i;:::-;:16;;:27::i;:::-;11632:46;;11701:14;11730:11;11718:9;:23;;;;;;;-1:-1:-1;11768:13:0;;11764:42;;11783:23;11789:5;11796:9;11783:5;:23::i;:::-;11509:317;;;;11347:494;;;11321:590;;;11862:11;;11858:53;;11898:1;11890:5;:9;11858:53;11081:837;;;;;;:::o;5401:303::-;5446:6;5473:1;5469;:5;5465:232;;;-1:-1:-1;5495:1:0;5528;5524;5520:5;;:9;5544:92;5555:1;5551;:5;5544:92;;;5581:1;5577:5;;5619:1;5614;5610;5606;:5;;;;;;:9;5605:15;;;;;;5601:19;;5544:92;;;5465:232;;;;5657:6;;5653:44;;-1:-1:-1;5684:1:0;5653:44;5401:303;;;:::o;2910:201::-;2983:11;;:22;;2999:5;2983:15;:22::i;:::-;2969:11;:36;;;-1:-1:-1;;;;;3032:13:0;;;;-1:-1:-1;3032:13:0;;;;;;:24;;3050:5;3032:17;:24::i;:::-;-1:-1:-1;;;;;3016:13:0;;;;;;-1:-1:-1;3016:13:0;;;;;;;;:40;;;;3072:31;;;;;;;3016:13;;;;3072:31;;;;;;;;;;2910:201;;:::o;5187:96::-;5239:6;5266:1;5262;:5;:13;;5274:1;5262:13;;;5270:1;5262:13;5258:17;5187:96;-1:-1:-1;;;5187:96:0:o;3119:209::-;-1:-1:-1;;;;;3198:15:0;;;;;;-1:-1:-1;3198:15:0;;;;;;:26;;3218:5;3198:19;:26::i;:::-;-1:-1:-1;;;;;3180:15:0;;;;;;-1:-1:-1;3180:15:0;;;;;:44;;;;3249:11;:22;;3265:5;3249:15;:22::i;:::-;3235:11;:36;;;3287:33;;;;;;;;-1:-1:-1;;;;;3287:33:0;;;;;;;;;;;;;3119:209;;:::o;6061:120::-;-1:-1:-1;;;;;6137:10:0;-1:-1:-1;;;6137:17:0;;6061:120::o;6252:108::-;6312:9;-1:-1:-1;;;;;6342:10:0;;-1:-1:-1;;;;;6338:14:0;;6342:10;6338:14;;;;;;6252:108;-1:-1:-1;;;6252:108:0:o;1118:128::-;1202:5;;;1197:16;;;;1189:49;;;;;-1:-1:-1;;;1189:49:0;;;;;;;;;;;;-1:-1:-1;;;1189:49:0;;;;;;;;;;;;;

Swarm Source

ipfs://788682b5e07a6f4925194cfbc577313ab6e1b870171bbd0da6fe114766d6f3d7
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.