Contract 0x9063f906b3463c8441a1a65b9b25ea081babd196 1

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xc389bfb327ad1d02b7052359e0b3d2915f52a759aa9d4bc8155a42ec88336a99Approve226325342021-12-17 13:16:5837 days 7 hrs ago0x27cc46dbc92eca7785103483e82de0c6246124e4 IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.00199893138
0xdaf0c3b51699a94c43af0016d81d842f7b5085b4d7dd643c180e0734681e622aApprove208090892021-10-31 6:05:5784 days 14 hrs ago0x19c8504a5d0d8bee49eb6736e453d213c81656a9 IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.00051099411
0x839d168a9128c30f28d33bd642300de4bae23a5ed1438857600083cec2196a9aApprove201388742021-10-12 13:37:17103 days 7 hrs ago0x00a987400b6cb77d227833f6d35a984bf7ee5faa IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.00044903531
0xcfab31587fd77f8d84af69a7691e41a64fa6eedd30af0db8bfefad95e4ddf366Approve201060922021-10-11 17:18:25104 days 3 hrs ago0x6ddc26aac1aca9882ef33054befbb9972bc7813f IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.0013936230
0xfeff1fea42e5e976b35c56fb95ae1f1309f48c8c5003f81607d327f9a2f07bcaApprove200954052021-10-11 10:20:17104 days 10 hrs ago0xa1b37575170fec1d8e7033130a98efa447684e05 IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.00082317431
0x7b78943c6d82138d80f06ad5d94be5870db6e14727e4b6098e90aff93ecc284cApprove200954052021-10-11 10:20:17104 days 10 hrs ago0xa1b37575170fec1d8e7033130a98efa447684e05 IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.00082317431
0x0c10311dc70c8ca5640e8593744165db847151be84e4693c69f49cd814e4b6f6Approve200954052021-10-11 10:20:17104 days 10 hrs ago0xa1b37575170fec1d8e7033130a98efa447684e05 IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.00082317431
0x86483382520ef45f1675b82cbbee9507c6d02dcce21fa0994f8f6d4ae248c2d9Approve200954052021-10-11 10:20:17104 days 10 hrs ago0xa1b37575170fec1d8e7033130a98efa447684e05 IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.00144007431
0x10e791045a4bcfa96ec690c58bbaa4e3f8a2f31bf8a6250fbe7ac4f82c181767Approve200392052021-10-09 23:03:01105 days 21 hrs ago0x4455e4cf9e6f9c4c530ca63bd5d55a4818057761 IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.00190461441
0xd64c6ee797ddb7e9e2597d9f9e0821aac0114db9a563cdc7508f6c2ddbe189eeApprove200361032021-10-09 21:03:26105 days 23 hrs ago0x9e0ffd4041f21f2f7fdcba09071bb69cddaec3e9 IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.0013936230
0xdc3d95d9a27e809689b7608c838e16b07507b6c4b3f3688b7499653a27f8d57aApprove200127312021-10-09 6:24:51106 days 14 hrs ago0x9398a91bf337c8932e100290fd2feb41ea7a36f9 IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.0013936230
0xc349d7af69926b9526a5ace6e1bd035c48f406b3229efe0e649421dfe6d7f2bcApprove200091222021-10-09 4:14:24106 days 16 hrs ago0xa7fdd37a2e4ef565bb587ef30930e0393f214e3b IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.0007966230
0xfac90620ed1d01eafbd101a1c587a76f3d4d10a863cb3fbc83fc3248709b2cffApprove200090182021-10-09 4:10:48106 days 16 hrs ago0xa7fdd37a2e4ef565bb587ef30930e0393f214e3b IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.0032517870
0x3475b275d46dec5119798f7c3a09045c9634157a202da3469b4b3b8b78c9df36Approve199991052021-10-08 22:02:09106 days 22 hrs ago0xcfb42324509e764f118dfb303f08293738b3937a IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.0013936230
0x50652b9c6687048f5d9759882194c049e27305e45b1c58c2ee18a06be48c1358Approve198836732021-10-05 20:17:38110 days 36 mins ago0x85f82659573c54299cf129eb6679aa724c25203c IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.0015718167359.193218745
0x50ed48da2470bafae56d0473be841c8b1ca849334b07b3464ad102d729a06c13Approve198297102021-10-04 10:35:36111 days 10 hrs ago0x78f214cf1287b5c97df55a285e885b09c0d43e3d IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.0009290820
0xd00cd3f727879ba3568ea10c8cf5786ae377c7562f811b9ef44904d6a58eb4a0Approve198228782021-10-04 6:00:22111 days 14 hrs ago0x4274a49fbeb724d75b8ba7bfc55fc8495a15ad1e IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.0001858164
0xfdb5e485e337d6ea99445aa2e8e2c6204e52a122c07750548ed6c0347981dca4Approve196098632021-09-28 11:41:04117 days 9 hrs ago0x2ca32caadc795b539f2211e1f1154ecf39e24ff0 IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.0003716328
0x8d325385ecd4b61515c52b7f68424b6b13e27a043b4fbf1759b6afc1574fac70Approve196097402021-09-28 11:33:58117 days 9 hrs ago0xaee931dd57eca0c374bcdf8a46cb05b2fc221c66 IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.0001858787
0x2bc2bb80452194796d1d1a5044f2902d28285449c905237ba24c9122abf6e929Approve196097402021-09-28 11:33:58117 days 9 hrs ago0xaee931dd57eca0c374bcdf8a46cb05b2fc221c66 IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.0002787246
0xa790bac4e29f332fe333ee127dd1fd5238ba76ba7255a558b87bfaadaef836c3Approve194924562021-09-25 9:27:58120 days 11 hrs ago0xd86e9e853ed3ec8867d8a69fdb097cc7b295640b IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.0001448510
0xd0478462b7cb88273cdf0c9062ff9a2e1dc6d2facd847f130ec2cc179b70d6d8Approve194909382021-09-25 8:28:35120 days 12 hrs ago0xcfddf124b4ed392729a76705197997e43bb34081 IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.0000464541.000000002
0x2b108a93c83fdff2a06220c9fb4a914f6d979482f7bb09b695d1bb3cca600111Approve191930852021-09-17 4:53:52128 days 16 hrs ago0xb7401bd9fc86103f2a4389d6817a8ea3238b8d39 IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.0000567203341.221000003
0xb706fcb6c41c06a0499240e3c2a85679fcd1c886abb867b7279b53b741dbf6fbApprove191071862021-09-14 18:23:07131 days 2 hrs ago0x302809f7d6cd34d737df352c798e24699d2048be IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.0000464541
0xbd15bde31cfc393a011e8539f749f240f481d782be8cf499e1313d72a759cb5cApprove189938082021-09-11 14:45:22134 days 6 hrs ago0x65cc223f99bc2fd7bc79af264c51d4f5b7665ffd IN  0x9063f906b3463c8441a1a65b9b25ea081babd1960 MATIC0.000051563941.11
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0xaca5f3f42c1ce18a51366bae5023121e05a9aae10eaac48ea6912bfd6c838443179395502021-08-13 12:54:04163 days 8 hrs ago 0x5bdd1cd910e3307582f213b33699e676e61dead9  Contract Creation0 MATIC
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x71ccf81b24d500705d54cc8b6d420b1131a9e5e5

Contract Name:
PolydexPair

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-07-21
*/

// Sources flattened with hardhat v2.3.0 https://hardhat.org

// File contracts/polydex/libraries/SafeMath.sol


pragma solidity =0.7.6;

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

library SafeMathPolydex {
    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/polydex/PolydexERC20.sol


pragma solidity =0.7.6;

contract PolydexERC20 {
    using SafeMathPolydex for uint;

    string public constant name = 'Polydex LP Token';
    string public constant symbol = 'Polydex-LP';
    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() {
        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, 'Polydex: 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, 'Polydex: INVALID_SIGNATURE');
        _approve(owner, spender, value);
    }
}


// File contracts/polydex/libraries/Math.sol


pragma solidity >=0.6.0 <0.8.0;

// 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/polydex/libraries/UQ112x112.sol


pragma solidity =0.7.6;

// 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/polydex/interfaces/IERC20.sol


pragma solidity >=0.6.0 <0.8.0;

interface IERC20Polydex {
    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/polydex/interfaces/IPolydexFactory.sol


pragma solidity >=0.6.0 <0.8.0;

interface IPolydexFactory {
    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/polydex/interfaces/IPolydexCallee.sol


pragma solidity >=0.6.0 <0.8.0;

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


// File contracts/polydex/PolydexPair.sol

// SPDX-License-Identifier: MIT

pragma solidity =0.7.6;






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

contract PolydexPair is PolydexERC20 {
    using SafeMathPolydex  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, 'Polydex: 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))), 'Polydex: 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() {
        factory = msg.sender;
    }

    // called once by the factory at time of deployment
    function initialize(address _token0, address _token1) external {
        require(msg.sender == factory, 'Polydex: 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), 'Polydex: 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 = IPolydexFactory(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 = IERC20Polydex(token0).balanceOf(address(this));
        uint balance1 = IERC20Polydex(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 = IPolydexFactory(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, 'Polydex: 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 = IERC20Polydex(_token0).balanceOf(address(this));
        uint balance1 = IERC20Polydex(_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, 'Polydex: INSUFFICIENT_LIQUIDITY_BURNED');
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20Polydex(_token0).balanceOf(address(this));
        balance1 = IERC20Polydex(_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, 'Polydex: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'Polydex: 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, 'Polydex: 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) IPolydexCallee(to).polydexCall(msg.sender, amount0Out, amount1Out, data);
        balance0 = IERC20Polydex(_token0).balanceOf(address(this));
        balance1 = IERC20Polydex(_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, 'Polydex: 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), 'Polydex: 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, IERC20Polydex(_token0).balanceOf(address(this)).sub(reserve0));
        _safeTransfer(_token1, to, IERC20Polydex(_token1).balanceOf(address(this)).sub(reserve1));
    }

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

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"}]

60806040526001600c5534801561001557600080fd5b50604080518082018252601081526f2837b63cb232bc102628102a37b5b2b760811b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fad967ef795712b19cbd7f80fd5bd3895a78d5ef51643f467e813a01a93672ace818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b031916331790556123548061010e6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610adb565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610b07565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b31565b604080519115158252519081900360200190f35b610339610b48565b604080516001600160a01b039092168252519081900360200190f35b61035d610b57565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610b5d565b61035d610bf1565b6103b5610c15565b6040805160ff9092168252519081900360200190f35b61035d610c1a565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c20565b61035d610ca2565b61035d610ca8565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610cae565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b0316611128565b61035d61113a565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316611140565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611152565b6040805192835260208301919091528051918290030190f35b6102446114e4565b61031d600480360360408110156104e857600080fd5b506001600160a01b03813516906020013561150a565b61035d611517565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b031661151d565b61033961168d565b61033961169c565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356116ab565b61035d600480360360408110156105a357600080fd5b506001600160a01b03813581169160200135166118ab565b61023a6118c8565b600c5460011461060c576040805162461bcd60e51b815260206004820152600f60248201526e141bdb1e59195e0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c558415158061061f5750600084115b61065a5760405162461bcd60e51b815260040180806020018281038252602381526020018061228e6023913960400191505060405180910390fd5b600080610665610b07565b5091509150816001600160701b03168710801561068a5750806001600160701b031686105b6106db576040805162461bcd60e51b815260206004820152601f60248201527f506f6c796465783a20494e53554646494349454e545f4c495155494449545900604482015290519081900360640190fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107195750806001600160a01b0316896001600160a01b031614155b610760576040805162461bcd60e51b8152602060048201526013602482015272506f6c796465783a20494e56414c49445f544f60681b604482015290519081900360640190fd5b8a1561077157610771828a8d611a28565b891561078257610782818a8c611a28565b861561083457886001600160a01b0316632049b8cc338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561081b57600080fd5b505af115801561082f573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561087a57600080fd5b505afa15801561088e573d6000803e3d6000fd5b505050506040513d60208110156108a457600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108f057600080fd5b505afa158015610904573d6000803e3d6000fd5b505050506040513d602081101561091a57600080fd5b5051925060009150506001600160701b0385168a9003831161093d57600061094c565b89856001600160701b03160383035b9050600089856001600160701b0316038311610969576000610978565b89856001600160701b03160383035b905060008211806109895750600081115b6109c45760405162461bcd60e51b81526004018080602001828103825260228152602001806122fd6022913960400191505060405180910390fd5b60006109e66109d4846003611bc1565b6109e0876103e8611bc1565b90611c24565b905060006109f86109d4846003611bc1565b9050610a1d620f4240610a176001600160701b038b8116908b16611bc1565b90611bc1565b610a278383611bc1565b1015610a67576040805162461bcd60e51b815260206004820152600a602482015269506f6c796465783a204b60b01b604482015290519081900360640190fd5b5050610a7584848888611c74565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280601081526020016f2837b63cb232bc102628102a37b5b2b760811b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b3e338484611e31565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610bdc576001600160a01b0384166000908152600260209081526040808320338452909152902054610bb79083611c24565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610be7848484611e93565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610c74576040805162461bcd60e51b81526020600482015260126024820152712837b63cb232bc1d102327a92124a22222a760711b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610cf9576040805162461bcd60e51b815260206004820152600f60248201526e141bdb1e59195e0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c81905580610d09610b07565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d5d57600080fd5b505afa158015610d71573d6000803e3d6000fd5b505050506040513d6020811015610d8757600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610dda57600080fd5b505afa158015610dee573d6000803e3d6000fd5b505050506040513d6020811015610e0457600080fd5b505190506000610e1d836001600160701b038716611c24565b90506000610e34836001600160701b038716611c24565b90506000610e428787611f41565b600054909150806110195760055460408051637cd07e4760e01b815290516000926001600160a01b031691637cd07e47916004808301926020929190829003018186803b158015610e9257600080fd5b505afa158015610ea6573d6000803e3d6000fd5b505050506040513d6020811015610ebc57600080fd5b50519050336001600160a01b0382161415610f9757806001600160a01b03166340dc0e376040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0a57600080fd5b505afa158015610f1e573d6000803e3d6000fd5b505050506040513d6020811015610f3457600080fd5b505199508915801590610f4957506000198a14155b610f92576040805162461bcd60e51b81526020600482015260156024820152744261642064657369726564206c697175696469747960581b604482015290519081900360640190fd5b611013565b6001600160a01b03811615610fec576040805162461bcd60e51b815260206004820152601660248201527526bab9ba103737ba103430bb329036b4b3b930ba37b960511b604482015290519081900360640190fd5b6110046103e86109e0610fff8888611bc1565b612081565b995061101360006103e86120d3565b5061105c565b6110596001600160701b0389166110308684611bc1565b8161103757fe5b046001600160701b03891661104c8685611bc1565b8161105357fe5b0461215d565b98505b6000891161109b5760405162461bcd60e51b81526004018080602001828103825260268152602001806122b16026913960400191505060405180910390fd5b6110a58a8a6120d3565b6110b186868a8a611c74565b81156110db576008546110d7906001600160701b0380821691600160701b900416611bc1565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c5460011461119e576040805162461bcd60e51b815260206004820152600f60248201526e141bdb1e59195e0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c819055806111ae610b07565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561120a57600080fd5b505afa15801561121e573d6000803e3d6000fd5b505050506040513d602081101561123457600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561128257600080fd5b505afa158015611296573d6000803e3d6000fd5b505050506040513d60208110156112ac57600080fd5b5051306000908152600160205260408120549192506112cb8888611f41565b600054909150806112dc8487611bc1565b816112e357fe5b049a50806112f18486611bc1565b816112f857fe5b04995060008b11801561130b575060008a115b6113465760405162461bcd60e51b81526004018080602001828103825260268152602001806122d76026913960400191505060405180910390fd5b6113503084612175565b61135b878d8d611a28565b611366868d8c611a28565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156113ac57600080fd5b505afa1580156113c0573d6000803e3d6000fd5b505050506040513d60208110156113d657600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561142257600080fd5b505afa158015611436573d6000803e3d6000fd5b505050506040513d602081101561144c57600080fd5b5051935061145c85858b8b611c74565b811561148657600854611482906001600160701b0380821691600160701b900416611bc1565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600a8152602001690506f6c796465782d4c560b41b81525081565b6000610b3e338484611e93565b6103e881565b600c54600114611566576040805162461bcd60e51b815260206004820152600f60248201526e141bdb1e59195e0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261160f928592879261160a926001600160701b03169185916370a0823191602480820192602092909190829003018186803b1580156115d857600080fd5b505afa1580156115ec573d6000803e3d6000fd5b505050506040513d602081101561160257600080fd5b505190611c24565b611a28565b611683818461160a6008600e9054906101000a90046001600160701b03166001600160701b0316856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156115d857600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b428410156116f3576040805162461bcd60e51b815260206004820152601060248201526f141bdb1e59195e0e881156141254915160821b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa15801561180e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906118445750886001600160a01b0316816001600160a01b0316145b611895576040805162461bcd60e51b815260206004820152601a60248201527f506f6c796465783a20494e56414c49445f5349474e4154555245000000000000604482015290519081900360640190fd5b6118a0898989611e31565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611911576040805162461bcd60e51b815260206004820152600f60248201526e141bdb1e59195e0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b81523060048201529051611a21926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561196257600080fd5b505afa158015611976573d6000803e3d6000fd5b505050506040513d602081101561198c57600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119d957600080fd5b505afa1580156119ed573d6000803e3d6000fd5b505050506040513d6020811015611a0357600080fd5b50516008546001600160701b0380821691600160701b900416611c74565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b17815292518151600094859489169392918291908083835b60208310611ad45780518252601f199092019160209182019101611ab5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b36576040519150601f19603f3d011682016040523d82523d6000602084013e611b3b565b606091505b5091509150818015611b69575080511580611b695750808060200190516020811015611b6657600080fd5b50515b611bba576040805162461bcd60e51b815260206004820152601860248201527f506f6c796465783a205452414e534645525f4641494c45440000000000000000604482015290519081900360640190fd5b5050505050565b6000811580611bdc57505080820282828281611bd957fe5b04145b610b42576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b42576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611c9257506001600160701b038311155b611cd7576040805162461bcd60e51b8152602060048201526011602482015270506f6c796465783a204f564552464c4f5760781b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d0757506001600160701b03841615155b8015611d1b57506001600160701b03831615155b15611d86578063ffffffff16611d4385611d3486612207565b6001600160e01b031690612219565b600980546001600160e01b03929092169290920201905563ffffffff8116611d6e84611d3487612207565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611eb69082611c24565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611ee5908261223e565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611f9257600080fd5b505afa158015611fa6573d6000803e3d6000fd5b505050506040513d6020811015611fbc57600080fd5b5051600b546001600160a01b03821615801594509192509061206d578015612068576000611ff9610fff6001600160701b03888116908816611bc1565b9050600061200683612081565b90508082111561206557600061202861201f8484611c24565b60005490611bc1565b905060006120418361203b866005611bc1565b9061223e565b9050600081838161204e57fe5b04905080156120615761206187826120d3565b5050505b50505b612079565b8015612079576000600b555b505092915050565b600060038211156120c4575080600160028204015b818110156120be578091506002818285816120ad57fe5b0401816120b657fe5b049050612096565b506120ce565b81156120ce575060015b919050565b6000546120e0908261223e565b60009081556001600160a01b038316815260016020526040902054612105908261223e565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061216c578161216e565b825b9392505050565b6001600160a01b0382166000908152600160205260409020546121989082611c24565b6001600160a01b038316600090815260016020526040812091909155546121bf9082611c24565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161223657fe5b049392505050565b80820182811015610b42576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe506f6c796465783a20494e53554646494349454e545f4f55545055545f414d4f554e54506f6c796465783a20494e53554646494349454e545f4c49515549444954595f4d494e544544506f6c796465783a20494e53554646494349454e545f4c49515549444954595f4255524e4544506f6c796465783a20494e53554646494349454e545f494e5055545f414d4f554e54a2646970667358221220cecd10e494193294e666b3354414bbf1824c644a002562c06bd342bda4ba76bd64736f6c63430007060033

Deployed ByteCode Sourcemap

7819:10120:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15429:1889;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15429:1889:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15429:1889:0;;-1:-1:-1;15429:1889:0;-1:-1:-1;15429:1889:0;:::i;:::-;;851:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8825:231;;;:::i;:::-;;;;-1:-1:-1;;;;;8825:231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2903:147;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2903:147:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;8116:21;;;:::i;:::-;;;;-1:-1:-1;;;;;8116:21:0;;;;;;;;;;;;;;999:24;;;:::i;:::-;;;;;;;;;;;;;;;;3205:301;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3205:301:0;;;;;;;;;;;;;;;;;:::i;1291:108::-;;;:::i;957:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1148:31;;;:::i;9876:208::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;9876:208:0;;;;;;;;;;:::i;8467:32::-;;;:::i;8506:::-;;;:::i;12064:1649::-;;;;;;;;;;;;;;;;-1:-1:-1;12064:1649:0;-1:-1:-1;;;;;12064:1649:0;;:::i;1030:41::-;;;;;;;;;;;;;;;;-1:-1:-1;1030:41:0;-1:-1:-1;;;;;1030:41:0;;:::i;8545:17::-;;;:::i;1406:38::-;;;;;;;;;;;;;;;;-1:-1:-1;1406:38:0;-1:-1:-1;;;;;1406:38:0;;:::i;13825:1492::-;;;;;;;;;;;;;;;;-1:-1:-1;13825:1492:0;-1:-1:-1;;;;;13825:1492:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;906:44;;;:::i;3058:139::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3058:139:0;;;;;;;;:::i;7937:46::-;;;:::i;17367:348::-;;;;;;;;;;;;;;;;-1:-1:-1;17367:348:0;-1:-1:-1;;;;;17367:348:0;;:::i;8087:22::-;;;:::i;8144:21::-;;;:::i;3514:670::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3514:670:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1078:61::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1078:61:0;;;;;;;;;;:::i;17764:172::-;;;:::i;15429:1889::-;8718:8;;8730:1;8718:13;8710:41;;;;;-1:-1:-1;;;8710:41:0;;;;;;;;;;;;-1:-1:-1;;;8710:41:0;;;;;;;;;;;;;;;8773:1;8762:8;:12;15543:14;;;;:32:::1;;;15574:1;15561:10;:14;15543:32;15535:80;;;;-1:-1:-1::0;;;15535:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15627:17;15646::::0;15668:13:::1;:11;:13::i;:::-;15626:55;;;;;15728:9;-1:-1:-1::0;;;;;15715:22:0::1;:10;:22;:48;;;;;15754:9;-1:-1:-1::0;;;;;15741:22:0::1;:10;:22;15715:48;15707:92;;;::::0;;-1:-1:-1;;;15707:92:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;15944:6;::::0;15979::::1;::::0;15812:13:::1;::::0;;;-1:-1:-1;;;;;15944:6:0;;::::1;::::0;15979;;::::1;::::0;16004:13;::::1;::::0;::::1;::::0;::::1;::::0;:30:::1;;;16027:7;-1:-1:-1::0;;;;;16021:13:0::1;:2;-1:-1:-1::0;;;;;16021:13:0::1;;;16004:30;15996:62;;;::::0;;-1:-1:-1;;;15996:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15996:62:0;;;;;;;;;;;;;::::1;;16073:14:::0;;16069:58:::1;;16089:38;16103:7;16112:2;16116:10;16089:13;:38::i;:::-;16176:14:::0;;16172:58:::1;;16192:38;16206:7;16215:2;16219:10;16192:13;:38::i;:::-;16279:15:::0;;16275:93:::1;;16311:2;-1:-1:-1::0;;;;;16296:30:0::1;;16327:10;16339;16351;16363:4;;16296:72;;;;;;;;;;;;;-1:-1:-1::0;;;;;16296:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16275:93;16390:47;::::0;;-1:-1:-1;;;16390:47:0;;16431:4:::1;16390:47;::::0;::::1;::::0;;;-1:-1:-1;;;;;16390:32:0;::::1;::::0;::::1;::::0;:47;;;;;::::1;::::0;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16390:47:0;16459::::1;::::0;;-1:-1:-1;;;16459:47:0;;16500:4:::1;16459:47;::::0;::::1;::::0;;;16390;;-1:-1:-1;;;;;;16459:32:0;::::1;::::0;::::1;::::0;:47;;;;;16390::::1;::::0;16459;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16459:47:0;;-1:-1:-1;16528:14:0::1;::::0;-1:-1:-1;;;;;;;16556:22:0;::::1;::::0;;::::1;16545:33:::0;::::1;:75;;16619:1;16545:75;;;16605:10;16593:9;-1:-1:-1::0;;;;;16593:22:0::1;;16581:8;:35;16545:75;16528:92;;16631:14;16671:10;16659:9;-1:-1:-1::0;;;;;16659:22:0::1;;16648:8;:33;:75;;16722:1;16648:75;;;16708:10;16696:9;-1:-1:-1::0;;;;;16696:22:0::1;;16684:8;:35;16648:75;16631:92;;16754:1;16742:9;:13;:30;;;;16771:1;16759:9;:13;16742:30;16734:77;;;;-1:-1:-1::0;;;16734:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16897:21;16921:40;16944:16;:9:::0;16958:1:::1;16944:13;:16::i;:::-;16921:18;:8:::0;16934:4:::1;16921:12;:18::i;:::-;:22:::0;::::1;:40::i;:::-;16897:64:::0;-1:-1:-1;16972:21:0::1;16996:40;17019:16;:9:::0;17033:1:::1;17019:13;:16::i;16996:40::-;16972:64:::0;-1:-1:-1;17097:43:0::1;17132:7;17097:30;-1:-1:-1::0;;;;;17097:15:0;;::::1;::::0;:30;::::1;:19;:30::i;:::-;:34:::0;::::1;:43::i;:::-;17055:38;:16:::0;17076;17055:20:::1;:38::i;:::-;:85;;17047:108;;;::::0;;-1:-1:-1;;;17047:108:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;17047:108:0;;;;;;;;;;;;;::::1;;8785:1;;17179:49;17187:8;17197;17207:9;17218;17179:7;:49::i;:::-;17244:66;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17244:66:0;::::1;::::0;17249:10:::1;::::0;17244:66:::1;::::0;;;;;;;::::1;-1:-1:-1::0;;8808:1:0;8797:8;:12;-1:-1:-1;;;;;;;;;15429:1889:0:o;851:48::-;;;;;;;;;;;;;;-1:-1:-1;;;851:48:0;;;;:::o;8825:231::-;8958:8;;-1:-1:-1;;;;;8958:8:0;;;;-1:-1:-1;;;8989:8:0;;;;;;-1:-1:-1;;;9030:18:0;;;;;8825:231::o;2903:147::-;2967:4;2984:36;2993:10;3005:7;3014:5;2984:8;:36::i;:::-;-1:-1:-1;3038:4:0;2903:147;;;;;:::o;8116:21::-;;;-1:-1:-1;;;;;8116:21:0;;:::o;999:24::-;;;;:::o;3205:301::-;-1:-1:-1;;;;;3304:15:0;;3283:4;3304:15;;;:9;:15;;;;;;;;3320:10;3304:27;;;;;;;;-1:-1:-1;;3304:39:0;3300:140;;-1:-1:-1;;;;;3390:15:0;;;;;;:9;:15;;;;;;;;3406:10;3390:27;;;;;;;;:38;;3422:5;3390:31;:38::i;:::-;-1:-1:-1;;;;;3360:15:0;;;;;;:9;:15;;;;;;;;3376:10;3360:27;;;;;;;:68;3300:140;3450:26;3460:4;3466:2;3470:5;3450:9;:26::i;:::-;-1:-1:-1;3494:4:0;3205:301;;;;;:::o;1291:108::-;1333:66;1291:108;:::o;957:35::-;990:2;957:35;:::o;1148:31::-;;;;:::o;9876:208::-;9972:7;;-1:-1:-1;;;;;9972:7:0;9958:10;:21;9950:52;;;;;-1:-1:-1;;;9950:52:0;;;;;;;;;;;;-1:-1:-1;;;9950:52:0;;;;;;;;;;;;;;;10033:6;:16;;-1:-1:-1;;;;;10033:16:0;;;-1:-1:-1;;;;;;10033:16:0;;;;;;;10060:6;:16;;;;;;;;;;;9876:208::o;8467:32::-;;;;:::o;8506:::-;;;;:::o;12064:1649::-;12113:14;8718:8;;8730:1;8718:13;8710:41;;;;;-1:-1:-1;;;8710:41:0;;;;;;;;;;;;-1:-1:-1;;;8710:41:0;;;;;;;;;;;;;;;8773:1;8762:8;:12;;;8773:1;12182:13:::1;:11;:13::i;:::-;-1:-1:-1::0;12251:6:0::1;::::0;12237:46:::1;::::0;;-1:-1:-1;;;12237:46:0;;12277:4:::1;12237:46;::::0;::::1;::::0;;;12140:55;;-1:-1:-1;12140:55:0;;-1:-1:-1;12221:13:0::1;::::0;-1:-1:-1;;;;;12251:6:0;;::::1;::::0;12237:31:::1;::::0;:46;;;;;::::1;::::0;;;;;;;;12251:6;12237:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12237:46:0;12324:6:::1;::::0;12310:46:::1;::::0;;-1:-1:-1;;;12310:46:0;;12350:4:::1;12310:46;::::0;::::1;::::0;;;12237;;-1:-1:-1;12294:13:0::1;::::0;-1:-1:-1;;;;;12324:6:0;;::::1;::::0;12310:31:::1;::::0;:46;;;;;12237::::1;::::0;12310;;;;;;;;12324:6;12310:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12310:46:0;;-1:-1:-1;12367:12:0::1;12382:23;:8:::0;-1:-1:-1;;;;;12382:23:0;::::1;:12;:23::i;:::-;12367:38:::0;-1:-1:-1;12416:12:0::1;12431:23;:8:::0;-1:-1:-1;;;;;12431:23:0;::::1;:12;:23::i;:::-;12416:38;;12467:10;12480:30;12489:9;12500;12480:8;:30::i;:::-;12521:17;12541:11:::0;12467:43;;-1:-1:-1;12645:17:0;12641:749:::1;;12714:7;::::0;12698:35:::1;::::0;;-1:-1:-1;;;12698:35:0;;;;12679:16:::1;::::0;-1:-1:-1;;;;;12714:7:0::1;::::0;12698:33:::1;::::0;:35:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;12714:7;12698:35;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12698:35:0;;-1:-1:-1;12752:10:0::1;-1:-1:-1::0;;;;;12752:22:0;::::1;;12748:500;;;12817:8;-1:-1:-1::0;;;;;12807:36:0::1;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12807:38:0;;-1:-1:-1;12872:13:0;;;;;:41:::1;;;-1:-1:-1::0;;12889:9:0::1;:24;;12872:41;12864:75;;;::::0;;-1:-1:-1;;;12864:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;12864:75:0;;;;;;;;;;;;;::::1;;12748:500;;;-1:-1:-1::0;;;;;12988:22:0;::::1;::::0;12980:57:::1;;;::::0;;-1:-1:-1;;;12980:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;12980:57:0;;;;;;;;;;;;;::::1;;13068:54;7978:5;13068:31;13078:20;:7:::0;13090;13078:11:::1;:20::i;:::-;13068:9;:31::i;:54::-;13056:66;;13141:36;13155:1;7978:5;13141;:36::i;:::-;12641:749;;;;13292:86;-1:-1:-1::0;;;;;13301:37:0;::::1;:25;:7:::0;13313:12;13301:11:::1;:25::i;:::-;:37;;;;;;-1:-1:-1::0;;;;;13340:37:0;::::1;:25;:7:::0;13352:12;13340:11:::1;:25::i;:::-;:37;;;;;;13292:8;:86::i;:::-;13280:98;;12641:749;13420:1;13408:9;:13;13400:64;;;;-1:-1:-1::0;;;13400:64:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13475:20;13481:2;13485:9;13475:5;:20::i;:::-;13508:49;13516:8;13526;13536:9;13547;13508:7;:49::i;:::-;13572:5;13568:47;;;13606:8;::::0;13587:28:::1;::::0;-1:-1:-1;;;;;13592:8:0;;::::1;::::0;-1:-1:-1;;;13606:8:0;::::1;;13587:18;:28::i;:::-;13579:5;:36:::0;13568:47:::1;13671:34;::::0;;;;;::::1;::::0;::::1;::::0;;;;;13676:10:::1;::::0;13671:34:::1;::::0;;;;;;::::1;-1:-1:-1::0;;8808:1:0;8797:8;:12;-1:-1:-1;12064:1649:0;;;-1:-1:-1;;;;;;12064:1649:0:o;1030:41::-;;;;;;;;;;;;;:::o;8545:17::-;;;;:::o;1406:38::-;;;;;;;;;;;;;:::o;13825:1492::-;13874:12;13888;8718:8;;8730:1;8718:13;8710:41;;;;;-1:-1:-1;;;8710:41:0;;;;;;;;;;;;-1:-1:-1;;;8710:41:0;;;;;;;;;;;;;;;8773:1;8762:8;:12;;;8773:1;13955:13:::1;:11;:13::i;:::-;-1:-1:-1::0;14012:6:0::1;::::0;14093::::1;::::0;14172:47:::1;::::0;;-1:-1:-1;;;14172:47:0;;14213:4:::1;14172:47;::::0;::::1;::::0;;;13913:55;;-1:-1:-1;13913:55:0;;-1:-1:-1;;;;;;14012:6:0;;::::1;::::0;14093;::::1;::::0;13994:15:::1;::::0;14012:6;;14172:32:::1;::::0;:47;;;;;::::1;::::0;;;;;;;;14012:6;14172:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14172:47:0;14246::::1;::::0;;-1:-1:-1;;;14246:47:0;;14287:4:::1;14246:47;::::0;::::1;::::0;;;14172;;-1:-1:-1;14230:13:0::1;::::0;-1:-1:-1;;;;;14246:32:0;::::1;::::0;::::1;::::0;:47;;;;;14172::::1;::::0;14246;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14246:47:0;14339:4:::1;14304:14;14321:24:::0;;;:9:::1;14246:47;14321:24:::0;;;;;14246:47;;-1:-1:-1;14371:30:0::1;14380:9:::0;14391;14371:8:::1;:30::i;:::-;14412:17;14432:11:::0;14358:43;;-1:-1:-1;14432:11:0;14542:23:::1;:9:::0;14556:8;14542:13:::1;:23::i;:::-;:38;;;;;;::::0;-1:-1:-1;14675:12:0;14649:23:::1;:9:::0;14663:8;14649:13:::1;:23::i;:::-;:38;;;;;;14639:48;;14764:1;14754:7;:11;:26;;;;;14779:1;14769:7;:11;14754:26;14746:77;;;;-1:-1:-1::0;;;14746:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14834:31;14848:4;14855:9;14834:5;:31::i;:::-;14876:35;14890:7;14899:2;14903:7;14876:13;:35::i;:::-;14922;14936:7;14945:2;14949:7;14922:13;:35::i;:::-;14979:47;::::0;;-1:-1:-1;;;14979:47:0;;15020:4:::1;14979:47;::::0;::::1;::::0;;;-1:-1:-1;;;;;14979:32:0;::::1;::::0;::::1;::::0;:47;;;;;::::1;::::0;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14979:47:0;15048::::1;::::0;;-1:-1:-1;;;15048:47:0;;15089:4:::1;15048:47;::::0;::::1;::::0;;;14979;;-1:-1:-1;;;;;;15048:32:0;::::1;::::0;::::1;::::0;:47;;;;;14979::::1;::::0;15048;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;15048:47:0;;-1:-1:-1;15108:49:0::1;15116:8:::0;15048:47;15136:9;15147;15108:7:::1;:49::i;:::-;15172:5;15168:47;;;15206:8;::::0;15187:28:::1;::::0;-1:-1:-1;;;;;15192:8:0;;::::1;::::0;-1:-1:-1;;;15206:8:0;::::1;;15187:18;:28::i;:::-;15179:5;:36:::0;15168:47:::1;15271:38;::::0;;;;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;15271:38:0;::::1;::::0;15276:10:::1;::::0;15271:38:::1;::::0;;;;;;;;;::::1;8785:1;;;;;;;;;8808::::0;8797:8;:12;;;;13825:1492;;;:::o;906:44::-;;;;;;;;;;;;;;-1:-1:-1;;;906:44:0;;;;:::o;3058:139::-;3118:4;3135:32;3145:10;3157:2;3161:5;3135:9;:32::i;7937:46::-;7978:5;7937:46;:::o;17367:348::-;8718:8;;8730:1;8718:13;8710:41;;;;;-1:-1:-1;;;8710:41:0;;;;;;;;;;;;-1:-1:-1;;;8710:41:0;;;;;;;;;;;;;;;8773:1;8762:8;:12;17436:6:::1;::::0;17486::::1;::::0;17597:8:::1;::::0;17545:47:::1;::::0;;-1:-1:-1;;;17545:47:0;;17586:4:::1;17545:47;::::0;::::1;::::0;;;-1:-1:-1;;;;;17436:6:0;;::::1;::::0;17486;;::::1;::::0;17518:89:::1;::::0;17436:6;;17541:2;;17545:61:::1;::::0;-1:-1:-1;;;;;17597:8:0::1;::::0;17436:6;;17545:32:::1;::::0;:47;;;;;::::1;::::0;;;;;;;;;17436:6;17545:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17545:47:0;;:51:::1;:61::i;:::-;17518:13;:89::i;:::-;17618;17632:7;17641:2;17645:61;17697:8;;;;;;;;;-1:-1:-1::0;;;;;17697:8:0::1;-1:-1:-1::0;;;;;17645:61:0::1;17659:7;-1:-1:-1::0;;;;;17645:32:0::1;;17686:4;17645:47;;;;;;;;;;;;;-1:-1:-1::0;;;;;17645:47:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;17618:89;-1:-1:-1::0;;8808:1:0;8797:8;:12;-1:-1:-1;17367:348:0:o;8087:22::-;;;-1:-1:-1;;;;;8087:22:0;;:::o;8144:21::-;;;-1:-1:-1;;;;;8144:21:0;;:::o;3514:670::-;3660:15;3648:8;:27;;3640:56;;;;;-1:-1:-1;;;3640:56:0;;;;;;;;;;;;-1:-1:-1;;;3640:56:0;;;;;;;;;;;;;;;3812:16;;-1:-1:-1;;;;;3908:13:0;;;3707:14;3908:13;;;:6;:13;;;;;;;;:15;;;;;;;;;3857:77;;1333:66;3857:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3847:88;;;;;;-1:-1:-1;;;3748:202:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3724:237;;;;;;;;;3999:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3707:14;;3908:15;3999:26;;;;;-1:-1:-1;;3999:26:0;;;;;;;;;;3908:15;3999:26;;;;;;;;;;;;;;;-1:-1:-1;;3999:26:0;;-1:-1:-1;;3999:26:0;;;-1:-1:-1;;;;;;;4044:30:0;;;;;;:59;;;4098:5;-1:-1:-1;;;;;4078:25:0;:16;-1:-1:-1;;;;;4078:25:0;;4044:59;4036:98;;;;;-1:-1:-1;;;4036:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4145:31;4154:5;4161:7;4170:5;4145:8;:31::i;:::-;3514:670;;;;;;;;;:::o;1078:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;17764:172::-;8718:8;;8730:1;8718:13;8710:41;;;;;-1:-1:-1;;;8710:41:0;;;;;;;;;;;;-1:-1:-1;;;8710:41:0;;;;;;;;;;;;;;;8773:1;8762:8;:12;17827:6:::1;::::0;17813:46:::1;::::0;;-1:-1:-1;;;17813:46:0;;17853:4:::1;17813:46;::::0;::::1;::::0;;;17805:123:::1;::::0;-1:-1:-1;;;;;17827:6:0::1;::::0;17813:31:::1;::::0;:46;;;;;::::1;::::0;;;;;;;;17827:6;17813:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17813:46:0;17875:6:::1;::::0;17861:46:::1;::::0;;-1:-1:-1;;;17861:46:0;;17901:4:::1;17861:46;::::0;::::1;::::0;;;-1:-1:-1;;;;;17875:6:0;;::::1;::::0;17861:31:::1;::::0;:46;;;;;17813::::1;::::0;17861;;;;;;;;17875:6;17861:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17861:46:0;17909:8:::1;::::0;-1:-1:-1;;;;;17909:8:0;;::::1;::::0;-1:-1:-1;;;17919:8:0;::::1;;17805:7;:123::i;:::-;8808:1:::0;8797:8;:12;17764:172::o;9064:285::-;8042:34;;;;;;;;;;;;;;;;;9192:43;;-1:-1:-1;;;;;9192:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9192:43:0;-1:-1:-1;;;9192:43:0;;;9181:55;;;;9146:12;;;;9181:10;;;9192:43;9181:55;;;9192:43;9181:55;;9192:43;9181:55;;;;;;;;;;-1:-1:-1;;9181:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9145:91;;;;9255:7;:57;;;;-1:-1:-1;9267:11:0;;:16;;:44;;;9298:4;9287:24;;;;;;;;;;;;;;;-1:-1:-1;9287:24:0;9267:44;9247:94;;;;;-1:-1:-1;;;9247:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9064:285;;;;;:::o;557:142::-;609:6;636;;;:30;;-1:-1:-1;;651:5:0;;;665:1;660;651:5;660:1;646:15;;;;;:20;636:30;628:63;;;;;-1:-1:-1;;;628:63:0;;;;;;;;;;;;-1:-1:-1;;;628:63:0;;;;;;;;;;;;;;420:129;504:5;;;499:16;;;;491:50;;;;;-1:-1:-1;;;491:50:0;;;;;;;;;;;;-1:-1:-1;;;491:50:0;;;;;;;;;;;;;;10169:858;-1:-1:-1;;;;;10281:23:0;;;;;:50;;-1:-1:-1;;;;;;10308:23:0;;;10281:50;10273:80;;;;;-1:-1:-1;;;10273:80:0;;;;;;;;;;;;-1:-1:-1;;;10273:80:0;;;;;;;;;;;;;;;10468:18;;10395:23;:15;:23;;;-1:-1:-1;;;10468:18:0;;;;10451:35;;;10524:15;;;;;;:33;;-1:-1:-1;;;;;;10543:14:0;;;;10524:33;:51;;;;-1:-1:-1;;;;;;10561:14:0;;;;10524:51;10520:336;;;10730:11;10677:64;;10682:44;10716:9;10682:27;10699:9;10682:16;:27::i;:::-;-1:-1:-1;;;;;10682:33:0;;;:44::i;:::-;10653:20;:88;;-1:-1:-1;;;;;10677:50:0;;;;:64;;;;10653:88;;;10780:64;;;10785:44;10819:9;10785:27;10802:9;10785:16;:27::i;:44::-;10756:20;:88;;-1:-1:-1;;;;;10780:50:0;;;;:64;;;;10756:88;;;10520:336;10866:8;:28;;-1:-1:-1;;10866:28:0;-1:-1:-1;;;;;10866:28:0;;;;;;;-1:-1:-1;;;;10905:28:0;-1:-1:-1;;;10905:28:0;;;;;;;;;-1:-1:-1;;;;;10944:35:0;-1:-1:-1;;;10944:35:0;;;;;;;;;10995:24;;;11000:8;;;10995:24;;11010:8;;;;;;;10995:24;;;;;;;;;;;;;;;;;10169:858;;;;;;:::o;2498:169::-;-1:-1:-1;;;;;2579:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;2628:31;;;;;;;;;;;;;;;;;2498:169;;;:::o;2675:220::-;-1:-1:-1;;;;;2769:15:0;;;;;;:9;:15;;;;;;:26;;2789:5;2769:19;:26::i;:::-;-1:-1:-1;;;;;2751:15:0;;;;;;;:9;:15;;;;;;:44;;;;2822:13;;;;;;;:24;;2840:5;2822:17;:24::i;:::-;-1:-1:-1;;;;;2806:13:0;;;;;;;:9;:13;;;;;;;;;:40;;;;2862:25;;;;;;;2806:13;;2862:25;;;;;;;;;;;;;2675:220;;;:::o;11117:835::-;11190:10;11213:13;11245:7;;;;;;;;;-1:-1:-1;;;;;11245:7:0;-1:-1:-1;;;;;11229:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11229:32:0;11324:5;;-1:-1:-1;;;;;11280:19:0;;;;;;-1:-1:-1;11229:32:0;;-1:-1:-1;11324:5:0;11355:590;;11385:11;;11381:494;;11417:10;11430:41;11440:30;-1:-1:-1;;;;;11440:15:0;;;;:30;;:19;:30::i;11430:41::-;11417:54;;11490:14;11507:17;11517:6;11507:9;:17::i;:::-;11490:34;;11555:9;11547:5;:17;11543:317;;;11589:14;11606:37;11622:20;:5;11632:9;11622;:20::i;:::-;11606:11;;;:15;:37::i;:::-;11589:54;-1:-1:-1;11666:16:0;11685:27;11702:9;11685:12;:5;11695:1;11685:9;:12::i;:::-;:16;;:27::i;:::-;11666:46;;11735:14;11764:11;11752:9;:23;;;;;;;-1:-1:-1;11802:13:0;;11798:42;;11817:23;11823:5;11830:9;11817:5;:23::i;:::-;11543:317;;;;11381:494;;;11355:590;;;11896:11;;11892:53;;11932:1;11924:5;:9;11892:53;11117:835;;;;;;:::o;4567:303::-;4612:6;4639:1;4635;:5;4631:232;;;-1:-1:-1;4661:1:0;4694;4690;4686:5;;:9;4710:92;4721:1;4717;:5;4710:92;;;4747:1;4743:5;;4785:1;4780;4776;4772;:5;;;;;;:9;4771:15;;;;;;4767:19;;4710:92;;;4631:232;;;;4823:6;;4819:44;;-1:-1:-1;4850:1:0;4819:44;4567:303;;;:::o;2072:201::-;2145:11;;:22;;2161:5;2145:15;:22::i;:::-;2131:11;:36;;;-1:-1:-1;;;;;2194:13:0;;;;:9;:13;;;;;;:24;;2212:5;2194:17;:24::i;:::-;-1:-1:-1;;;;;2178:13:0;;;;;;:9;:13;;;;;;;;:40;;;;2234:31;;;;;;;2178:13;;;;2234:31;;;;;;;;;;2072:201;;:::o;4353:96::-;4405:6;4432:1;4428;:5;:13;;4440:1;4428:13;;;4436:1;4428:13;4424:17;4353:96;-1:-1:-1;;;4353:96:0:o;2281:209::-;-1:-1:-1;;;;;2360:15:0;;;;;;:9;:15;;;;;;:26;;2380:5;2360:19;:26::i;:::-;-1:-1:-1;;;;;2342:15:0;;;;;;:9;:15;;;;;:44;;;;2411:11;:22;;2427:5;2411:15;:22::i;:::-;2397:11;:36;;;2449:33;;;;;;;;-1:-1:-1;;;;;2449:33:0;;;;;;;;;;;;;2281:209;;:::o;5227:120::-;-1:-1:-1;;;;;5303:10:0;-1:-1:-1;;;5303:17:0;;5227:120::o;5418:108::-;5478:9;-1:-1:-1;;;;;5508:10:0;;-1:-1:-1;;;;;5504:14:0;;5508:10;5504:14;;;;;;5418:108;-1:-1:-1;;;5418:108:0:o;284:128::-;368:5;;;363:16;;;;355:49;;;;;-1:-1:-1;;;355:49:0;;;;;;;;;;;;-1:-1:-1;;;355:49:0;;;;;;;;;;;;;

Swarm Source

ipfs://cecd10e494193294e666b3354414bbf1824c644a002562c06bd342bda4ba76bd
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
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.