Contract 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x929195a3b5af268b9d6e9739cd37ab2977e687dee7abe6bcdd147c236f0e0ef8Transfer*65934842023-01-21 11:33:4719 days 1 hr ago0x23956a36c3e65b72a0ba3d093e217aab7c674661 IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.2241015120390
0x9afdc56ab4fb2ff1642f32ddb337db649e8902262d1d5224b00b082ab253ab85Transfer*65544532023-01-18 22:15:2121 days 15 hrs ago0x7f90769c878a48bd8b055d43de9dcfe053f51f87 IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.224253170712 4,832.001092702
0x9b5a7d1963ad6d091b63229fee7117fd0d9c28e276acf1bf3fab0e26647bc027Transfer*65163682023-01-16 9:52:1824 days 3 hrs ago0x946ceae046e0ac81dc3fdf3c72ff522159a227c4 IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.221550
0x873b6efe7a8990fbd872d5b4f86388704502a7974402116b79c839c8e907de59Transfer*64571842023-01-12 12:58:0528 days 24 mins ago0x7c3b15aeec4969c13c59a41de1a6039cb9d1aed8 IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.111919004973 4,836.394493461
0x6076cda79cda117cde813eb6136241f84b030227babe60cc3cf285b4bd1a2769Transfer*64177412023-01-09 22:48:2630 days 14 hrs ago0xa72bf44a60f0c928ff266bd61d4418b9de907b50 IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.221550
0xf1fec2fed103e23ff6bd3e374e78b6124ff7a1ee9abf8ec2d5cb598b04683f46Transfer*62687742022-12-31 4:55:1540 days 8 hrs ago0x786726cec11025559adaaa4ae390d8d7c9287225 IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.221550
0x50cb3b2356563ae5f0fc66f204218c26ac9f1cda4327e7795bf1728da3c80023Transfer*62274802022-12-28 12:08:5543 days 1 hr ago0xd6d61ebfe5ac1ca218ba31ac596cd54da8667cc8 IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.214769022375 4,846.965072805
0x67314f2c92d8230b48269462750294dc05a8eff0f331db408c445528552c9ce1Transfer*58748022022-12-05 10:08:5866 days 3 hrs ago0x348b5b185130f42c5c5dfc3e7cbadf863047e4c5 IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.2154262046850
0x1c00a8078b71d3ba9352df0d5c7aac440fd32bfe9aac275d2f09fd679b548542Transfer*55660302022-11-15 2:47:0886 days 10 hrs ago0xe886449878c27c0512cb289e3c2a0047444a753e IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.221550
0x16d264ea4a63bc9317e746d844828e9388e762a7b5505d9b60a46126a55c49f7Transfer*55414342022-11-13 11:37:3288 days 1 hr ago0xb6c16cb8527c506a86fe4cf5b0f2fbfb45c3bc2d IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.22155 5,000
0x69769ff04fe3fee6944679d3cb0d658b7fbca8a36f2fb49700d14615691ad26eTransfer*55406782022-11-13 10:24:5088 days 2 hrs ago0x4d08ddf0525304c83824ed458c8c5fa65f127a2d IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.22155 5,000
0xdd7dca101337177410d9b3493201179cebbf922bb787b5dfbb20802f1e79daedTransfer*55382112022-11-13 6:27:0488 days 6 hrs ago0x61b90d462b6009386381d7c106a6d36c1e0da0f5 IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.22155 5,000
0x605dea8e71c7ad90c9c638be21b3c42f330fb6a123697092e0c531504b638c14Transfer*55081062022-11-11 6:56:2290 days 6 hrs ago0x501341f595ae91041a39400cbfde29fb6b744f52 IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.22155 5,000
0xf27d715b0e60aac072c8b7676e85ca8441511f88c5f82a62a797587769943a43Transfer*54871512022-11-09 21:49:5991 days 15 hrs ago0xbb011bbe21ce5d1644d80476d28b08bef561f7a1 IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.112976153474 4,882.077415594
0x72449ef69245bc5b022575269092c54238699fb5d0f36810d8bd05ab8def8f2aTransfer*54601302022-11-08 2:57:5293 days 10 hrs ago0x9a5d2e931bb9e02299dc87a6be263eb8984be99c IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.1157050
0x22001c677037f607a0f05a1e0716611e10b86379111a9902727115d1feedea99Transfer*51927592022-10-21 13:40:57110 days 23 hrs ago0x2c95767be1f803a292d0dbc6d9df4ba6731d42aa IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.11326456486 4,894.540636102
0xe61f615326e059eefe81fae8e9342ccf2e4d62e215d1aa3ec72a83c05bd2f118Transfer*50369752022-10-11 7:54:42121 days 5 hrs ago0xb84b090b6abba636864f13b5d877f6bbbba3fca0 IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.2171287957350
0x3b72423cacc74b3277801ca47b0718e4eaa4eba44ab4c9dbb921f78a0b42e306Transfer*50138612022-10-09 19:16:23122 days 18 hrs ago0x510863d304892a4fe8af17abf42190d82e44f3f7 IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.310170
0x1051ff9b6cb7f600707d06706d570f7dc276dacb43b137d5cf06ba6595bc02e0Transfer*50107142022-10-09 14:18:45122 days 23 hrs ago0x03849fb9e8f428419cbcaa9f313d39a625679a61 IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.113423891663 4,901.425680123
0x085dfc06d8b2ff7bdde6661893018058bbbd02ea0001a1a9fb98fee34d6fdd14Transfer*50078122022-10-09 9:44:16123 days 3 hrs ago0x03849fb9e8f428419cbcaa9f313d39a625679a61 IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.121195921845 4,901.557948925
0xe295ae694a89755e43d5941c0b98fac8c1b5bc9087276c6e9a66b3fb0a380a9bTransfer*49829032022-10-07 18:28:33124 days 18 hrs ago0x090ac26f70c9a44ee617d25457fcf510494cf3eb IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.221550
0x66c82d0b446d08db5a79e3ed935660b3a1f35fef58678dd1f370e1cf3bb3115bTransfer*48560112022-09-29 10:15:43133 days 3 hrs ago0x34367f5c604b1548f698b31644fdb39a89e057e5 IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.221550
0xcdd1ad2d856503257cb140777810a7dcfebb786f88344c8e90ce77318e048ff1Transfer*48233202022-09-27 6:37:37135 days 6 hrs ago0x70a8fc7c1d1372918846c9b8633fd0b4181f9ccf IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.221550
0x8738fd762cac165a90aa9ebe2ab5d4fbc33ba1b0b90bc88ca627ac959ab83e08Transfer*48168632022-09-26 20:24:54135 days 16 hrs ago0xc60cf05eeea73f19bc33606237a4cbac11d97715 IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.22155 5,000
0xcf46a541cbb94973d7d94b9cb12c0c06eb68b111f09a13d202fb6f6fd728a534Transfer*48141392022-09-26 16:06:33135 days 21 hrs ago0x5445edf857d3dd80f2101657715e94d2b19c21ef IN 0x787a47b0596fa8f7d6666f3c59696b3c57bb612b0 CRO0.22155 5,000
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0xa25ffebcf17e3df63a4ed80c14f51d780c0bd7fc4789ee458b1fa75dc678fec18490732022-01-03 1:19:46402 days 12 hrs ago MM Finance: Factory  Contract Creation0 CRO
[ Download CSV Export 
Loading

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

Contract Name:
MeerkatPair

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-01-14
*/

// File contracts/interfaces/IMeerkatFactory.sol

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function INIT_CODE_HASH() external pure returns (bytes32);

    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 setSwapFee(address pair, uint32 swapFee) external;
}


// File contracts/interfaces/IMeerkatPair.sol

pragma solidity >=0.5.0;

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function swapFee() external view returns (uint32);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
    function setSwapFee(uint32) external;
}


// File contracts/interfaces/IMeerkatERC20.sol

pragma solidity >=0.5.0;

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
}


// File contracts/libraries/SafeMath.sol

pragma solidity =0.5.16;

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

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

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

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


// File contracts/MeerkatERC20.sol

pragma solidity =0.5.16;


contract MeerkatERC20 is IMeerkatERC20 {
    using SafeMath for uint;

    string public constant name = 'Meerkat LPs';
    string public constant symbol = 'MEERKAT-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() 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, 'Meerkat: 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, 'Meerkat: INVALID_SIGNATURE');
        _approve(owner, spender, value);
    }
}


// File contracts/libraries/Math.sol

pragma solidity =0.5.16;

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

pragma solidity =0.5.16;

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

pragma solidity >=0.5.0;

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

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

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


// File contracts/interfaces/IMeerkatCallee.sol

pragma solidity >=0.5.0;

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


// File contracts/MeerkatPair.sol

pragma solidity =0.5.16;







contract MeerkatPair is IMeerkatPair, MeerkatERC20 {
    using SafeMath  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
    uint32 public swapFee = 17; // uses 0.17% default

    uint private unlocked = 1;
    modifier lock() {
        require(unlocked == 1, 'Meerkat: 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))), 'Meerkat: 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, 'Meerkat: FORBIDDEN'); // sufficient check
        token0 = _token0;
        token1 = _token1;
    }

    function setSwapFee(uint32 _swapFee) external {
        require(_swapFee > 0, "MeerkatPair: lower then 0");
        require(msg.sender == factory, 'MeerkatPair: FORBIDDEN');
        require(_swapFee <= 1000, 'MeerkatPair: FORBIDDEN_FEE');
        swapFee = _swapFee;
    }

    // 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), 'Meerkat: 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);
    }

    function _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) {
        address feeTo = IMeerkatFactory(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)).mul(2);
                    uint denominator = rootK.mul(3).add(rootKLast.mul(2));
                    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 = IERC20(token0).balanceOf(address(this));
        uint balance1 = IERC20(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) {
            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, 'Meerkat: 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 = IERC20(_token0).balanceOf(address(this));
        uint balance1 = IERC20(_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, 'Meerkat: INSUFFICIENT_LIQUIDITY_BURNED');
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20(_token0).balanceOf(address(this));
        balance1 = IERC20(_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, 'Meerkat: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'Meerkat: 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, 'Meerkat: 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) IMeerkatCallee(to).MeerkatCall(msg.sender, amount0Out, amount1Out, data);
        balance0 = IERC20(_token0).balanceOf(address(this));
        balance1 = IERC20(_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, 'Meerkat: INSUFFICIENT_INPUT_AMOUNT');
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
        uint _swapFee = swapFee;
        uint balance0Adjusted = (balance0.mul(10000).sub(amount0In.mul(_swapFee)));
        uint balance1Adjusted = (balance1.mul(10000).sub(amount1In.mul(_swapFee)));
        require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(10000**2), 'Meerkat: 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, IERC20(_token0).balanceOf(address(this)).sub(reserve0));
        _safeTransfer(_token1, to, IERC20(_token1).balanceOf(address(this)).sub(reserve1));
    }

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

Contract ABI

[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint112","name":"reserve0","type":"uint112"},{"indexed":false,"internalType":"uint112","name":"reserve1","type":"uint112"}],"name":"Sync","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint32","name":"_blockTimestampLast","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint32","name":"_swapFee","type":"uint32"}],"name":"setSwapFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount0Out","type":"uint256"},{"internalType":"uint256","name":"amount1Out","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"swapFee","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"sync","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]

6080604052600c805463ffffffff191660111790556001600d5534801561002557600080fd5b5060405146908060526125388239604080519182900360520182208282018252600b83526a4d6565726b6174204c507360a81b6020938401528151808301835260018152603160f81b908401528151808401919091527f60676653c1150bb4efe35f490be641c2c0b4839ffb6df5fbf84741b8db7ad0e2818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b03191633179055612422806101166000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636a62784211610104578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610583578063d6d788c3146105d4578063dd62ed3e146105f7578063fff6cae914610625576101cf565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573578063d21220a71461057b576101cf565b80637ecebe00116100de5780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101cf565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101cf565b806330adf81f11610171578063485cc9551161014b578063485cc955146103f957806354cf2aeb146104275780635909c0d5146104485780635a3d549314610450576101cf565b806330adf81f146103cb578063313ce567146103d35780633644e515146103f1576101cf565b8063095ea7b3116101ad578063095ea7b3146103175780630dfe16811461035757806318160ddd1461037b57806323b872dd14610395576101cf565b8063022c0d9f146101d457806306fdde03146102625780630902f1ac146102df575b600080fd5b610260600480360360808110156101ea57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b50909250905061062d565b005b61026a610b84565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a457818101518382015260200161028c565b50505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7610bab565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103436004803603604081101561032d57600080fd5b506001600160a01b038135169060200135610bd5565b604080519115158252519081900360200190f35b61035f610bec565b604080516001600160a01b039092168252519081900360200190f35b610383610bfb565b60408051918252519081900360200190f35b610343600480360360608110156103ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610c01565b610383610c9b565b6103db610cbf565b6040805160ff9092168252519081900360200190f35b610383610cc4565b6102606004803603604081101561040f57600080fd5b506001600160a01b0381358116916020013516610cca565b61042f610d4c565b6040805163ffffffff9092168252519081900360200190f35b610383610d58565b610383610d5e565b6103836004803603602081101561046e57600080fd5b50356001600160a01b0316610d64565b6103836004803603602081101561049457600080fd5b50356001600160a01b0316611062565b610383611074565b610383600480360360208110156104c257600080fd5b50356001600160a01b031661107a565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b031661108c565b6040805192835260208301919091528051918290030190f35b61026a611430565b6103436004803603604081101561052f57600080fd5b506001600160a01b038135169060200135611456565b610383611463565b6102606004803603602081101561056357600080fd5b50356001600160a01b0316611469565b61035f6115d2565b61035f6115e1565b610260600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356115f0565b610260600480360360208110156105ea57600080fd5b503563ffffffff166117f0565b6103836004803603604081101561060d57600080fd5b506001600160a01b038135811691602001351661191c565b610260611939565b600d54600114610676576040805162461bcd60e51b815260206004820152600f60248201526e1359595c9ad85d0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600d55841515806106895750600084115b6106c45760405162461bcd60e51b81526004018080602001828103825260238152602001806123cb6023913960400191505060405180910390fd5b6000806106cf610bab565b5091509150816001600160701b0316871080156106f45750806001600160701b031686105b610745576040805162461bcd60e51b815260206004820152601f60248201527f4d6565726b61743a20494e53554646494349454e545f4c495155494449545900604482015290519081900360640190fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107835750806001600160a01b0316896001600160a01b031614155b6107ca576040805162461bcd60e51b81526020600482015260136024820152724d6565726b61743a20494e56414c49445f544f60681b604482015290519081900360640190fd5b8a156107db576107db828a8d611a99565b89156107ec576107ec818a8c611a99565b86156108a757886001600160a01b03166321d8d577338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561088e57600080fd5b505af11580156108a2573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108ed57600080fd5b505afa158015610901573d6000803e3d6000fd5b505050506040513d602081101561091757600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561096357600080fd5b505afa158015610977573d6000803e3d6000fd5b505050506040513d602081101561098d57600080fd5b5051925060009150506001600160701b0385168a900383116109b05760006109bf565b89856001600160701b03160383035b9050600089856001600160701b03160383116109dc5760006109eb565b89856001600160701b03160383035b905060008211806109fc5750600081115b610a375760405162461bcd60e51b81526004018080602001828103825260228152602001806123836022913960400191505060405180910390fd5b600c5463ffffffff90811690600090610a7690610a589086908590611c3316565b610a6a8861271063ffffffff611c3316565b9063ffffffff611c9616565b90506000610a8d610a58858563ffffffff611c3316565b9050610abf6305f5e100610ab36001600160701b038c8116908c1663ffffffff611c3316565b9063ffffffff611c3316565b610acf838363ffffffff611c3316565b1015610b0f576040805162461bcd60e51b815260206004820152600a6024820152694d6565726b61743a204b60b01b604482015290519081900360640190fd5b505050610b1e84848888611ce6565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600b81526020016a4d6565726b6174204c507360a81b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610be2338484611ea9565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c86576001600160a01b0384166000908152600260209081526040808320338452909152902054610c61908363ffffffff611c9616565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c91848484611f0b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d1e576040805162461bcd60e51b815260206004820152601260248201527126b2b2b935b0ba1d102327a92124a22222a760711b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b600c5463ffffffff1681565b60095481565b600a5481565b6000600d54600114610daf576040805162461bcd60e51b815260206004820152600f60248201526e1359595c9ad85d0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600d81905580610dbf610bab565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e1357600080fd5b505afa158015610e27573d6000803e3d6000fd5b505050506040513d6020811015610e3d57600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e9057600080fd5b505afa158015610ea4573d6000803e3d6000fd5b505050506040513d6020811015610eba57600080fd5b505190506000610ed9836001600160701b03871663ffffffff611c9616565b90506000610ef6836001600160701b03871663ffffffff611c9616565b90506000610f048787611fc5565b60005490915080610f4157610f2d6103e8610a6a610f28878763ffffffff611c3316565b612138565b9850610f3c60006103e861218a565b610f90565b610f8d6001600160701b038916610f5e868463ffffffff611c3316565b81610f6557fe5b046001600160701b038916610f80868563ffffffff611c3316565b81610f8757fe5b04612220565b98505b60008911610fcf5760405162461bcd60e51b81526004018080602001828103825260268152602001806123a56026913960400191505060405180910390fd5b610fd98a8a61218a565b610fe586868a8a611ce6565b811561101557600854611011906001600160701b0380821691600160701b90041663ffffffff611c3316565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146110d8576040805162461bcd60e51b815260206004820152600f60248201526e1359595c9ad85d0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600d819055806110e8610bab565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561114457600080fd5b505afa158015611158573d6000803e3d6000fd5b505050506040513d602081101561116e57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111bc57600080fd5b505afa1580156111d0573d6000803e3d6000fd5b505050506040513d60208110156111e657600080fd5b5051306000908152600160205260408120549192506112058888611fc5565b6000549091508061121c848763ffffffff611c3316565b8161122357fe5b049a5080611237848663ffffffff611c3316565b8161123e57fe5b04995060008b118015611251575060008a115b61128c5760405162461bcd60e51b815260040180806020018281038252602681526020018061235d6026913960400191505060405180910390fd5b6112963084612238565b6112a1878d8d611a99565b6112ac868d8c611a99565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156112f257600080fd5b505afa158015611306573d6000803e3d6000fd5b505050506040513d602081101561131c57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561136857600080fd5b505afa15801561137c573d6000803e3d6000fd5b505050506040513d602081101561139257600080fd5b505193506113a285858b8b611ce6565b81156113d2576008546113ce906001600160701b0380821691600160701b90041663ffffffff611c3316565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b6040518060400160405280600a81526020016904d4545524b41542d4c560b41b81525081565b6000610be2338484611f0b565b6103e881565b600d546001146114b2576040805162461bcd60e51b815260206004820152600f60248201526e1359595c9ad85d0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b039485169490931692611561928592879261155c926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561152457600080fd5b505afa158015611538573d6000803e3d6000fd5b505050506040513d602081101561154e57600080fd5b50519063ffffffff611c9616565b611a99565b600854604080516370a0823160e01b815230600482015290516115c8928492879261155c92600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561152457600080fd5b50506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611638576040805162461bcd60e51b815260206004820152601060248201526f1359595c9ad85d0e881156141254915160821b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611753573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117895750886001600160a01b0316816001600160a01b0316145b6117da576040805162461bcd60e51b815260206004820152601a60248201527f4d6565726b61743a20494e56414c49445f5349474e4154555245000000000000604482015290519081900360640190fd5b6117e5898989611ea9565b505050505050505050565b60008163ffffffff161161184b576040805162461bcd60e51b815260206004820152601960248201527f4d6565726b6174506169723a206c6f776572207468656e203000000000000000604482015290519081900360640190fd5b6005546001600160a01b031633146118a3576040805162461bcd60e51b815260206004820152601660248201527526b2b2b935b0ba2830b4b91d102327a92124a22222a760511b604482015290519081900360640190fd5b6103e88163ffffffff161115611900576040805162461bcd60e51b815260206004820152601a60248201527f4d6565726b6174506169723a20464f5242494444454e5f464545000000000000604482015290519081900360640190fd5b600c805463ffffffff191663ffffffff92909216919091179055565b600260209081526000928352604080842090915290825290205481565b600d54600114611982576040805162461bcd60e51b815260206004820152600f60248201526e1359595c9ad85d0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600d55600654604080516370a0823160e01b81523060048201529051611a92926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156119d357600080fd5b505afa1580156119e7573d6000803e3d6000fd5b505050506040513d60208110156119fd57600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611a4a57600080fd5b505afa158015611a5e573d6000803e3d6000fd5b505050506040513d6020811015611a7457600080fd5b50516008546001600160701b0380821691600160701b900416611ce6565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611b465780518252601f199092019160209182019101611b27565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611ba8576040519150601f19603f3d011682016040523d82523d6000602084013e611bad565b606091505b5091509150818015611bdb575080511580611bdb5750808060200190516020811015611bd857600080fd5b50515b611c2c576040805162461bcd60e51b815260206004820152601860248201527f4d6565726b61743a205452414e534645525f4641494c45440000000000000000604482015290519081900360640190fd5b5050505050565b6000811580611c4e57505080820282828281611c4b57fe5b04145b610be6576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610be6576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611d0457506001600160701b038311155b611d49576040805162461bcd60e51b81526020600482015260116024820152704d6565726b61743a204f564552464c4f5760781b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d7957506001600160701b03841615155b8015611d8d57506001600160701b03831615155b15611dfe578063ffffffff16611dbb85611da6866122d6565b6001600160e01b03169063ffffffff6122e816565b600980546001600160e01b03929092169290920201905563ffffffff8116611de684611da6876122d6565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611f34908263ffffffff611c9616565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f69908263ffffffff61230d16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561201657600080fd5b505afa15801561202a573d6000803e3d6000fd5b505050506040513d602081101561204057600080fd5b5051600b546001600160a01b03821615801594509192509061212457801561211f576000612083610f286001600160701b0388811690881663ffffffff611c3316565b9050600061209083612138565b90508082111561211c5760006120c36002610ab36120b4868663ffffffff611c9616565b6000549063ffffffff611c3316565b905060006120f86120db84600263ffffffff611c3316565b6120ec86600363ffffffff611c3316565b9063ffffffff61230d16565b9050600081838161210557fe5b049050801561211857612118878261218a565b5050505b50505b612130565b8015612130576000600b555b505092915050565b6000600382111561217b575080600160028204015b818110156121755780915060028182858161216457fe5b04018161216d57fe5b04905061214d565b50612185565b8115612185575060015b919050565b60005461219d908263ffffffff61230d16565b60009081556001600160a01b0383168152600160205260409020546121c8908263ffffffff61230d16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061222f5781612231565b825b9392505050565b6001600160a01b038216600090815260016020526040902054612261908263ffffffff611c9616565b6001600160a01b0383166000908152600160205260408120919091555461228e908263ffffffff611c9616565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161230557fe5b049392505050565b80820182811015610be6576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe4d6565726b61743a20494e53554646494349454e545f4c49515549444954595f4255524e45444d6565726b61743a20494e53554646494349454e545f494e5055545f414d4f554e544d6565726b61743a20494e53554646494349454e545f4c49515549444954595f4d494e5445444d6565726b61743a20494e53554646494349454e545f4f55545055545f414d4f554e54a265627a7a723158203e4cdfe4a2c857b347361b3b60b3595e9cdcb946c7e9d11407d818baebb9802364736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429

Deployed ByteCode Sourcemap

11321:9980:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11321:9980:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18778:1930;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;18778:1930:0;;;;;;;;-1:-1:-1;;;;;18778:1930:0;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;18778:1930:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18778:1930:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;18778:1930:0;;-1:-1:-1;18778:1930:0;-1:-1:-1;18778:1930:0;:::i;:::-;;5484:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5484:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12389:231;;;:::i;:::-;;;;-1:-1:-1;;;;;12389:231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7536:147;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7536:147:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;11625:21;;;:::i;:::-;;;;-1:-1:-1;;;;;11625:21:0;;;;;;;;;;;;;;5627:24;;;:::i;:::-;;;;;;;;;;;;;;;;7838:301;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7838:301:0;;;;;;;;;;;;;;;;;:::i;5919:108::-;;;:::i;5585:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5776:31;;;:::i;13447:208::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;13447:208:0;;;;;;;;;;:::i;12158:26::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11976:32;;;:::i;12015:::-;;;:::i;15852:1238::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15852:1238:0;-1:-1:-1;;;;;15852:1238:0;;:::i;5658:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5658:41:0;-1:-1:-1;;;;;5658:41:0;;:::i;12054:17::-;;;:::i;6034:38::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6034:38:0;-1:-1:-1;;;;;6034:38:0;;:::i;17202:1464::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17202:1464:0;-1:-1:-1;;;;;17202:1464:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5534:44;;;:::i;7691:139::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7691:139:0;;;;;;;;:::i;11446:46::-;;;:::i;20757:334::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20757:334:0;-1:-1:-1;;;;;20757:334:0;;:::i;11596:22::-;;;:::i;11653:21::-;;;:::i;8147:670::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;8147:670:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13663:277::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13663:277:0;;;;:::i;5706:61::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5706:61:0;;;;;;;;;;:::i;21140:158::-;;;:::i;18778:1930::-;12282:8;;12294:1;12282:13;12274:41;;;;;-1:-1:-1;;;12274:41:0;;;;;;;;;;;;-1:-1:-1;;;12274:41:0;;;;;;;;;;;;;;;12337:1;12326:8;:12;18892:14;;;;:32;;;18923:1;18910:10;:14;18892:32;18884:80;;;;-1:-1:-1;;;18884:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18976:17;18995;19017:13;:11;:13::i;:::-;18975:55;;;;;19077:9;-1:-1:-1;;;;;19064:22:0;:10;:22;:48;;;;;19103:9;-1:-1:-1;;;;;19090:22:0;:10;:22;19064:48;19056:92;;;;;-1:-1:-1;;;19056:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19293:6;;19328;;19161:13;;;;-1:-1:-1;;;;;19293:6:0;;;;19328;;;;19353:13;;;;;;;:30;;;19376:7;-1:-1:-1;;;;;19370:13:0;:2;-1:-1:-1;;;;;19370:13:0;;;19353:30;19345:62;;;;;-1:-1:-1;;;19345:62:0;;;;;;;;;;;;-1:-1:-1;;;19345:62:0;;;;;;;;;;;;;;;19422:14;;19418:58;;19438:38;19452:7;19461:2;19465:10;19438:13;:38::i;:::-;19525:14;;19521:58;;19541:38;19555:7;19564:2;19568:10;19541:13;:38::i;:::-;19628:15;;19624:93;;19660:2;-1:-1:-1;;;;;19645:30:0;;19676:10;19688;19700;19712:4;;19645:72;;;;;;;;;;;;;-1:-1:-1;;;;;19645:72:0;-1:-1:-1;;;;;19645:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;19645:72:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19645:72:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19645:72:0;;;;19624:93;19739:40;;;-1:-1:-1;;;19739:40:0;;19773:4;19739:40;;;;;;-1:-1:-1;;;;;19739:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;19739:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19739:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19739:40:0;19801;;;-1:-1:-1;;;19801:40:0;;19835:4;19801:40;;;;;;19739;;-1:-1:-1;;;;;;19801:25:0;;;;;:40;;;;;19739;;19801;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;19801:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19801:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19801:40:0;;-1:-1:-1;19863:14:0;;-1:-1:-1;;;;;;;19891:22:0;;;;;19880:33;;:75;;19954:1;19880:75;;;19940:10;19928:9;-1:-1:-1;;;;;19928:22:0;;19916:8;:35;19880:75;19863:92;;19966:14;20006:10;19994:9;-1:-1:-1;;;;;19994:22:0;;19983:8;:33;:75;;20057:1;19983:75;;;20043:10;20031:9;-1:-1:-1;;;;;20031:22:0;;20019:8;:35;19983:75;19966:92;;20089:1;20077:9;:13;:30;;;;20106:1;20094:9;:13;20077:30;20069:77;;;;-1:-1:-1;;;20069:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20248:7;;;;;;;20232:13;;20291:48;;20315:23;;:9;;20248:7;;20315:13;:23;:::i;:::-;20291:19;:8;20304:5;20291:19;:12;:19;:::i;:::-;:23;:48;:23;:48;:::i;:::-;20266:74;-1:-1:-1;20351:21:0;20376:48;20400:23;:9;20414:8;20400:23;:13;:23;:::i;20376:48::-;20351:74;-1:-1:-1;20486:44:0;20521:8;20486:30;-1:-1:-1;;;;;20486:15:0;;;;:30;;;:19;:30;:::i;:::-;:34;:44;:34;:44;:::i;:::-;20444:38;:16;20465;20444:38;:20;:38;:::i;:::-;:86;;20436:109;;;;;-1:-1:-1;;;20436:109:0;;;;;;;;;;;;-1:-1:-1;;;20436:109:0;;;;;;;;;;;;;;;12349:1;;;20569:49;20577:8;20587;20597:9;20608;20569:7;:49::i;:::-;20634:66;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20634:66:0;;;20639:10;;20634:66;;;;;;;;;-1:-1:-1;;12372:1:0;12361:8;:12;-1:-1:-1;;;;;;;;;18778:1930:0:o;5484:43::-;;;;;;;;;;;;;;-1:-1:-1;;;5484:43:0;;;;:::o;12389:231::-;12522:8;;-1:-1:-1;;;;;12522:8:0;;;;-1:-1:-1;;;12553:8:0;;;;;;-1:-1:-1;;;12594:18:0;;;;;12389:231::o;7536:147::-;7600:4;7617:36;7626:10;7638:7;7647:5;7617:8;:36::i;:::-;-1:-1:-1;7671:4:0;7536:147;;;;;:::o;11625:21::-;;;-1:-1:-1;;;;;11625:21:0;;:::o;5627:24::-;;;;:::o;7838:301::-;-1:-1:-1;;;;;7937:15:0;;7916:4;7937:15;;;:9;:15;;;;;;;;7953:10;7937:27;;;;;;;;-1:-1:-1;;7937:39:0;7933:140;;-1:-1:-1;;;;;8023:15:0;;;;;;:9;:15;;;;;;;;8039:10;8023:27;;;;;;;;:38;;8055:5;8023:38;:31;:38;:::i;:::-;-1:-1:-1;;;;;7993:15:0;;;;;;:9;:15;;;;;;;;8009:10;7993:27;;;;;;;:68;7933:140;8083:26;8093:4;8099:2;8103:5;8083:9;:26::i;:::-;-1:-1:-1;8127:4:0;7838:301;;;;;:::o;5919:108::-;5961:66;5919:108;:::o;5585:35::-;5618:2;5585:35;:::o;5776:31::-;;;;:::o;13447:208::-;13543:7;;-1:-1:-1;;;;;13543:7:0;13529:10;:21;13521:52;;;;;-1:-1:-1;;;13521:52:0;;;;;;;;;;;;-1:-1:-1;;;13521:52:0;;;;;;;;;;;;;;;13604:6;:16;;-1:-1:-1;;;;;13604:16:0;;;-1:-1:-1;;;;;;13604:16:0;;;;;;;13631:6;:16;;;;;;;;;;;13447:208::o;12158:26::-;;;;;;:::o;11976:32::-;;;;:::o;12015:::-;;;;:::o;15852:1238::-;15901:14;12282:8;;12294:1;12282:13;12274:41;;;;;-1:-1:-1;;;12274:41:0;;;;;;;;;;;;-1:-1:-1;;;12274:41:0;;;;;;;;;;;;;;;12337:1;12326:8;:12;;;12337:1;15970:13;:11;:13::i;:::-;-1:-1:-1;16032:6:0;;16025:39;;;-1:-1:-1;;;16025:39:0;;16058:4;16025:39;;;;;;15928:55;;-1:-1:-1;15928:55:0;;-1:-1:-1;16009:13:0;;-1:-1:-1;;;;;16032:6:0;;;;16025:24;;:39;;;;;;;;;;;;;;16032:6;16025:39;;;5:2:-1;;;;30:1;27;20:12;5:2;16025:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16025:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16025:39:0;16098:6;;16091:39;;;-1:-1:-1;;;16091:39:0;;16124:4;16091:39;;;;;;16025;;-1:-1:-1;16075:13:0;;-1:-1:-1;;;;;16098:6:0;;;;16091:24;;:39;;;;;16025;;16091;;;;;;;;16098:6;16091:39;;;5:2:-1;;;;30:1;27;20:12;5:2;16091:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16091:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16091:39:0;;-1:-1:-1;16141:12:0;16156:23;:8;-1:-1:-1;;;;;16156:23:0;;;:12;:23;:::i;:::-;16141:38;-1:-1:-1;16190:12:0;16205:23;:8;-1:-1:-1;;;;;16205:23:0;;;:12;:23;:::i;:::-;16190:38;;16241:10;16254:30;16263:9;16274;16254:8;:30::i;:::-;16295:17;16315:11;16241:43;;-1:-1:-1;16419:17:0;16415:352;;16465:54;11487:5;16465:31;16475:20;:7;16487;16475:20;:11;:20;:::i;:::-;16465:9;:31::i;:54::-;16453:66;;16533:36;16547:1;11487:5;16533;:36::i;:::-;16415:352;;;16669:86;-1:-1:-1;;;;;16678:37:0;;:25;:7;16690:12;16678:25;:11;:25;:::i;:::-;:37;;;;;;-1:-1:-1;;;;;16717:37:0;;:25;:7;16729:12;16717:25;:11;:25;:::i;:::-;:37;;;;;;16669:8;:86::i;:::-;16657:98;;16415:352;16797:1;16785:9;:13;16777:64;;;;-1:-1:-1;;;16777:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16852:20;16858:2;16862:9;16852:5;:20::i;:::-;16885:49;16893:8;16903;16913:9;16924;16885:7;:49::i;:::-;16949:5;16945:47;;;16983:8;;16964:28;;-1:-1:-1;;;;;16969:8:0;;;;-1:-1:-1;;;16983:8:0;;;16964:28;:18;:28;:::i;:::-;16956:5;:36;16945:47;17048:34;;;;;;;;;;;;;;17053:10;;17048:34;;;;;;;;-1:-1:-1;;12372:1:0;12361:8;:12;-1:-1:-1;15852:1238:0;;;-1:-1:-1;;;;;;15852:1238:0:o;5658:41::-;;;;;;;;;;;;;:::o;12054:17::-;;;;:::o;6034:38::-;;;;;;;;;;;;;:::o;17202:1464::-;17251:12;17265;12282:8;;12294:1;12282:13;12274:41;;;;;-1:-1:-1;;;12274:41:0;;;;;;;;;;;;-1:-1:-1;;;12274:41:0;;;;;;;;;;;;;;;12337:1;12326:8;:12;;;12337:1;17332:13;:11;:13::i;:::-;-1:-1:-1;17389:6:0;;17470;;17549:40;;;-1:-1:-1;;;17549:40:0;;17583:4;17549:40;;;;;;17290:55;;-1:-1:-1;17290:55:0;;-1:-1:-1;;;;;;17389:6:0;;;;17470;;;17371:15;;17389:6;;17549:25;;:40;;;;;;;;;;;;;;17389:6;17549:40;;;5:2:-1;;;;30:1;27;20:12;5:2;17549:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17549:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17549:40:0;17616;;;-1:-1:-1;;;17616:40:0;;17650:4;17616:40;;;;;;17549;;-1:-1:-1;17600:13:0;;-1:-1:-1;;;;;17616:25:0;;;;;:40;;;;;17549;;17616;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;17616:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17616:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17616:40:0;17702:4;17667:14;17684:24;;;:9;17616:40;17684:24;;;;;17616:40;;-1:-1:-1;17734:30:0;17743:9;17754;17734:8;:30::i;:::-;17775:17;17795:11;17721:43;;-1:-1:-1;17795:11:0;17905:23;:9;17919:8;17905:23;:13;:23;:::i;:::-;:38;;;;;;;-1:-1:-1;18038:12:0;18012:23;:9;18026:8;18012:23;:13;:23;:::i;:::-;:38;;;;;;18002:48;;18127:1;18117:7;:11;:26;;;;;18142:1;18132:7;:11;18117:26;18109:77;;;;-1:-1:-1;;;18109:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18197:31;18211:4;18218:9;18197:5;:31::i;:::-;18239:35;18253:7;18262:2;18266:7;18239:13;:35::i;:::-;18285;18299:7;18308:2;18312:7;18285:13;:35::i;:::-;18342:40;;;-1:-1:-1;;;18342:40:0;;18376:4;18342:40;;;;;;-1:-1:-1;;;;;18342:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;18342:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18342:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18342:40:0;18404;;;-1:-1:-1;;;18404:40:0;;18438:4;18404:40;;;;;;18342;;-1:-1:-1;;;;;;18404:25:0;;;;;:40;;;;;18342;;18404;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;18404:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18404:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18404:40:0;;-1:-1:-1;18457:49:0;18465:8;18404:40;18485:9;18496;18457:7;:49::i;:::-;18521:5;18517:47;;;18555:8;;18536:28;;-1:-1:-1;;;;;18541:8:0;;;;-1:-1:-1;;;18555:8:0;;;18536:28;:18;:28;:::i;:::-;18528:5;:36;18517:47;18620:38;;;;;;;;;;;;;;-1:-1:-1;;;;;18620:38:0;;;18625:10;;18620:38;;;;;;;;;;;12349:1;;;;;;;;;12372;12361:8;:12;;;;17202:1464;;;:::o;5534:44::-;;;;;;;;;;;;;;-1:-1:-1;;;5534:44:0;;;;:::o;7691:139::-;7751:4;7768:32;7778:10;7790:2;7794:5;7768:9;:32::i;11446:46::-;11487:5;11446:46;:::o;20757:334::-;12282:8;;12294:1;12282:13;12274:41;;;;;-1:-1:-1;;;12274:41:0;;;;;;;;;;;;-1:-1:-1;;;12274:41:0;;;;;;;;;;;;;;;12337:1;12326:8;:12;20826:6;;20876;;20980:8;;20935:40;;;-1:-1:-1;;;20935:40:0;;20969:4;20935:40;;;;;;-1:-1:-1;;;;;20826:6:0;;;;20876;;;;20908:82;;20826:6;;20931:2;;20935:54;;-1:-1:-1;;;;;20980:8:0;;20826:6;;20935:25;;:40;;;;;;;;;;;;;;;20826:6;20935:40;;;5:2:-1;;;;30:1;27;20:12;5:2;20935:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20935:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20935:40:0;;:54;:44;:54;:::i;:::-;20908:13;:82::i;:::-;21073:8;;21028:40;;;-1:-1:-1;;;21028:40:0;;21062:4;21028:40;;;;;;21001:82;;21015:7;;21024:2;;21028:54;;-1:-1:-1;;;21073:8:0;;-1:-1:-1;;;;;21073:8:0;;-1:-1:-1;;;;;21028:25:0;;;;;:40;;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;21001:82:0;-1:-1:-1;;12372:1:0;12361:8;:12;-1:-1:-1;20757:334:0:o;11596:22::-;;;-1:-1:-1;;;;;11596:22:0;;:::o;11653:21::-;;;-1:-1:-1;;;;;11653:21:0;;:::o;8147:670::-;8293:15;8281:8;:27;;8273:56;;;;;-1:-1:-1;;;8273:56:0;;;;;;;;;;;;-1:-1:-1;;;8273:56:0;;;;;;;;;;;;;;;8445:16;;-1:-1:-1;;;;;8541:13:0;;;8340:14;8541:13;;;:6;:13;;;;;;;;:15;;;;;;;;;8490:77;;5961:66;8490:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;8490:77:0;;;;;8480:88;;;;;;-1:-1:-1;;;8381:202:0;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;8381:202:0;;;;;;8357:237;;;;;;;;;8632:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8340:14;;8541:15;8632:26;;;;;-1:-1:-1;;8632:26:0;;;;;;;;;;8541:15;8632:26;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;8632:26:0;;-1:-1:-1;;8632:26:0;;;-1:-1:-1;;;;;;;8677:30:0;;;;;;:59;;;8731:5;-1:-1:-1;;;;;8711:25:0;:16;-1:-1:-1;;;;;8711:25:0;;8677:59;8669:98;;;;;-1:-1:-1;;;8669:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8778:31;8787:5;8794:7;8803:5;8778:8;:31::i;:::-;8147:670;;;;;;;;;:::o;13663:277::-;13739:1;13728:8;:12;;;13720:50;;;;;-1:-1:-1;;;13720:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13803:7;;-1:-1:-1;;;;;13803:7:0;13789:10;:21;13781:56;;;;;-1:-1:-1;;;13781:56:0;;;;;;;;;;;;-1:-1:-1;;;13781:56:0;;;;;;;;;;;;;;;13868:4;13856:8;:16;;;;13848:55;;;;;-1:-1:-1;;;13848:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13914:7;:18;;-1:-1:-1;;13914:18:0;;;;;;;;;;;;13663:277::o;5706:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;21140:158::-;12282:8;;12294:1;12282:13;12274:41;;;;;-1:-1:-1;;;12274:41:0;;;;;;;;;;;;-1:-1:-1;;;12274:41:0;;;;;;;;;;;;;;;12337:1;12326:8;:12;21196:6;;21189:39;;;-1:-1:-1;;;21189:39:0;;21222:4;21189:39;;;;;;21181:109;;-1:-1:-1;;;;;21196:6:0;;21189:24;;:39;;;;;;;;;;;;;;21196:6;21189:39;;;5:2:-1;;;;30:1;27;20:12;5:2;21189:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21189:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21189:39:0;21237:6;;21230:39;;;-1:-1:-1;;;21230:39:0;;21263:4;21230:39;;;;;;-1:-1:-1;;;;;21237:6:0;;;;21230:24;;:39;;;;;21189;;21230;;;;;;;;21237:6;21230:39;;;5:2:-1;;;;30:1;27;20:12;5:2;21230:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21230:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21230:39:0;21271:8;;-1:-1:-1;;;;;21271:8:0;;;;-1:-1:-1;;;21281:8:0;;;21181:7;:109::i;:::-;12372:1;12361:8;:12;21140:158::o;12628:285::-;11551:34;;;;;;;;;;;;;;;;;12756:43;;-1:-1:-1;;;;;12756:43:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12756:43:0;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;12745:55:0;;;;12710:12;;12724:17;;12745:10;;;12756:43;12745:55;;;25:18:-1;12745:55:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;12745:55:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;12709:91:0;;;;12819:7;:57;;;;-1:-1:-1;12831:11:0;;:16;;:44;;;12862:4;12851:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12851:24:0;12831:44;12811:94;;;;;-1:-1:-1;;;12811:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12628:285;;;;;:::o;5187:142::-;5239:6;5266;;;:30;;-1:-1:-1;;5281:5:0;;;5295:1;5290;5281:5;5290:1;5276:15;;;;;:20;5266:30;5258:63;;;;;-1:-1:-1;;;5258:63:0;;;;;;;;;;;;-1:-1:-1;;;5258:63:0;;;;;;;;;;;;;;5050:129;5134:5;;;5129:16;;;;5121:50;;;;;-1:-1:-1;;;5121:50:0;;;;;;;;;;;;-1:-1:-1;;;5121:50:0;;;;;;;;;;;;;;14025:858;-1:-1:-1;;;;;14137:23:0;;;;;:50;;-1:-1:-1;;;;;;14164:23:0;;;14137:50;14129:80;;;;;-1:-1:-1;;;14129:80:0;;;;;;;;;;;;-1:-1:-1;;;14129:80:0;;;;;;;;;;;;;;;14324:18;;14251:23;:15;:23;;;-1:-1:-1;;;14324:18:0;;;;14307:35;;;14380:15;;;;;;:33;;-1:-1:-1;;;;;;14399:14:0;;;;14380:33;:51;;;;-1:-1:-1;;;;;;14417:14:0;;;;14380:51;14376:336;;;14586:11;14533:64;;14538:44;14572:9;14538:27;14555:9;14538:16;:27::i;:::-;-1:-1:-1;;;;;14538:33:0;;:44;:33;:44;:::i;:::-;14509:20;:88;;-1:-1:-1;;;;;14533:50:0;;;;:64;;;;14509:88;;;14636:64;;;14641:44;14675:9;14641:27;14658:9;14641:16;:27::i;:44::-;14612:20;:88;;-1:-1:-1;;;;;14636:50:0;;;;:64;;;;14612:88;;;14376:336;14722:8;:28;;-1:-1:-1;;14722:28:0;-1:-1:-1;;;;;14722:28:0;;;;;;;-1:-1:-1;;;;14761:28:0;-1:-1:-1;;;14761:28:0;;;;;;;;;-1:-1:-1;;;;;14800:35:0;-1:-1:-1;;;14800:35:0;;;;;;;;;14851:24;;;14856:8;;;14851:24;;14866:8;;;;;;;14851:24;;;;;;;;;;;;;;;;;14025:858;;;;;;:::o;7131:169::-;-1:-1:-1;;;;;7212:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;7261:31;;;;;;;;;;;;;;;;;7131:169;;;:::o;7308:220::-;-1:-1:-1;;;;;7402:15:0;;;;;;:9;:15;;;;;;:26;;7422:5;7402:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;7384:15:0;;;;;;;:9;:15;;;;;;:44;;;;7455:13;;;;;;;:24;;7473:5;7455:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;7439:13:0;;;;;;;:9;:13;;;;;;;;;:40;;;;7495:25;;;;;;;7439:13;;7495:25;;;;;;;;;;;;;7308:220;;;:::o;14891:849::-;14964:10;14987:13;15019:7;;;;;;;;;-1:-1:-1;;;;;15019:7:0;-1:-1:-1;;;;;15003:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15003:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15003:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15003:32:0;15098:5;;-1:-1:-1;;;;;15054:19:0;;;;;;-1:-1:-1;15003:32:0;;-1:-1:-1;15098:5:0;15129:604;;15159:11;;15155:508;;15191:10;15204:41;15214:30;-1:-1:-1;;;;;15214:15:0;;;;:30;;;:19;:30;:::i;15204:41::-;15191:54;;15264:14;15281:17;15291:6;15281:9;:17::i;:::-;15264:34;;15329:9;15321:5;:17;15317:331;;;15363:14;15380:44;15422:1;15380:37;15396:20;:5;15406:9;15396:20;:9;:20;:::i;:::-;15380:11;;;:37;:15;:37;:::i;:44::-;15363:61;-1:-1:-1;15447:16:0;15466:34;15483:16;:9;15497:1;15483:16;:13;:16;:::i;:::-;15466:12;:5;15476:1;15466:12;:9;:12;:::i;:::-;:16;:34;:16;:34;:::i;:::-;15447:53;;15523:14;15552:11;15540:9;:23;;;;;;;-1:-1:-1;15590:13:0;;15586:42;;15605:23;15611:5;15618:9;15605:5;:23::i;:::-;15317:331;;;;15155:508;;;15129:604;;;15684:11;;15680:53;;15720:1;15712:5;:9;15680:53;14891:849;;;;;;:::o;9183:303::-;9228:6;9255:1;9251;:5;9247:232;;;-1:-1:-1;9277:1:0;9310;9306;9302:5;;:9;9326:92;9337:1;9333;:5;9326:92;;;9363:1;9359:5;;9401:1;9396;9392;9388;:5;;;;;;:9;9387:15;;;;;;9383:19;;9326:92;;;9247:232;;;;9439:6;;9435:44;;-1:-1:-1;9466:1:0;9435:44;9183:303;;;:::o;6705:201::-;6778:11;;:22;;6794:5;6778:22;:15;:22;:::i;:::-;6764:11;:36;;;-1:-1:-1;;;;;6827:13:0;;;;:9;:13;;;;;;:24;;6845:5;6827:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;6811:13:0;;;;;;:9;:13;;;;;;;;:40;;;;6867:31;;;;;;;6811:13;;;;6867:31;;;;;;;;;;6705:201;;:::o;8969:96::-;9021:6;9048:1;9044;:5;:13;;9056:1;9044:13;;;9052:1;9044:13;9040:17;8969:96;-1:-1:-1;;;8969:96:0:o;6914:209::-;-1:-1:-1;;;;;6993:15:0;;;;;;:9;:15;;;;;;:26;;7013:5;6993:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;6975:15:0;;;;;;:9;:15;;;;;:44;;;;7044:11;:22;;7060:5;7044:22;:15;:22;:::i;:::-;7030:11;:36;;;7082:33;;;;;;;;-1:-1:-1;;;;;7082:33:0;;;;;;;;;;;;;6914:209;;:::o;9834:120::-;-1:-1:-1;;;;;9910:10:0;-1:-1:-1;;;9910:17:0;;9834:120::o;10025:108::-;10085:9;-1:-1:-1;;;;;10115:10:0;;-1:-1:-1;;;;;10111:14:0;;10115:10;10111:14;;;;;;10025:108;-1:-1:-1;;;10025:108:0:o;4914:128::-;4998:5;;;4993:16;;;;4985:49;;;;;-1:-1:-1;;;4985:49:0;;;;;;;;;;;;-1:-1:-1;;;4985:49:0;;;;;;;;;;;;;

Swarm Source

bzzr://3e4cdfe4a2c857b347361b3b60b3595e9cdcb946c7e9d11407d818baebb98023
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.