Contract 0x61cca94e696981c2df97bc0e33e4a6583606732a

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x33339af5fcaae421a71faf5d1a88d2311b982728aadc71d6bb1ff8b449b598c4Approve110373702021-09-19 1:32:3915 hrs 56 mins ago0xcbf02736c5e54bea322993e63bf64ccb86b57a31 IN  CheeseSwap: KITTY-BNB0 BNB0.00022177
0x96484baa8348b96f6ddce4d728200c9547a1e4a2b27a217d8c095fec8f1969abApprove110283872021-09-18 18:02:4523 hrs 26 mins ago0x4df5eaadd09e55269f9a71c0573e5def19fae1d7 IN  CheeseSwap: KITTY-BNB0 BNB0.00022177
0x63f6e4d93909f6b04a141e4227f8b1721f0cc2545ff63508fbcd3f6835397a5eApprove109708652021-09-16 18:01:022 days 23 hrs ago0x708a46703ba7e49da6630faaf725da5210f38f40 IN  CheeseSwap: KITTY-BNB0 BNB0.00022177
0x9f47610d0c9ed095b4c6fd7c3b45e4781e9f0e1e1b880c543a888687fc5cceadApprove109140372021-09-14 18:29:414 days 22 hrs ago0xdba8431b4b33bb4a84d75a6c2c0a911fdd686b29 IN  CheeseSwap: KITTY-BNB0 BNB0.00022177
0x8aedb44315b0a7dfdba7405942bef4ecedae1a2472a63b0fa9c04299b6875f95Approve109131342021-09-14 17:44:094 days 23 hrs ago0x6ef6d8d00b5637053fd1b71aed6a2891ab158709 IN  CheeseSwap: KITTY-BNB0 BNB0.00022177
0xb663b631903aff4b9711afb435f039559e0557a679ae809ed9d317818c5164ccApprove108586702021-09-12 20:14:386 days 21 hrs ago0x3b3898326ed481b82ea40ed1ad5c96eebcb84131 IN  CheeseSwap: KITTY-BNB0 BNB0.00022177
0xaa63ba76e0ba6e97b5f9ff5f286143a816b9c9293de742775df56cfa9ae25ab9Approve107602382021-09-09 9:28:5510 days 8 hrs ago0xf50cb202cf85294f33082a8ecd2d61a222e8fd8e IN  CheeseSwap: KITTY-BNB0 BNB0.00022177
0x0c73dc69d286eae3537851036d7df72b0b28b28b800278fec1881d096331283cApprove105909212021-09-03 11:05:2716 days 6 hrs ago0x9e5cbe6256e0196d83b2b143da96c2cee981ce66 IN  CheeseSwap: KITTY-BNB0 BNB0.00022177
0x1c137e0ab841f95eab43fdbbe56b5083611eaa75e103a7122024290455b35164Approve105823382021-09-03 3:48:5916 days 13 hrs ago0x9ce7a146c0e397fe49ff67bd21d3bd7d1a824743 IN  CheeseSwap: KITTY-BNB0 BNB0.00022177
0x18ae5323d16c33d78a0dae3800a6d4b4e5f0d81f4f9dbc8ce5065ec72bdc476eApprove105787992021-09-03 0:48:2116 days 16 hrs ago0x601283e9b9834a51027e24e883ca57a71c50b8bb IN  CheeseSwap: KITTY-BNB0 BNB0.00022177
0x21bd9537373f523acbd63915a78f4c05d336429ad5874ebf286f843db9947dc5Approve105322902021-09-01 9:36:2318 days 7 hrs ago0x1429b3e075cbcc33bf82656632325323881cbc2f IN  CheeseSwap: KITTY-BNB0 BNB0.00022177
0x39e40c7e6b31d00efa0098ac5223a2787db6d66a0b72703ec8d82a240e4db629Approve104948352021-08-31 1:53:4819 days 15 hrs ago0x148e8ce4e1848d943afeca44f23d18a6a2c971bd IN  CheeseSwap: KITTY-BNB0 BNB0.000072425
0xb71d3d3f90d317e4b8bd2f696df53478992babe2d862785bdf172b289c6aa985Approve104839282021-08-30 16:39:0020 days 50 mins ago0x6d42dafc24a5f03fda13cc9433e819495c848394 IN  CheeseSwap: KITTY-BNB0 BNB0.00012385
0x85427aab0a56c06813de4f913da66f02057915ba91cd1fc299208092f9ad1067Approve104839022021-08-30 16:37:4220 days 51 mins ago0x6d42dafc24a5f03fda13cc9433e819495c848394 IN  CheeseSwap: KITTY-BNB0 BNB0.00012385
0x3aeae026d99f8f8ef54c41d7a696819ee1ecbe0538482ecfed084b52913e4449Approve104837892021-08-30 16:32:0320 days 57 mins ago0x6d42dafc24a5f03fda13cc9433e819495c848394 IN  CheeseSwap: KITTY-BNB0 BNB0.000072425
0x4802de61a7170179e63d4451cd17aad2f106e4be18b05e8325ff543586107888Approve104373662021-08-29 1:29:5721 days 15 hrs ago0x181742265cbebbbe87e00e99446f6d25980f7de0 IN  CheeseSwap: KITTY-BNB0 BNB0.000072425
0x862fc5bcc0c93763c76c0d4679b2f1dc0b3627baa0c6edb9b19da07bcb4158a6Approve104010192021-08-27 18:53:5222 days 22 hrs ago0x84aaedfdc9ad4db226a8c45f51eb006ff96b2aaa IN  CheeseSwap: KITTY-BNB0 BNB0.00022177
0x080b8c8d1cf0fa1e6b5832bb849f14d5751d2b55984a559ad2cbe8c58930a16fTransfer103694552021-08-26 15:40:2824 days 1 hr ago0x88149ba6d35e39ea3036ad52d2e39d0d88ec095c IN  CheeseSwap: KITTY-BNB0 BNB0.00010534
0x13e39c674c9e62e70a15968cd6e653db0b7ebeb23b19bc86fb58039d7de69cd3Approve103536242021-08-26 2:26:4024 days 15 hrs ago0xcee2448b9b26a5956466d0a2042cd507f2e6fc8c IN  CheeseSwap: KITTY-BNB0 BNB0.00022177
0x9c65475047614a972db657324d5767be0f1e9f4f87c80011046fc509a040a0aaApprove103415362021-08-25 16:18:2725 days 1 hr ago0xfcc794a3a2ebea16eac3ae51755226478b89db16 IN  CheeseSwap: KITTY-BNB0 BNB0.00022177
0x04d3963569e75a14044fc4b508c5d02a6b332ad8959af08248b4d545c935ea64Approve103348912021-08-25 10:45:4825 days 6 hrs ago0xfe7364a43f1fbe03f7bef8980a55e2ad3bfb147a IN  CheeseSwap: KITTY-BNB0 BNB0.00022177
0xa19019df71d8fc6861547fc1de6f3b0192b87d5acf10872a3f69db54ee7f09dfApprove103285962021-08-25 5:30:1025 days 11 hrs ago0x88149ba6d35e39ea3036ad52d2e39d0d88ec095c IN  CheeseSwap: KITTY-BNB0 BNB0.00022177
0x060736b9f3578f004d06ae223aabef37bacc2780e9cae88104905e4faa55ac15Approve103285222021-08-25 5:26:2825 days 12 hrs ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  CheeseSwap: KITTY-BNB0 BNB0.00022177
0xfe9c5342fa3fcef8eaaf00191e3159ddcde1a948d381eed1685382ef7b4552d3Approve103284362021-08-25 5:22:1025 days 12 hrs ago0x87cc958722247b987c0bcc2e398504fa40c50656 IN  CheeseSwap: KITTY-BNB0 BNB0.00022177
0xa7e31090fcb7d6f49a1df79e680cb324e427dcfd8dc141529e76977c5bf07d11Approve103264952021-08-25 3:45:0725 days 13 hrs ago0x2310cda416689030929495bbc244dab210b85ac7 IN  CheeseSwap: KITTY-BNB0 BNB0.00022177
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x131fef3bd2983ddd7e53eb9be404559b0972135434e78dbabdbcd29cf2fa4ff382144332021-06-11 21:05:4499 days 20 hrs ago CheeseSwap: Factory  Contract Creation0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xc8213bba1ad62283847f388d834b876994843b90

Contract Name:
CheeseSwapPair

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 BscScan.com on 2020-11-09
*/

// SPDX-License-Identifier: MIT


pragma solidity =0.5.16;

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

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

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

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

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


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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

interface ICheeseSwapERC20 {
    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;
}

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

contract CheeseSwapERC20 is ICheeseSwapERC20 {
    using SafeMath for uint;

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

// 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;
        }
    }
}

// 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);
    }
}

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);
}

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

contract CheeseSwapPair is ICheeseSwapPair, CheeseSwapERC20 {
    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

    uint private unlocked = 1;
    modifier lock() {
        require(unlocked == 1, 'CheeseSwap: 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))), 'CheeseSwap: 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, 'CheeseSwap: 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), 'CheeseSwap: 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 = ICheeseSwapFactory(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(3).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 = 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, 'CheeseSwap: 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, 'CheeseSwap: 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, 'CheeseSwap: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'CheeseSwap: 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, 'CheeseSwap: 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) ICheeseSwapCallee(to).cheeseswapCall(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, 'CheeseSwap: INSUFFICIENT_INPUT_AMOUNT');
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
        uint balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(2));
        uint balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(2));
        require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(1000**2), 'CheeseSwap: 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 Security Audit

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

60806040526001600c5534801561001557600080fd5b5060405146908060526123a08239604080519182900360520182208282018252600e83526d43686565736553776170204c507360901b6020938401528151808301835260018152603160f81b908401528151808401919091527f458b5fc8b30b49d2788ac023f71abeb89b3b1f6688e846b2fdb87c0da0d8a01b818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b03191633179055612297806101096000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610b01565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610b2b565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b55565b604080519115158252519081900360200190f35b610339610b6c565b604080516001600160a01b039092168252519081900360200190f35b61035d610b7b565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610b81565b61035d610c1b565b6103b5610c3f565b6040805160ff9092168252519081900360200190f35b61035d610c44565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c4a565b61035d610ccf565b61035d610cd5565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610cdb565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b0316610fdc565b61035d610fee565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316610ff4565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611006565b6040805192835260208301919091528051918290030190f35b6102446113ad565b61031d600480360360408110156104e857600080fd5b506001600160a01b0381351690602001356113d2565b61035d6113df565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b03166113e5565b610339611551565b610339611560565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c0013561156f565b61035d600480360360408110156105a357600080fd5b506001600160a01b0381358116916020013516611772565b61023a61178f565b600c5460011461060f576040805162461bcd60e51b815260206004820152601260248201527110da19595cd954ddd85c0e881313d0d2d15160721b604482015290519081900360640190fd5b6000600c55841515806106225750600084115b61065d5760405162461bcd60e51b81526004018080602001828103825260268152602001806121f66026913960400191505060405180910390fd5b600080610668610b2b565b5091509150816001600160701b03168710801561068d5750806001600160701b031686105b6106c85760405162461bcd60e51b815260040180806020018281038252602281526020018061221c6022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107065750806001600160a01b0316896001600160a01b031614155b610750576040805162461bcd60e51b8152602060048201526016602482015275436865657365537761703a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a1561076157610761828a8d6118f2565b891561077257610772818a8c6118f2565b861561082d57886001600160a01b03166358930f9c338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561081457600080fd5b505af1158015610828573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561087357600080fd5b505afa158015610887573d6000803e3d6000fd5b505050506040513d602081101561089d57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108e957600080fd5b505afa1580156108fd573d6000803e3d6000fd5b505050506040513d602081101561091357600080fd5b5051925060009150506001600160701b0385168a90038311610936576000610945565b89856001600160701b03160383035b9050600089856001600160701b0316038311610962576000610971565b89856001600160701b03160383035b905060008211806109825750600081115b6109bd5760405162461bcd60e51b815260040180806020018281038252602581526020018061223e6025913960400191505060405180910390fd5b60006109f16109d384600263ffffffff611a8c16565b6109e5876103e863ffffffff611a8c16565b9063ffffffff611aef16565b90506000610a096109d384600263ffffffff611a8c16565b9050610a3a620f4240610a2e6001600160701b038b8116908b1663ffffffff611a8c16565b9063ffffffff611a8c16565b610a4a838363ffffffff611a8c16565b1015610a8d576040805162461bcd60e51b815260206004820152600d60248201526c436865657365537761703a204b60981b604482015290519081900360640190fd5b5050610a9b84848888611b3f565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600e81526020016d43686565736553776170204c507360901b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b62338484611d05565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c06576001600160a01b0384166000908152600260209081526040808320338452909152902054610be1908363ffffffff611aef16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c11848484611d67565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610ca1576040805162461bcd60e51b815260206004820152601560248201527421b432b2b9b2a9bbb0b81d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610d29576040805162461bcd60e51b815260206004820152601260248201527110da19595cd954ddd85c0e881313d0d2d15160721b604482015290519081900360640190fd5b6000600c81905580610d39610b2b565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d8d57600080fd5b505afa158015610da1573d6000803e3d6000fd5b505050506040513d6020811015610db757600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e0a57600080fd5b505afa158015610e1e573d6000803e3d6000fd5b505050506040513d6020811015610e3457600080fd5b505190506000610e53836001600160701b03871663ffffffff611aef16565b90506000610e70836001600160701b03871663ffffffff611aef16565b90506000610e7e8787611e21565b60005490915080610ebb57610ea76103e86109e5610ea2878763ffffffff611a8c16565b611f7f565b9850610eb660006103e8611fd1565b610f0a565b610f076001600160701b038916610ed8868463ffffffff611a8c16565b81610edf57fe5b046001600160701b038916610efa868563ffffffff611a8c16565b81610f0157fe5b04612067565b98505b60008911610f495760405162461bcd60e51b81526004018080602001828103825260298152602001806121cd6029913960400191505060405180910390fd5b610f538a8a611fd1565b610f5f86868a8a611b3f565b8115610f8f57600854610f8b906001600160701b0380821691600160701b90041663ffffffff611a8c16565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c54600114611055576040805162461bcd60e51b815260206004820152601260248201527110da19595cd954ddd85c0e881313d0d2d15160721b604482015290519081900360640190fd5b6000600c81905580611065610b2b565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b1580156110c157600080fd5b505afa1580156110d5573d6000803e3d6000fd5b505050506040513d60208110156110eb57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561113957600080fd5b505afa15801561114d573d6000803e3d6000fd5b505050506040513d602081101561116357600080fd5b5051306000908152600160205260408120549192506111828888611e21565b60005490915080611199848763ffffffff611a8c16565b816111a057fe5b049a50806111b4848663ffffffff611a8c16565b816111bb57fe5b04995060008b1180156111ce575060008a115b6112095760405162461bcd60e51b81526004018080602001828103825260298152602001806121a46029913960400191505060405180910390fd5b611213308461207f565b61121e878d8d6118f2565b611229868d8c6118f2565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561126f57600080fd5b505afa158015611283573d6000803e3d6000fd5b505050506040513d602081101561129957600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b1580156112e557600080fd5b505afa1580156112f9573d6000803e3d6000fd5b505050506040513d602081101561130f57600080fd5b5051935061131f85858b8b611b3f565b811561134f5760085461134b906001600160701b0380821691600160701b90041663ffffffff611a8c16565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600981526020016804368656573652d4c560bc1b81525081565b6000610b62338484611d67565b6103e881565b600c54600114611431576040805162461bcd60e51b815260206004820152601260248201527110da19595cd954ddd85c0e881313d0d2d15160721b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b0394851694909316926114e092859287926114db926001600160701b03169185916370a0823191602480820192602092909190829003018186803b1580156114a357600080fd5b505afa1580156114b7573d6000803e3d6000fd5b505050506040513d60208110156114cd57600080fd5b50519063ffffffff611aef16565b6118f2565b600854604080516370a0823160e01b8152306004820152905161154792849287926114db92600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b1580156114a357600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b428410156115ba576040805162461bcd60e51b815260206004820152601360248201527210da19595cd954ddd85c0e8811561412549151606a1b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156116d5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061170b5750886001600160a01b0316816001600160a01b0316145b61175c576040805162461bcd60e51b815260206004820152601d60248201527f436865657365537761703a20494e56414c49445f5349474e4154555245000000604482015290519081900360640190fd5b611767898989611d05565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c546001146117db576040805162461bcd60e51b815260206004820152601260248201527110da19595cd954ddd85c0e881313d0d2d15160721b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b815230600482015290516118eb926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561182c57600080fd5b505afa158015611840573d6000803e3d6000fd5b505050506040513d602081101561185657600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156118a357600080fd5b505afa1580156118b7573d6000803e3d6000fd5b505050506040513d60208110156118cd57600080fd5b50516008546001600160701b0380821691600160701b900416611b3f565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b6020831061199f5780518252601f199092019160209182019101611980565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611a01576040519150601f19603f3d011682016040523d82523d6000602084013e611a06565b606091505b5091509150818015611a34575080511580611a345750808060200190516020811015611a3157600080fd5b50515b611a85576040805162461bcd60e51b815260206004820152601b60248201527f436865657365537761703a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611aa757505080820282828281611aa457fe5b04145b610b66576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b66576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611b5d57506001600160701b038311155b611ba5576040805162461bcd60e51b8152602060048201526014602482015273436865657365537761703a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611bd557506001600160701b03841615155b8015611be957506001600160701b03831615155b15611c5a578063ffffffff16611c1785611c028661211d565b6001600160e01b03169063ffffffff61212f16565b600980546001600160e01b03929092169290920201905563ffffffff8116611c4284611c028761211d565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611d90908263ffffffff611aef16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611dc5908263ffffffff61215416565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611e7257600080fd5b505afa158015611e86573d6000803e3d6000fd5b505050506040513d6020811015611e9c57600080fd5b5051600b546001600160a01b038216158015945091925090611f6b578015611f66576000611edf610ea26001600160701b0388811690881663ffffffff611a8c16565b90506000611eec83611f7f565b905080821115611f63576000611f1a611f0b848463ffffffff611aef16565b6000549063ffffffff611a8c16565b90506000611f3f83611f3386600363ffffffff611a8c16565b9063ffffffff61215416565b90506000818381611f4c57fe5b0490508015611f5f57611f5f8782611fd1565b5050505b50505b611f77565b8015611f77576000600b555b505092915050565b60006003821115611fc2575080600160028204015b81811015611fbc57809150600281828581611fab57fe5b040181611fb457fe5b049050611f94565b50611fcc565b8115611fcc575060015b919050565b600054611fe4908263ffffffff61215416565b60009081556001600160a01b03831681526001602052604090205461200f908263ffffffff61215416565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106120765781612078565b825b9392505050565b6001600160a01b0382166000908152600160205260409020546120a8908263ffffffff611aef16565b6001600160a01b038316600090815260016020526040812091909155546120d5908263ffffffff611aef16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161214c57fe5b049392505050565b80820182811015610b66576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe436865657365537761703a20494e53554646494349454e545f4c49515549444954595f4255524e4544436865657365537761703a20494e53554646494349454e545f4c49515549444954595f4d494e544544436865657365537761703a20494e53554646494349454e545f4f55545055545f414d4f554e54436865657365537761703a20494e53554646494349454e545f4c4951554944495459436865657365537761703a20494e53554646494349454e545f494e5055545f414d4f554e54a265627a7a723158207412320f4cb3b32872c7002da5362f60f725d28331630297c8630a1106d3e8a064736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429

Deployed ByteCode Sourcemap

10420:9704:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10420:9704:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17635:1896;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;17635:1896:0;;;;;;;;-1:-1:-1;;;;;17635:1896:0;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;17635:1896:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;17635:1896: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;17635:1896:0;;-1:-1:-1;17635:1896:0;-1:-1:-1;17635:1896:0;:::i;:::-;;4953:46;;;:::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;4953:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11445:231;;;:::i;:::-;;;;-1:-1:-1;;;;;11445:231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7007:147;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7007:147:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;10733:21;;;:::i;:::-;;;;-1:-1:-1;;;;;10733:21:0;;;;;;;;;;;;;;5098:24;;;:::i;:::-;;;;;;;;;;;;;;;;7309:301;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7309:301:0;;;;;;;;;;;;;;;;;:::i;5390:108::-;;;:::i;5056:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5247:31;;;:::i;12506:211::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12506:211:0;;;;;;;;;;:::i;11084:32::-;;;:::i;11123:::-;;;:::i;14703:1241::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14703:1241:0;-1:-1:-1;;;;;14703:1241:0;;:::i;5129:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5129:41:0;-1:-1:-1;;;;;5129:41:0;;:::i;11162:17::-;;;:::i;5505:38::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5505:38:0;-1:-1:-1;;;;;5505:38:0;;:::i;16056:1467::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16056:1467:0;-1:-1:-1;;;;;16056:1467:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5006:43;;;:::i;7162:139::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7162:139:0;;;;;;;;:::i;10554:46::-;;;:::i;19580:334::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19580:334:0;-1:-1:-1;;;;;19580:334:0;;:::i;10704:22::-;;;:::i;10761:21::-;;;:::i;7618:676::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;7618:676:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;5177:61::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5177:61:0;;;;;;;;;;:::i;19963:158::-;;;:::i;17635:1896::-;11335:8;;11347:1;11335:13;11327:44;;;;;-1:-1:-1;;;11327:44:0;;;;;;;;;;;;-1:-1:-1;;;11327:44:0;;;;;;;;;;;;;;;11393:1;11382:8;:12;17749:14;;;;:32;;;17780:1;17767:10;:14;17749:32;17741:83;;;;-1:-1:-1;;;17741:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17836:17;17855;17877:13;:11;:13::i;:::-;17835:55;;;;;17937:9;-1:-1:-1;;;;;17924:22:0;:10;:22;:48;;;;;17963:9;-1:-1:-1;;;;;17950:22:0;:10;:22;17924:48;17916:95;;;;-1:-1:-1;;;17916:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18156:6;;18191;;18024:13;;;;-1:-1:-1;;;;;18156:6:0;;;;18191;;;;18216:13;;;;;;;:30;;;18239:7;-1:-1:-1;;;;;18233:13:0;:2;-1:-1:-1;;;;;18233:13:0;;;18216:30;18208:65;;;;;-1:-1:-1;;;18208:65:0;;;;;;;;;;;;-1:-1:-1;;;18208:65:0;;;;;;;;;;;;;;;18288:14;;18284:58;;18304:38;18318:7;18327:2;18331:10;18304:13;:38::i;:::-;18391:14;;18387:58;;18407:38;18421:7;18430:2;18434:10;18407:13;:38::i;:::-;18494:15;;18490:99;;18529:2;-1:-1:-1;;;;;18511:36:0;;18548:10;18560;18572;18584:4;;18511:78;;;;;;;;;;;;;-1:-1:-1;;;;;18511:78:0;-1:-1:-1;;;;;18511:78: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;;18511:78:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18511:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18511:78:0;;;;18490:99;18611:40;;;-1:-1:-1;;;18611:40:0;;18645:4;18611:40;;;;;;-1:-1:-1;;;;;18611:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;18611:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18611:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18611:40:0;18673;;;-1:-1:-1;;;18673:40:0;;18707:4;18673:40;;;;;;18611;;-1:-1:-1;;;;;;18673:25:0;;;;;:40;;;;;18611;;18673;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;18673:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18673:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18673:40:0;;-1:-1:-1;18735:14:0;;-1:-1:-1;;;;;;;18763:22:0;;;;;18752:33;;:75;;18826:1;18752:75;;;18812:10;18800:9;-1:-1:-1;;;;;18800:22:0;;18788:8;:35;18752:75;18735:92;;18838:14;18878:10;18866:9;-1:-1:-1;;;;;18866:22:0;;18855:8;:33;:75;;18929:1;18855:75;;;18915:10;18903:9;-1:-1:-1;;;;;18903:22:0;;18891:8;:35;18855:75;18838:92;;18961:1;18949:9;:13;:30;;;;18978:1;18966:9;:13;18949:30;18941:80;;;;-1:-1:-1;;;18941:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19107:21;19131:40;19154:16;:9;19168:1;19154:16;:13;:16;:::i;:::-;19131:18;:8;19144:4;19131:18;:12;:18;:::i;:::-;:22;:40;:22;:40;:::i;:::-;19107:64;-1:-1:-1;19182:21:0;19206:40;19229:16;:9;19243:1;19229:16;:13;:16;:::i;19206:40::-;19182:64;-1:-1:-1;19307:43:0;19342:7;19307:30;-1:-1:-1;;;;;19307:15:0;;;;:30;;;:19;:30;:::i;:::-;:34;:43;:34;:43;:::i;:::-;19265:38;:16;19286;19265:38;:20;:38;:::i;:::-;:85;;19257:111;;;;;-1:-1:-1;;;19257:111:0;;;;;;;;;;;;-1:-1:-1;;;19257:111:0;;;;;;;;;;;;;;;11405:1;;19392:49;19400:8;19410;19420:9;19431;19392:7;:49::i;:::-;19457:66;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19457:66:0;;;19462:10;;19457:66;;;;;;;;;-1:-1:-1;;11428:1:0;11417:8;:12;-1:-1:-1;;;;;;;;;17635:1896:0:o;4953:46::-;;;;;;;;;;;;;;-1:-1:-1;;;4953:46:0;;;;:::o;11445:231::-;11578:8;;-1:-1:-1;;;;;11578:8:0;;;;-1:-1:-1;;;11609:8:0;;;;;;-1:-1:-1;;;11650:18:0;;;;;11445:231::o;7007:147::-;7071:4;7088:36;7097:10;7109:7;7118:5;7088:8;:36::i;:::-;-1:-1:-1;7142:4:0;7007:147;;;;;:::o;10733:21::-;;;-1:-1:-1;;;;;10733:21:0;;:::o;5098:24::-;;;;:::o;7309:301::-;-1:-1:-1;;;;;7408:15:0;;7387:4;7408:15;;;:9;:15;;;;;;;;7424:10;7408:27;;;;;;;;-1:-1:-1;;7408:39:0;7404:140;;-1:-1:-1;;;;;7494:15:0;;;;;;:9;:15;;;;;;;;7510:10;7494:27;;;;;;;;:38;;7526:5;7494:38;:31;:38;:::i;:::-;-1:-1:-1;;;;;7464:15:0;;;;;;:9;:15;;;;;;;;7480:10;7464:27;;;;;;;:68;7404:140;7554:26;7564:4;7570:2;7574:5;7554:9;:26::i;:::-;-1:-1:-1;7598:4:0;7309:301;;;;;:::o;5390:108::-;5432:66;5390:108;:::o;5056:35::-;5089:2;5056:35;:::o;5247:31::-;;;;:::o;12506:211::-;12602:7;;-1:-1:-1;;;;;12602:7:0;12588:10;:21;12580:55;;;;;-1:-1:-1;;;12580:55:0;;;;;;;;;;;;-1:-1:-1;;;12580:55:0;;;;;;;;;;;;;;;12666:6;:16;;-1:-1:-1;;;;;12666:16:0;;;-1:-1:-1;;;;;;12666:16:0;;;;;;;12693:6;:16;;;;;;;;;;;12506:211::o;11084:32::-;;;;:::o;11123:::-;;;;:::o;14703:1241::-;14752:14;11335:8;;11347:1;11335:13;11327:44;;;;;-1:-1:-1;;;11327:44:0;;;;;;;;;;;;-1:-1:-1;;;11327:44:0;;;;;;;;;;;;;;;11393:1;11382:8;:12;;;11393:1;14821:13;:11;:13::i;:::-;-1:-1:-1;14883:6:0;;14876:39;;;-1:-1:-1;;;14876:39:0;;14909:4;14876:39;;;;;;14779:55;;-1:-1:-1;14779:55:0;;-1:-1:-1;14860:13:0;;-1:-1:-1;;;;;14883:6:0;;;;14876:24;;:39;;;;;;;;;;;;;;14883:6;14876:39;;;5:2:-1;;;;30:1;27;20:12;5:2;14876:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14876:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14876:39:0;14949:6;;14942:39;;;-1:-1:-1;;;14942:39:0;;14975:4;14942:39;;;;;;14876;;-1:-1:-1;14926:13:0;;-1:-1:-1;;;;;14949:6:0;;;;14942:24;;:39;;;;;14876;;14942;;;;;;;;14949:6;14942:39;;;5:2:-1;;;;30:1;27;20:12;5:2;14942:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14942:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14942:39:0;;-1:-1:-1;14992:12:0;15007:23;:8;-1:-1:-1;;;;;15007:23:0;;;:12;:23;:::i;:::-;14992:38;-1:-1:-1;15041:12:0;15056:23;:8;-1:-1:-1;;;;;15056:23:0;;;:12;:23;:::i;:::-;15041:38;;15092:10;15105:30;15114:9;15125;15105:8;:30::i;:::-;15146:17;15166:11;15092:43;;-1:-1:-1;15270:17:0;15266:352;;15316:54;10595:5;15316:31;15326:20;:7;15338;15326:20;:11;:20;:::i;:::-;15316:9;:31::i;:54::-;15304:66;;15384:36;15398:1;10595:5;15384;:36::i;:::-;15266:352;;;15520:86;-1:-1:-1;;;;;15529:37:0;;:25;:7;15541:12;15529:25;:11;:25;:::i;:::-;:37;;;;;;-1:-1:-1;;;;;15568:37:0;;:25;:7;15580:12;15568:25;:11;:25;:::i;:::-;:37;;;;;;15520:8;:86::i;:::-;15508:98;;15266:352;15648:1;15636:9;:13;15628:67;;;;-1:-1:-1;;;15628:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15706:20;15712:2;15716:9;15706:5;:20::i;:::-;15739:49;15747:8;15757;15767:9;15778;15739:7;:49::i;:::-;15803:5;15799:47;;;15837:8;;15818:28;;-1:-1:-1;;;;;15823:8:0;;;;-1:-1:-1;;;15837:8:0;;;15818:28;:18;:28;:::i;:::-;15810:5;:36;15799:47;15902:34;;;;;;;;;;;;;;15907:10;;15902:34;;;;;;;;-1:-1:-1;;11428:1:0;11417:8;:12;-1:-1:-1;14703:1241:0;;;-1:-1:-1;;;;;;14703:1241:0:o;5129:41::-;;;;;;;;;;;;;:::o;11162:17::-;;;;:::o;5505:38::-;;;;;;;;;;;;;:::o;16056:1467::-;16105:12;16119;11335:8;;11347:1;11335:13;11327:44;;;;;-1:-1:-1;;;11327:44:0;;;;;;;;;;;;-1:-1:-1;;;11327:44:0;;;;;;;;;;;;;;;11393:1;11382:8;:12;;;11393:1;16186:13;:11;:13::i;:::-;-1:-1:-1;16243:6:0;;16324;;16403:40;;;-1:-1:-1;;;16403:40:0;;16437:4;16403:40;;;;;;16144:55;;-1:-1:-1;16144:55:0;;-1:-1:-1;;;;;;16243:6:0;;;;16324;;;16225:15;;16243:6;;16403:25;;:40;;;;;;;;;;;;;;16243:6;16403:40;;;5:2:-1;;;;30:1;27;20:12;5:2;16403:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16403:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16403:40:0;16470;;;-1:-1:-1;;;16470:40:0;;16504:4;16470:40;;;;;;16403;;-1:-1:-1;16454:13:0;;-1:-1:-1;;;;;16470:25:0;;;;;:40;;;;;16403;;16470;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;16470:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16470:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16470:40:0;16556:4;16521:14;16538:24;;;:9;16470:40;16538:24;;;;;16470:40;;-1:-1:-1;16588:30:0;16597:9;16608;16588:8;:30::i;:::-;16629:17;16649:11;16575:43;;-1:-1:-1;16649:11:0;16759:23;:9;16773:8;16759:23;:13;:23;:::i;:::-;:38;;;;;;;-1:-1:-1;16892:12:0;16866:23;:9;16880:8;16866:23;:13;:23;:::i;:::-;:38;;;;;;16856:48;;16981:1;16971:7;:11;:26;;;;;16996:1;16986:7;:11;16971:26;16963:80;;;;-1:-1:-1;;;16963:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17054:31;17068:4;17075:9;17054:5;:31::i;:::-;17096:35;17110:7;17119:2;17123:7;17096:13;:35::i;:::-;17142;17156:7;17165:2;17169:7;17142:13;:35::i;:::-;17199:40;;;-1:-1:-1;;;17199:40:0;;17233:4;17199:40;;;;;;-1:-1:-1;;;;;17199:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;17199:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17199:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17199:40:0;17261;;;-1:-1:-1;;;17261:40:0;;17295:4;17261:40;;;;;;17199;;-1:-1:-1;;;;;;17261:25:0;;;;;:40;;;;;17199;;17261;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;17261:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17261:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17261:40:0;;-1:-1:-1;17314:49:0;17322:8;17261:40;17342:9;17353;17314:7;:49::i;:::-;17378:5;17374:47;;;17412:8;;17393:28;;-1:-1:-1;;;;;17398:8:0;;;;-1:-1:-1;;;17412:8:0;;;17393:28;:18;:28;:::i;:::-;17385:5;:36;17374:47;17477:38;;;;;;;;;;;;;;-1:-1:-1;;;;;17477:38:0;;;17482:10;;17477:38;;;;;;;;;;;11405:1;;;;;;;;;11428;11417:8;:12;;;;16056:1467;;;:::o;5006:43::-;;;;;;;;;;;;;;-1:-1:-1;;;5006:43:0;;;;:::o;7162:139::-;7222:4;7239:32;7249:10;7261:2;7265:5;7239:9;:32::i;10554:46::-;10595:5;10554:46;:::o;19580:334::-;11335:8;;11347:1;11335:13;11327:44;;;;;-1:-1:-1;;;11327:44:0;;;;;;;;;;;;-1:-1:-1;;;11327:44:0;;;;;;;;;;;;;;;11393:1;11382:8;:12;19649:6;;19699;;19803:8;;19758:40;;;-1:-1:-1;;;19758:40:0;;19792:4;19758:40;;;;;;-1:-1:-1;;;;;19649:6:0;;;;19699;;;;19731:82;;19649:6;;19754:2;;19758:54;;-1:-1:-1;;;;;19803:8:0;;19649:6;;19758:25;;:40;;;;;;;;;;;;;;;19649:6;19758:40;;;5:2:-1;;;;30:1;27;20:12;5:2;19758:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19758:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19758:40:0;;:54;:44;:54;:::i;:::-;19731:13;:82::i;:::-;19896:8;;19851:40;;;-1:-1:-1;;;19851:40:0;;19885:4;19851:40;;;;;;19824:82;;19838:7;;19847:2;;19851:54;;-1:-1:-1;;;19896:8:0;;-1:-1:-1;;;;;19896:8:0;;-1:-1:-1;;;;;19851:25:0;;;;;:40;;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;19824:82:0;-1:-1:-1;;11428:1:0;11417:8;:12;-1:-1:-1;19580:334:0:o;10704:22::-;;;-1:-1:-1;;;;;10704:22:0;;:::o;10761:21::-;;;-1:-1:-1;;;;;10761:21:0;;:::o;7618:676::-;7764:15;7752:8;:27;;7744:59;;;;;-1:-1:-1;;;7744:59:0;;;;;;;;;;;;-1:-1:-1;;;7744:59:0;;;;;;;;;;;;;;;7919:16;;-1:-1:-1;;;;;8015:13:0;;;7814:14;8015:13;;;:6;:13;;;;;;;;:15;;;;;;;;;7964:77;;5432:66;7964:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;7964:77:0;;;;;7954:88;;;;;;-1:-1:-1;;;7855:202:0;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;7855:202:0;;;;;;7831:237;;;;;;;;;8106:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7814:14;;8015:15;8106:26;;;;;-1:-1:-1;;8106:26:0;;;;;;;;;;8015:15;8106:26;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;8106:26:0;;-1:-1:-1;;8106:26:0;;;-1:-1:-1;;;;;;;8151:30:0;;;;;;:59;;;8205:5;-1:-1:-1;;;;;8185:25:0;:16;-1:-1:-1;;;;;8185:25:0;;8151:59;8143:101;;;;;-1:-1:-1;;;8143:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8255:31;8264:5;8271:7;8280:5;8255:8;:31::i;:::-;7618:676;;;;;;;;;:::o;5177:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;19963:158::-;11335:8;;11347:1;11335:13;11327:44;;;;;-1:-1:-1;;;11327:44:0;;;;;;;;;;;;-1:-1:-1;;;11327:44:0;;;;;;;;;;;;;;;11393:1;11382:8;:12;20019:6;;20012:39;;;-1:-1:-1;;;20012:39:0;;20045:4;20012:39;;;;;;20004:109;;-1:-1:-1;;;;;20019:6:0;;20012:24;;:39;;;;;;;;;;;;;;20019:6;20012:39;;;5:2:-1;;;;30:1;27;20:12;5:2;20012:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20012:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20012:39:0;20060:6;;20053:39;;;-1:-1:-1;;;20053:39:0;;20086:4;20053:39;;;;;;-1:-1:-1;;;;;20060:6:0;;;;20053:24;;:39;;;;;20012;;20053;;;;;;;;20060:6;20053:39;;;5:2:-1;;;;30:1;27;20:12;5:2;20053:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20053:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20053:39:0;20094:8;;-1:-1:-1;;;;;20094:8:0;;;;-1:-1:-1;;;20104:8:0;;;20004:7;:109::i;:::-;11428:1;11417:8;:12;19963:158::o;11684:288::-;10659:34;;;;;;;;;;;;;;;;;11812:43;;-1:-1:-1;;;;;11812:43:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11812:43:0;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;11801:55:0;;;;11766:12;;11780:17;;11801:10;;;11812:43;11801:55;;;25:18:-1;11801: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;;;11801: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;;11765:91:0;;;;11875:7;:57;;;;-1:-1:-1;11887:11:0;;:16;;:44;;;11918:4;11907:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11907:24:0;11887:44;11867:97;;;;;-1:-1:-1;;;11867:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11684:288;;;;;:::o;4720:142::-;4772:6;4799;;;:30;;-1:-1:-1;;4814:5:0;;;4828:1;4823;4814:5;4823:1;4809:15;;;;;:20;4799:30;4791:63;;;;;-1:-1:-1;;;4791:63:0;;;;;;;;;;;;-1:-1:-1;;;4791:63:0;;;;;;;;;;;;;;4583:129;4667:5;;;4662:16;;;;4654:50;;;;;-1:-1:-1;;;4654:50:0;;;;;;;;;;;;-1:-1:-1;;;4654:50:0;;;;;;;;;;;;;;12802:861;-1:-1:-1;;;;;12914:23:0;;;;;:50;;-1:-1:-1;;;;;;12941:23:0;;;12914:50;12906:83;;;;;-1:-1:-1;;;12906:83:0;;;;;;;;;;;;-1:-1:-1;;;12906:83:0;;;;;;;;;;;;;;;13104:18;;13031:23;:15;:23;;;-1:-1:-1;;;13104:18:0;;;;13087:35;;;13160:15;;;;;;:33;;-1:-1:-1;;;;;;13179:14:0;;;;13160:33;:51;;;;-1:-1:-1;;;;;;13197:14:0;;;;13160:51;13156:336;;;13366:11;13313:64;;13318:44;13352:9;13318:27;13335:9;13318:16;:27::i;:::-;-1:-1:-1;;;;;13318:33:0;;:44;:33;:44;:::i;:::-;13289:20;:88;;-1:-1:-1;;;;;13313:50:0;;;;:64;;;;13289:88;;;13416:64;;;13421:44;13455:9;13421:27;13438:9;13421:16;:27::i;:44::-;13392:20;:88;;-1:-1:-1;;;;;13416:50:0;;;;:64;;;;13392:88;;;13156:336;13502:8;:28;;-1:-1:-1;;13502:28:0;-1:-1:-1;;;;;13502:28:0;;;;;;;-1:-1:-1;;;;13541:28:0;-1:-1:-1;;;13541:28:0;;;;;;;;;-1:-1:-1;;;;;13580:35:0;-1:-1:-1;;;13580:35:0;;;;;;;;;13631:24;;;13636:8;;;13631:24;;13646:8;;;;;;;13631:24;;;;;;;;;;;;;;;;;12802:861;;;;;;:::o;6602:169::-;-1:-1:-1;;;;;6683:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;6732:31;;;;;;;;;;;;;;;;;6602:169;;;:::o;6779:220::-;-1:-1:-1;;;;;6873:15:0;;;;;;:9;:15;;;;;;:26;;6893:5;6873:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;6855:15:0;;;;;;;:9;:15;;;;;;:44;;;;6926:13;;;;;;;:24;;6944:5;6926:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;6910:13:0;;;;;;;:9;:13;;;;;;;;;:40;;;;6966:25;;;;;;;6910:13;;6966:25;;;;;;;;;;;;;6779:220;;;:::o;13753:838::-;13826:10;13849:13;13884:7;;;;;;;;;-1:-1:-1;;;;;13884:7:0;-1:-1:-1;;;;;13865:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13865:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13865:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13865:35:0;13963:5;;-1:-1:-1;;;;;13919:19:0;;;;;;-1:-1:-1;13865:35:0;;-1:-1:-1;13963:5:0;13994:590;;14024:11;;14020:494;;14056:10;14069:41;14079:30;-1:-1:-1;;;;;14079:15:0;;;;:30;;;:19;:30;:::i;14069:41::-;14056:54;;14129:14;14146:17;14156:6;14146:9;:17::i;:::-;14129:34;;14194:9;14186:5;:17;14182:317;;;14228:14;14245:37;14261:20;:5;14271:9;14261:20;:9;:20;:::i;:::-;14245:11;;;:37;:15;:37;:::i;:::-;14228:54;-1:-1:-1;14305:16:0;14324:27;14341:9;14324:12;:5;14334:1;14324:12;:9;:12;:::i;:::-;:16;:27;:16;:27;:::i;:::-;14305:46;;14374:14;14403:11;14391:9;:23;;;;;;;-1:-1:-1;14441:13:0;;14437:42;;14456:23;14462:5;14469:9;14456:5;:23::i;:::-;14182:317;;;;14020:494;;;13994:590;;;14535:11;;14531:53;;14571:1;14563:5;:9;14531:53;13753:838;;;;;;:::o;8588:303::-;8633:6;8660:1;8656;:5;8652:232;;;-1:-1:-1;8682:1:0;8715;8711;8707:5;;:9;8731:92;8742:1;8738;:5;8731:92;;;8768:1;8764:5;;8806:1;8801;8797;8793;:5;;;;;;:9;8792:15;;;;;;8788:19;;8731:92;;;8652:232;;;;8844:6;;8840:44;;-1:-1:-1;8871:1:0;8840:44;8588:303;;;:::o;6176:201::-;6249:11;;:22;;6265:5;6249:22;:15;:22;:::i;:::-;6235:11;:36;;;-1:-1:-1;;;;;6298:13:0;;;;:9;:13;;;;;;:24;;6316:5;6298:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;6282:13:0;;;;;;:9;:13;;;;;;;;:40;;;;6338:31;;;;;;;6282:13;;;;6338:31;;;;;;;;;;6176:201;;:::o;8374:96::-;8426:6;8453:1;8449;:5;:13;;8461:1;8449:13;;;8457:1;8449:13;8445:17;8374:96;-1:-1:-1;;;8374:96:0:o;6385:209::-;-1:-1:-1;;;;;6464:15:0;;;;;;:9;:15;;;;;;:26;;6484:5;6464:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;6446:15:0;;;;;;:9;:15;;;;;:44;;;;6515:11;:22;;6531:5;6515:22;:15;:22;:::i;:::-;6501:11;:36;;;6553:33;;;;;;;;-1:-1:-1;;;;;6553:33:0;;;;;;;;;;;;;6385:209;;:::o;9160:120::-;-1:-1:-1;;;;;9236:10:0;-1:-1:-1;;;9236:17:0;;9160:120::o;9351:108::-;9411:9;-1:-1:-1;;;;;9441:10:0;;-1:-1:-1;;;;;9437:14:0;;9441:10;9437:14;;;;;;9351:108;-1:-1:-1;;;9351:108:0:o;4447:128::-;4531:5;;;4526:16;;;;4518:49;;;;;-1:-1:-1;;;4518:49:0;;;;;;;;;;;;-1:-1:-1;;;4518:49:0;;;;;;;;;;;;;

Swarm Source

bzzr://7412320f4cb3b32872c7002da5362f60f725d28331630297c8630a1106d3e8a0
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.