Contract 0x9f4da89774570e27170873befd139a79cb1a3da2

 
Txn Hash
Block
From
To
Value [Txn Fee]
0xe7475b790a516dc6080c4ca771c88bdfc0e0e9131fe02085ca2c80624ee54b7e67704682021-04-21 22:33:251 hr 37 mins ago0x82cebeaf634e481abe029263171376dec67355fd IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022123
0x0a7d784fd594fa7d0188a6a8f3f26f58a16b0e904d028204a810cedd17d3c3c067675782021-04-21 20:02:574 hrs 7 mins ago0xe1a9352db783970edfd1af3a54f27b78b5ade26e IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022123
0x6678b993efb0b29334d31d1df3274ca1e62e7207182cc24818dfb6181de8329f67648122021-04-21 17:44:146 hrs 26 mins ago0xc95e8327a02f71da574454edd44d9c010b674eba IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022123
0xc95855485744e9aebf157ea372054ba3b72f44b17fe546ad8505a24eb135c88b67648032021-04-21 17:43:476 hrs 26 mins ago0x046e91ab93058827024c8f2c9d493323b404dc6d IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022123
0xa79c580c372751bcaeaff8721a6756dcfc008136f420c5190d16bd537be3b13667645932021-04-21 17:32:546 hrs 37 mins ago0x05ceffd4104ebc52638778968733d4fec8808060 IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022177
0x02c0ac87dcda6e070be4aa4b413fddc62f1a628ca026144f6ca7a6dcd97c638367616332021-04-21 14:47:029 hrs 23 mins ago0xd825aaa50c88364d3bba46762716f5ad6f846a4c IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022123
0x26b800506965e0466d98c4497eb5e878e6304a7148348a3a4edb719560d4744867596482021-04-21 12:53:4511 hrs 16 mins ago0x2ad953200ae7c3e5e38945df6ab9b787abf589dd IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00044354
0x6bc30b05cbfbdb76ed98561fcf4876e9a958348749c997b0df2aabd99206176f67581752021-04-21 11:35:3212 hrs 34 mins ago0x40940b036ed98a35ded3ebb8d4d4b637dc4c90ff IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022177
0x93598b6c23b97306b4b8acdadba75ca438e9952ac8fff120831ad49301ff5c6167581272021-04-21 11:33:0812 hrs 37 mins ago0xa0a223ffc95773ff72e9c5fdb64d5b23a11cbd46 IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022177
0xd56512a58a20da54ec25b98fc5b1ac3e6df05dc46dab557381e297671320009567579822021-04-21 11:25:5312 hrs 44 mins ago0x47c8af9dab24ea48283360e92cd96caa56009812 IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022123
0x8382c33bfd0fc97b794c7bb5bf9edcdb9d06f293d0efc72b10cacb16baeba00467573652021-04-21 10:55:0213 hrs 15 mins ago0x53dc9eb501676396b9db47998c1bffd5cf0900f2 IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022177
0x1dc7cea82b0afdb8757e79cbd257138e29a0905f8311e007cbb8700cf0642bcb67567342021-04-21 10:23:2913 hrs 46 mins ago0x344ca16e75c4e62499ca574b057e58568c2a0c7c IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022177
0xf56683331b95c0d780fad6bd9b15df931576883de8f8d5da36209dff1b93771c67566282021-04-21 10:18:1113 hrs 52 mins ago0xb49681e63a3daa8df40856409db571824d0fa5bd IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022177
0x2ae0a301781f02642e053909f4e683f32d78de897bade284494b60b883ebfb5b67550412021-04-21 8:54:4215 hrs 15 mins ago0xa227a96e484534a65be9071ebdd3248c6945e143 IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022123
0x2429e5d7ea782d5dcece2fe17a7996464f98d43be70ca511e498e9c9f96275bf67537692021-04-21 7:51:0116 hrs 19 mins ago0x0e201d16dac8263ea83986564ad2df52029b85e0 IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022123
0xe074d15d17875e8a8bab4c3a6feefbfcd4267b626444a524ce8fc2cbb197cfbc67532422021-04-21 7:24:3616 hrs 45 mins ago0x3e1c7ee5450b079241ca4c18f2a793be2870e356 IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022123
0x3edbd8c0b899d9c84fa0be4de7297b4f9ade323b5021caecf2d9e7108c2ee1c767515372021-04-21 5:59:2018 hrs 11 mins ago0xf5281a193fed7231d85e93bcace3b28a6d56af19 IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022177
0x43cd1ede6c3ca11750209a89329852aac074523f45e9b1be8becfd317a9a3bfa67510412021-04-21 5:34:3218 hrs 35 mins ago0x4977cd18ee38b4d8fce9a8d38b812301cb0c3d87 IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022177
0x66ee5110899656c9147ee1785bdf793c0314ac86022d9b2329ea2aaac79a74cf67505282021-04-21 5:08:5319 hrs 1 min ago0x3c9c65bb53eb9a3e06708c79441a0449ec01c51d IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022123
0x310022d4746e807533ad96dfb27ace2527607a319fcbab89e99e6fabc5fde6f367504462021-04-21 5:04:4719 hrs 5 mins ago0xbc47b95dea10eab43aada37ee9116d4fe157137b IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022177
0x185d8ac6b65e76967b382c6d5bccd9ef1a1bbd6d9146672b668d2f54c96c7c1567502732021-04-21 4:56:0819 hrs 14 mins ago0x1337c6d035a50814260b94b434f7c4a07d7ff915 IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022177
0xb19602201ccfc9d9d96b5ffc69224b21d386e63e52d4a9db8210865980bc23e767501862021-04-21 4:51:4719 hrs 18 mins ago0x3bda337979052c4842ff01b02728469a79b85409 IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022123
0x080cd9350dac98ac8b265c6f4e68d706c6a365224b65a6aece74740012d4ff6567493772021-04-21 4:11:2019 hrs 59 mins ago0x1e545fdcbce820e46f5abf5971919180b8a53a1d IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022177
0x80be22e64793f43a444428ab0bd0e99034dd59115f95d25ce47a20c1fdb9145567493402021-04-21 4:09:2920 hrs ago0xb92ac3fe58dcf01301027a1b535c02e55fc8d50e IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022123
0x90e88008d507c52cca9fe24fa4ee2358a70effc06e9a4391ed09e97b27b7633167483692021-04-21 3:20:3420 hrs 49 mins ago0xc4ac5c948803bdd12889ed2c67d8db2e6bd042b8 IN  0x9f4da89774570e27170873befd139a79cb1a3da20 BNB0.00022177
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0xbb16b7d2108c68b6147f6d4caf57d90458f430e8cede10b38e2b787edb2ddcdf63760832021-04-08 3:13:0913 days 20 hrs ago 0x3cd1c46068daea5ebb0d3f55f6915b10648062b8  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 0x09cb618bf5ef305fadfd2c8fc0c26eecf8c6d5fd

Contract Name:
MdexPair

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 2021-04-06
*/

// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0 <0.8.0;

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

    function FEE_RATE_DENOMINATOR() external view returns (uint256);

    function feeRateNumerator() external view returns (uint256);

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function feeToRate() external view returns (uint256);

    function initCodeHash() external view returns (bytes32);

    function pairFeeToRate(address) external view returns (uint256);

    function pairFees(address) external view returns (uint256);

    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 addPair(address) external returns (bool);

    function delPair(address) external returns (bool);

    function getSupportListLength() external view returns (uint256);

    function isSupportPair(address pair) external view returns (bool);

    function getSupportPair(uint256 index) external view returns (address);

    function setFeeRateNumerator(uint256) external;

    function setPairFees(address pair, uint256 fee) external;

    function setDefaultFeeToRate(uint256) external;

    function setPairFeeToRate(address pair, uint256 rate) external;

    function getPairFees(address) external view returns (uint256);

    function getPairRate(address) external view returns (uint256);

    function sortTokens(address tokenA, address tokenB) external pure returns (address token0, address token1);

    function pairFor(address tokenA, address tokenB) external view returns (address pair);

    function getReserves(address tokenA, address tokenB) external view returns (uint256 reserveA, uint256 reserveB);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);
}

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

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 IswapV2Callee {
    function swapV2Call(address sender, uint amount0, uint amount1, bytes calldata data) external;
}

library SafeMath {
    uint256 constant WAD = 10 ** 18;
    uint256 constant RAY = 10 ** 27;

    function wad() public pure returns (uint256) {
        return WAD;
    }

    function ray() public pure returns (uint256) {
        return RAY;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a <= b ? a : b;
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    function sqrt(uint256 a) internal pure returns (uint256 b) {
        if (a > 3) {
            b = a;
            uint256 x = a / 2 + 1;
            while (x < b) {
                b = x;
                x = (a / x + x) / 2;
            }
        } else if (a != 0) {
            b = 1;
        }
    }

    function wmul(uint256 a, uint256 b) internal pure returns (uint256) {
        return mul(a, b) / WAD;
    }

    function wmulRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, b), WAD / 2) / WAD;
    }

    function rmul(uint256 a, uint256 b) internal pure returns (uint256) {
        return mul(a, b) / RAY;
    }

    function rmulRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, b), RAY / 2) / RAY;
    }

    function wdiv(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(mul(a, WAD), b);
    }

    function wdivRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, WAD), b / 2) / b;
    }

    function rdiv(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(mul(a, RAY), b);
    }

    function rdivRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, RAY), b / 2) / b;
    }

    function wpow(uint256 x, uint256 n) internal pure returns (uint256) {
        uint256 result = WAD;
        while (n > 0) {
            if (n % 2 != 0) {
                result = wmul(result, x);
            }
            x = wmul(x, x);
            n /= 2;
        }
        return result;
    }

    function rpow(uint256 x, uint256 n) internal pure returns (uint256) {
        uint256 result = RAY;
        while (n > 0) {
            if (n % 2 != 0) {
                result = rmul(result, x);
            }
            x = rmul(x, x);
            n /= 2;
        }
        return result;
    }
}

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

contract MdexERC20 is IMdexERC20 {
    using SafeMath for uint;

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

contract MdexPair is IMdexPair, MdexERC20 {
    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, 'MdexSwap: 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))), 'MdexSwap: 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, 'MdexSwap: 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), 'MdexSwap: 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 = IMdexFactory(factory).feeTo();
        feeOn = feeTo != address(0) && IMdexFactory(factory).getPairRate(address(this)) != 9;
        uint _kLast = kLast;
        // gas savings
        if (feeOn) {
            if (_kLast != 0) {
                uint rootK = SafeMath.sqrt(uint(_reserve0).mul(_reserve1));
                uint rootKLast = SafeMath.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint numerator = totalSupply.mul(rootK.sub(rootKLast));
                    uint denominator = rootK.mul(IMdexFactory(factory).getPairRate(address(this))).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 = SafeMath.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);
            _mint(address(0), MINIMUM_LIQUIDITY);
            // permanently lock the first MINIMUM_LIQUIDITY tokens
        } else {
            liquidity = SafeMath.min(amount0.mul(_totalSupply) / _reserve0, amount1.mul(_totalSupply) / _reserve1);
        }
        require(liquidity > 0, 'MdexSwap: 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, 'MdexSwap: 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, 'MdexSwap: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves();
        // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'MdexSwap: 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, 'MdexSwap: 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) IswapV2Callee(to).swapV2Call(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, 'MdexSwap: INSUFFICIENT_INPUT_AMOUNT');
        {// scope for reserve{0,1}Adjusted, avoids stack too deep errors
            uint balance0Adjusted = balance0.mul(1e4).sub(amount0In.mul(IMdexFactory(factory).getPairFees(address(this))));
            uint balance1Adjusted = balance1.mul(1e4).sub(amount1In.mul(IMdexFactory(factory).getPairFees(address(this))));
            require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(1e8), 'MdexSwap: 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":"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"}]

60806040526001600c5534801561001557600080fd5b5060405146908060526125de8239604080519182900360520182208282018252600d83526c26a222ac102628102a37b5b2b760991b6020938401528151808301835260018152603160f81b908401528151808401919091527fb85ad0ab12fc9666beeb4154f24feab6f58ff8137a3f14500ba8ae1d38e72118818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b031916331790556124d6806101086000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610bcc565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610bf5565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610c1f565b604080519115158252519081900360200190f35b610339610c36565b604080516001600160a01b039092168252519081900360200190f35b61035d610c45565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610c4b565b61035d610ce5565b6103b5610d09565b6040805160ff9092168252519081900360200190f35b61035d610d0e565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610d14565b61035d610d97565b61035d610d9d565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610da3565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b03166110a2565b61035d6110b4565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b03166110ba565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b03166110cc565b6040805192835260208301919091528051918290030190f35b610244611471565b61031d600480360360408110156104e857600080fd5b506001600160a01b038135169060200135611494565b61035d6114a1565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b03166114a7565b610339611611565b610339611620565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c0013561162f565b61035d600480360360408110156105a357600080fd5b506001600160a01b0381358116916020013516611830565b61023a61184d565b600c5460011461060d576040805162461bcd60e51b815260206004820152601060248201526f1359195e14ddd85c0e881313d0d2d15160821b604482015290519081900360640190fd5b6000600c55841515806106205750600084115b61065b5760405162461bcd60e51b81526004018080602001828103825260248152602001806124136024913960400191505060405180910390fd5b600080610666610bf5565b5091509150816001600160701b03168710801561068b5750806001600160701b031686105b6106dc576040805162461bcd60e51b815260206004820181905260248201527f4d646578537761703a20494e53554646494349454e545f4c4951554944495459604482015290519081900360640190fd5b60065460075460009182916001600160a01b0391821691908116908916821480159061071a5750806001600160a01b0316896001600160a01b031614155b610762576040805162461bcd60e51b81526020600482015260146024820152734d646578537761703a20494e56414c49445f544f60601b604482015290519081900360640190fd5b8a1561077357610773828a8d6119ae565b891561078457610784818a8c6119ae565b861561083f57886001600160a01b031663b2ff9f26338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561082657600080fd5b505af115801561083a573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561088557600080fd5b505afa158015610899573d6000803e3d6000fd5b505050506040513d60208110156108af57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108fb57600080fd5b505afa15801561090f573d6000803e3d6000fd5b505050506040513d602081101561092557600080fd5b5051925060009150506001600160701b0385168a90038311610948576000610957565b89856001600160701b03160383035b9050600089856001600160701b0316038311610974576000610983565b89856001600160701b03160383035b905060008211806109945750600081115b6109cf5760405162461bcd60e51b81526004018080602001828103825260238152602001806124586023913960400191505060405180910390fd5b60055460408051634c2fc06f60e01b81523060048201529051600092610a7c92610a5e926001600160a01b0390921691634c2fc06f91602480820192602092909190829003018186803b158015610a2557600080fd5b505afa158015610a39573d6000803e3d6000fd5b505050506040513d6020811015610a4f57600080fd5b5051859063ffffffff611b4816565b610a708761271063ffffffff611b4816565b9063ffffffff611ba816565b60055460408051634c2fc06f60e01b81523060048201529051929350600092610ad592610a5e926001600160a01b0390911691634c2fc06f91602480820192602092909190829003018186803b158015610a2557600080fd5b9050610b076305f5e100610afb6001600160701b038b8116908b1663ffffffff611b4816565b9063ffffffff611b4816565b610b17838363ffffffff611b4816565b1015610b58576040805162461bcd60e51b815260206004820152600b60248201526a4d646578537761703a204b60a81b604482015290519081900360640190fd5b5050610b6684848888611bea565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600d81526020016c26a222ac102628102a37b5b2b760991b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610c2c338484611dae565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610cd0576001600160a01b0384166000908152600260209081526040808320338452909152902054610cab908363ffffffff611ba816565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610cdb848484611e10565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d69576040805162461bcd60e51b815260206004820152601360248201527226b232bc29bbb0b81d102327a92124a22222a760691b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610def576040805162461bcd60e51b815260206004820152601060248201526f1359195e14ddd85c0e881313d0d2d15160821b604482015290519081900360640190fd5b6000600c81905580610dff610bf5565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e5357600080fd5b505afa158015610e67573d6000803e3d6000fd5b505050506040513d6020811015610e7d57600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610ed057600080fd5b505afa158015610ee4573d6000803e3d6000fd5b505050506040513d6020811015610efa57600080fd5b505190506000610f19836001600160701b03871663ffffffff611ba816565b90506000610f36836001600160701b03871663ffffffff611ba816565b90506000610f448787611eca565b60005490915080610f8157610f6d6103e8610a70610f68878763ffffffff611b4816565b612126565b9850610f7c60006103e8612178565b610fd0565b610fcd6001600160701b038916610f9e868463ffffffff611b4816565b81610fa557fe5b046001600160701b038916610fc0868563ffffffff611b4816565b81610fc757fe5b0461220e565b98505b6000891161100f5760405162461bcd60e51b815260040180806020018281038252602781526020018061247b6027913960400191505060405180910390fd5b6110198a8a612178565b61102586868a8a611bea565b811561105557600854611051906001600160701b0380821691600160701b90041663ffffffff611b4816565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c54600114611119576040805162461bcd60e51b815260206004820152601060248201526f1359195e14ddd85c0e881313d0d2d15160821b604482015290519081900360640190fd5b6000600c81905580611129610bf5565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561118557600080fd5b505afa158015611199573d6000803e3d6000fd5b505050506040513d60208110156111af57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111fd57600080fd5b505afa158015611211573d6000803e3d6000fd5b505050506040513d602081101561122757600080fd5b5051306000908152600160205260408120549192506112468888611eca565b6000549091508061125d848763ffffffff611b4816565b8161126457fe5b049a5080611278848663ffffffff611b4816565b8161127f57fe5b04995060008b118015611292575060008a115b6112cd5760405162461bcd60e51b81526004018080602001828103825260278152602001806123ec6027913960400191505060405180910390fd5b6112d73084612225565b6112e2878d8d6119ae565b6112ed868d8c6119ae565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561133357600080fd5b505afa158015611347573d6000803e3d6000fd5b505050506040513d602081101561135d57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b1580156113a957600080fd5b505afa1580156113bd573d6000803e3d6000fd5b505050506040513d60208110156113d357600080fd5b505193506113e385858b8b611bea565b81156114135760085461140f906001600160701b0380821691600160701b90041663ffffffff611b4816565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600781526020016604d444558204c560cc1b81525081565b6000610c2c338484611e10565b6103e881565b600c546001146114f1576040805162461bcd60e51b815260206004820152601060248201526f1359195e14ddd85c0e881313d0d2d15160821b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b0394851694909316926115a0928592879261159b926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561156357600080fd5b505afa158015611577573d6000803e3d6000fd5b505050506040513d602081101561158d57600080fd5b50519063ffffffff611ba816565b6119ae565b600854604080516370a0823160e01b81523060048201529051611607928492879261159b92600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561156357600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611678576040805162461bcd60e51b81526020600482015260116024820152701359195e14ddd85c0e8811561412549151607a1b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611793573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117c95750886001600160a01b0316816001600160a01b0316145b61181a576040805162461bcd60e51b815260206004820152601b60248201527f4d646578537761703a20494e56414c49445f5349474e41545552450000000000604482015290519081900360640190fd5b611825898989611dae565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611897576040805162461bcd60e51b815260206004820152601060248201526f1359195e14ddd85c0e881313d0d2d15160821b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b815230600482015290516119a7926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156118e857600080fd5b505afa1580156118fc573d6000803e3d6000fd5b505050506040513d602081101561191257600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561195f57600080fd5b505afa158015611973573d6000803e3d6000fd5b505050506040513d602081101561198957600080fd5b50516008546001600160701b0380821691600160701b900416611bea565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611a5b5780518252601f199092019160209182019101611a3c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611abd576040519150601f19603f3d011682016040523d82523d6000602084013e611ac2565b606091505b5091509150818015611af0575080511580611af05750808060200190516020811015611aed57600080fd5b50515b611b41576040805162461bcd60e51b815260206004820152601960248201527f4d646578537761703a205452414e534645525f4641494c454400000000000000604482015290519081900360640190fd5b5050505050565b600082611b5757506000610c30565b82820282848281611b6457fe5b0414611ba15760405162461bcd60e51b81526004018080602001828103825260218152602001806124376021913960400191505060405180910390fd5b9392505050565b6000611ba183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506122c3565b6001600160701b038411801590611c0857506001600160701b038311155b611c4e576040805162461bcd60e51b81526020600482015260126024820152714d646578537761703a204f564552464c4f5760701b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611c7e57506001600160701b03841615155b8015611c9257506001600160701b03831615155b15611d03578063ffffffff16611cc085611cab8661235a565b6001600160e01b03169063ffffffff61236c16565b600980546001600160e01b03929092169290920201905563ffffffff8116611ceb84611cab8761235a565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611e39908263ffffffff611ba816565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611e6e908263ffffffff61239116565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611f1b57600080fd5b505afa158015611f2f573d6000803e3d6000fd5b505050506040513d6020811015611f4557600080fd5b505190506001600160a01b03811615801590611fd85750600554604080516335d0ea0b60e11b815230600482015290516001600160a01b0390921691636ba1d41691602480820192602092909190829003018186803b158015611fa757600080fd5b505afa158015611fbb573d6000803e3d6000fd5b505050506040513d6020811015611fd157600080fd5b5051600914155b600b54909250821561211257801561210d57600061200b610f686001600160701b0388811690881663ffffffff611b4816565b9050600061201883612126565b90508082111561210a576000612046612037848463ffffffff611ba816565b6000549063ffffffff611b4816565b600554604080516335d0ea0b60e11b815230600482015290519293506000926120e69286926120da926001600160a01b0390921691636ba1d41691602480820192602092909190829003018186803b1580156120a157600080fd5b505afa1580156120b5573d6000803e3d6000fd5b505050506040513d60208110156120cb57600080fd5b5051879063ffffffff611b4816565b9063ffffffff61239116565b905060008183816120f357fe5b0490508015612106576121068782612178565b5050505b50505b61211e565b801561211e576000600b555b505092915050565b60006003821115612169575080600160028204015b818110156121635780915060028182858161215257fe5b04018161215b57fe5b04905061213b565b50612173565b8115612173575060015b919050565b60005461218b908263ffffffff61239116565b60009081556001600160a01b0383168152600160205260409020546121b6908263ffffffff61239116565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183111561221e5781611ba1565b5090919050565b6001600160a01b03821660009081526001602052604090205461224e908263ffffffff611ba816565b6001600160a01b0383166000908152600160205260408120919091555461227b908263ffffffff611ba816565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b600081848411156123525760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156123175781810151838201526020016122ff565b50505050905090810190601f1680156123445780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161238957fe5b049392505050565b600082820183811015611ba1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fdfe4d646578537761703a20494e53554646494349454e545f4c49515549444954595f4255524e45444d646578537761703a20494e53554646494349454e545f4f55545055545f414d4f554e54536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774d646578537761703a20494e53554646494349454e545f494e5055545f414d4f554e544d646578537761703a20494e53554646494349454e545f4c49515549444954595f4d494e544544a265627a7a7231582046c07a569a6b1459249f351af48901239e20429187f1402f7470459510c63def64736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429

Deployed ByteCode Sourcemap

15582:10030:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15582:10030:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22956:2043;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;22956:2043:0;;;;;;;;-1:-1:-1;;;;;22956:2043:0;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;22956:2043:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;22956:2043: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;22956:2043:0;;-1:-1:-1;22956:2043:0;-1:-1:-1;22956:2043:0;:::i;:::-;;12240:45;;;:::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;12240:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16589:231;;;:::i;:::-;;;;-1:-1:-1;;;;;16589:231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14291:147;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14291:147:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;15879:21;;;:::i;:::-;;;;-1:-1:-1;;;;;15879:21:0;;;;;;;;;;;;;;12382:24;;;:::i;:::-;;;;;;;;;;;;;;;;14593:302;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14593:302:0;;;;;;;;;;;;;;;;;:::i;12674:108::-;;;:::i;12340:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12531:31;;;:::i;17648:218::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;17648:218:0;;;;;;;;;;:::i;16230:32::-;;;:::i;16269:::-;;;:::i;19978:1288::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19978:1288:0;-1:-1:-1;;;;;19978:1288:0;;:::i;12413:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12413:41:0;-1:-1:-1;;;;;12413:41:0;;:::i;16308:17::-;;;:::i;12789:38::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12789:38:0;-1:-1:-1;;;;;12789:38:0;;:::i;21378:1466::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21378:1466:0;-1:-1:-1;;;;;21378:1466:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12292:41;;;:::i;14446:139::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14446:139:0;;;;;;;;:::i;15698:48::-;;;:::i;25048:352::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25048:352:0;-1:-1:-1;;;;;25048:352:0;;:::i;15850:22::-;;;:::i;15907:21::-;;;:::i;14903:672::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;14903:672:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12461:61::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12461:61:0;;;;;;;;;;:::i;25449:158::-;;;:::i;22956:2043::-;16481:8;;16493:1;16481:13;16473:42;;;;;-1:-1:-1;;;16473:42:0;;;;;;;;;;;;-1:-1:-1;;;16473:42:0;;;;;;;;;;;;;;;16537:1;16526:8;:12;23070:14;;;;:32;;;23101:1;23088:10;:14;23070:32;23062:81;;;;-1:-1:-1;;;23062:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23155:17;23174;23196:13;:11;:13::i;:::-;23154:55;;;;;23265:9;-1:-1:-1;;;;;23252:22:0;:10;:22;:48;;;;;23291:9;-1:-1:-1;;;;;23278:22:0;:10;:22;23252:48;23244:93;;;;;-1:-1:-1;;;23244:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23485:6;;23524;;23350:13;;;;-1:-1:-1;;;;;23485:6:0;;;;23524;;;;23553:13;;;;;;;:30;;;23576:7;-1:-1:-1;;;;;23570:13:0;:2;-1:-1:-1;;;;;23570:13:0;;;23553:30;23545:63;;;;;-1:-1:-1;;;23545:63:0;;;;;;;;;;;;-1:-1:-1;;;23545:63:0;;;;;;;;;;;;;;;23627:14;;23623:58;;23643:38;23657:7;23666:2;23670:10;23643:13;:38::i;:::-;23747:14;;23743:58;;23763:38;23777:7;23786:2;23790:10;23763:13;:38::i;:::-;23867:15;;23863:91;;23898:2;-1:-1:-1;;;;;23884:28:0;;23913:10;23925;23937;23949:4;;23884:70;;;;;;;;;;;;;-1:-1:-1;;;;;23884:70:0;-1:-1:-1;;;;;23884:70: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;;23884:70:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23884:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23884:70:0;;;;23863:91;23980:40;;;-1:-1:-1;;;23980:40:0;;24014:4;23980:40;;;;;;-1:-1:-1;;;;;23980:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;23980:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23980:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23980:40:0;24046;;;-1:-1:-1;;;24046:40:0;;24080:4;24046:40;;;;;;23980;;-1:-1:-1;;;;;;24046:25:0;;;;;:40;;;;;23980;;24046;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;24046:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24046:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24046:40:0;;-1:-1:-1;24108:14:0;;-1:-1:-1;;;;;;;24136:22:0;;;;;24125:33;;:75;;24199:1;24125:75;;;24185:10;24173:9;-1:-1:-1;;;;;24173:22:0;;24161:8;:35;24125:75;24108:92;;24211:14;24251:10;24239:9;-1:-1:-1;;;;;24239:22:0;;24228:8;:33;:75;;24302:1;24228:75;;;24288:10;24276:9;-1:-1:-1;;;;;24276:22:0;;24264:8;:35;24228:75;24211:92;;24334:1;24322:9;:13;:30;;;;24351:1;24339:9;:13;24322:30;24314:78;;;;-1:-1:-1;;;24314:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24554:7;;24541:48;;;-1:-1:-1;;;24541:48:0;;24583:4;24541:48;;;;;;24481:21;;24505:86;;24527:63;;-1:-1:-1;;;;;24554:7:0;;;;24541:33;;:48;;;;;;;;;;;;;;;24554:7;24541:48;;;5:2:-1;;;;30:1;27;20:12;5:2;24541:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24541:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24541:48:0;24527:9;;:63;:13;:63;:::i;:::-;24505:17;:8;24518:3;24505:17;:12;:17;:::i;:::-;:21;:86;:21;:86;:::i;:::-;24679:7;;24666:48;;;-1:-1:-1;;;24666:48:0;;24708:4;24666:48;;;;;;24481:110;;-1:-1:-1;24606:21:0;;24630:86;;24652:63;;-1:-1:-1;;;;;24679:7:0;;;;24666:33;;:48;;;;;;;;;;;;;;;24679:7;24666:48;;;5:2:-1;;;;30:1;27;20:12;24630:86:0;24606:110;-1:-1:-1;24781:39:0;24816:3;24781:30;-1:-1:-1;;;;;24781:15:0;;;;:30;;;:19;:30;:::i;:::-;:34;:39;:34;:39;:::i;:::-;24739:38;:16;24760;24739:38;:20;:38;:::i;:::-;:81;;24731:105;;;;;-1:-1:-1;;;24731:105:0;;;;;;;;;;;;-1:-1:-1;;;24731:105:0;;;;;;;;;;;;;;;16549:1;;24860:49;24868:8;24878;24888:9;24899;24860:7;:49::i;:::-;24925:66;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24925:66:0;;;24930:10;;24925:66;;;;;;;;;-1:-1:-1;;16572:1:0;16561:8;:12;-1:-1:-1;;;;;;;;;22956:2043:0:o;12240:45::-;;;;;;;;;;;;;;-1:-1:-1;;;12240:45:0;;;;:::o;16589:231::-;16722:8;;-1:-1:-1;;;;;16722:8:0;;;;-1:-1:-1;;;16753:8:0;;;;;;-1:-1:-1;;;16794:18:0;;;;;16589:231::o;14291:147::-;14355:4;14372:36;14381:10;14393:7;14402:5;14372:8;:36::i;:::-;-1:-1:-1;14426:4:0;14291:147;;;;;:::o;15879:21::-;;;-1:-1:-1;;;;;15879:21:0;;:::o;12382:24::-;;;;:::o;14593:302::-;-1:-1:-1;;;;;14692:15:0;;14671:4;14692:15;;;:9;:15;;;;;;;;14708:10;14692:27;;;;;;;;-1:-1:-1;;14692:40:0;14688:141;;-1:-1:-1;;;;;14779:15:0;;;;;;:9;:15;;;;;;;;14795:10;14779:27;;;;;;;;:38;;14811:5;14779:38;:31;:38;:::i;:::-;-1:-1:-1;;;;;14749:15:0;;;;;;:9;:15;;;;;;;;14765:10;14749:27;;;;;;;:68;14688:141;14839:26;14849:4;14855:2;14859:5;14839:9;:26::i;:::-;-1:-1:-1;14883:4:0;14593:302;;;;;:::o;12674:108::-;12716:66;12674:108;:::o;12340:35::-;12373:2;12340:35;:::o;12531:31::-;;;;:::o;17648:218::-;17744:7;;-1:-1:-1;;;;;17744:7:0;17730:10;:21;17722:53;;;;;-1:-1:-1;;;17722:53:0;;;;;;;;;;;;-1:-1:-1;;;17722:53:0;;;;;;;;;;;;;;;17815:6;:16;;-1:-1:-1;;;;;17815:16:0;;;-1:-1:-1;;;;;;17815:16:0;;;;;;;17842:6;:16;;;;;;;;;;;17648:218::o;16230:32::-;;;;:::o;16269:::-;;;;:::o;19978:1288::-;20027:14;16481:8;;16493:1;16481:13;16473:42;;;;;-1:-1:-1;;;16473:42:0;;;;;;;;;;;;-1:-1:-1;;;16473:42:0;;;;;;;;;;;;;;;16537:1;16526:8;:12;;;16537:1;20096:13;:11;:13::i;:::-;-1:-1:-1;20167:6:0;;20160:39;;;-1:-1:-1;;;20160:39:0;;20193:4;20160:39;;;;;;20054:55;;-1:-1:-1;20054:55:0;;-1:-1:-1;20144:13:0;;-1:-1:-1;;;;;20167:6:0;;;;20160:24;;:39;;;;;;;;;;;;;;20167:6;20160:39;;;5:2:-1;;;;30:1;27;20:12;5:2;20160:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20160:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20160:39:0;20233:6;;20226:39;;;-1:-1:-1;;;20226:39:0;;20259:4;20226:39;;;;;;20160;;-1:-1:-1;20210:13:0;;-1:-1:-1;;;;;20233:6:0;;;;20226:24;;:39;;;;;20160;;20226;;;;;;;;20233:6;20226:39;;;5:2:-1;;;;30:1;27;20:12;5:2;20226:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20226:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20226:39:0;;-1:-1:-1;20276:12:0;20291:23;:8;-1:-1:-1;;;;;20291:23:0;;;:12;:23;:::i;:::-;20276:38;-1:-1:-1;20325:12:0;20340:23;:8;-1:-1:-1;;;;;20340:23:0;;;:12;:23;:::i;:::-;20325:38;;20376:10;20389:30;20398:9;20409;20389:8;:30::i;:::-;20430:17;20450:11;20376:43;;-1:-1:-1;20563:17:0;20559:374;;20609:58;15739:7;20609:35;20623:20;:7;20635;20623:20;:11;:20;:::i;:::-;20609:13;:35::i;:58::-;20597:70;;20682:36;20696:1;15739:7;20682:5;:36::i;:::-;20559:374;;;20831:90;-1:-1:-1;;;;;20844:37:0;;:25;:7;20856:12;20844:25;:11;:25;:::i;:::-;:37;;;;;;-1:-1:-1;;;;;20883:37:0;;:25;:7;20895:12;20883:25;:11;:25;:::i;:::-;:37;;;;;;20831:12;:90::i;:::-;20819:102;;20559:374;20963:1;20951:9;:13;20943:65;;;;-1:-1:-1;;;20943:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21019:20;21025:2;21029:9;21019:5;:20::i;:::-;21052:49;21060:8;21070;21080:9;21091;21052:7;:49::i;:::-;21116:5;21112:47;;;21150:8;;21131:28;;-1:-1:-1;;;;;21136:8:0;;;;-1:-1:-1;;;21150:8:0;;;21131:28;:18;:28;:::i;:::-;21123:5;:36;21112:47;21224:34;;;;;;;;;;;;;;21229:10;;21224:34;;;;;;;;-1:-1:-1;;16572:1:0;16561:8;:12;-1:-1:-1;19978:1288:0;;;-1:-1:-1;;;;;;19978:1288:0:o;12413:41::-;;;;;;;;;;;;;:::o;16308:17::-;;;;:::o;12789:38::-;;;;;;;;;;;;;:::o;21378:1466::-;21427:12;21441;16481:8;;16493:1;16481:13;16473:42;;;;;-1:-1:-1;;;16473:42:0;;;;;;;;;;;;-1:-1:-1;;;16473:42:0;;;;;;;;;;;;;;;16537:1;16526:8;:12;;;16537:1;21508:13;:11;:13::i;:::-;-1:-1:-1;21574:6:0;;21633;;21690:40;;;-1:-1:-1;;;21690:40:0;;21724:4;21690:40;;;;;;21466:55;;-1:-1:-1;21466:55:0;;-1:-1:-1;;;;;;21574:6:0;;;;21633;;;21556:15;;21574:6;;21690:25;;:40;;;;;;;;;;;;;;21574:6;21690:40;;;5:2:-1;;;;30:1;27;20:12;5:2;21690:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21690:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21690:40:0;21757;;;-1:-1:-1;;;21757:40:0;;21791:4;21757:40;;;;;;21690;;-1:-1:-1;21741:13:0;;-1:-1:-1;;;;;21757:25:0;;;;;:40;;;;;21690;;21757;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;21757:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21757:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21757:40:0;21843:4;21808:14;21825:24;;;:9;21757:40;21825:24;;;;;21757:40;;-1:-1:-1;21875:30:0;21884:9;21895;21875:8;:30::i;:::-;21916:17;21936:11;21862:43;;-1:-1:-1;21936:11:0;22055:23;:9;22069:8;22055:23;:13;:23;:::i;:::-;:38;;;;;;;-1:-1:-1;22197:12:0;22171:23;:9;22185:8;22171:23;:13;:23;:::i;:::-;:38;;;;;;22161:48;;22295:1;22285:7;:11;:26;;;;;22310:1;22300:7;:11;22285:26;22277:78;;;;-1:-1:-1;;;22277:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22366:31;22380:4;22387:9;22366:5;:31::i;:::-;22408:35;22422:7;22431:2;22435:7;22408:13;:35::i;:::-;22454;22468:7;22477:2;22481:7;22454:13;:35::i;:::-;22511:40;;;-1:-1:-1;;;22511:40:0;;22545:4;22511:40;;;;;;-1:-1:-1;;;;;22511:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;22511:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22511:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22511:40:0;22573;;;-1:-1:-1;;;22573:40:0;;22607:4;22573:40;;;;;;22511;;-1:-1:-1;;;;;;22573:25:0;;;;;:40;;;;;22511;;22573;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;22573:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22573:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22573:40:0;;-1:-1:-1;22626:49:0;22634:8;22573:40;22654:9;22665;22626:7;:49::i;:::-;22690:5;22686:47;;;22724:8;;22705:28;;-1:-1:-1;;;;;22710:8:0;;;;-1:-1:-1;;;22724:8:0;;;22705:28;:18;:28;:::i;:::-;22697:5;:36;22686:47;22798:38;;;;;;;;;;;;;;-1:-1:-1;;;;;22798:38:0;;;22803:10;;22798:38;;;;;;;;;;;16549:1;;;;;;;;;16572;16561:8;:12;;;;21378:1466;;;:::o;12292:41::-;;;;;;;;;;;;;;-1:-1:-1;;;12292:41:0;;;;:::o;14446:139::-;14506:4;14523:32;14533:10;14545:2;14549:5;14523:9;:32::i;15698:48::-;15739:7;15698:48;:::o;25048:352::-;16481:8;;16493:1;16481:13;16473:42;;;;;-1:-1:-1;;;16473:42:0;;;;;;;;;;;;-1:-1:-1;;;16473:42:0;;;;;;;;;;;;;;;16537:1;16526:8;:12;25117:6;;25176;;25289:8;;25244:40;;;-1:-1:-1;;;25244:40:0;;25278:4;25244:40;;;;;;-1:-1:-1;;;;;25117:6:0;;;;25176;;;;25217:82;;25117:6;;25240:2;;25244:54;;-1:-1:-1;;;;;25289:8:0;;25117:6;;25244:25;;:40;;;;;;;;;;;;;;;25117:6;25244:40;;;5:2:-1;;;;30:1;27;20:12;5:2;25244:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25244:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25244:40:0;;:54;:44;:54;:::i;:::-;25217:13;:82::i;:::-;25382:8;;25337:40;;;-1:-1:-1;;;25337:40:0;;25371:4;25337:40;;;;;;25310:82;;25324:7;;25333:2;;25337:54;;-1:-1:-1;;;25382:8:0;;-1:-1:-1;;;;;25382:8:0;;-1:-1:-1;;;;;25337:25:0;;;;;:40;;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;25310:82:0;-1:-1:-1;;16572:1:0;16561:8;:12;-1:-1:-1;25048:352:0:o;15850:22::-;;;-1:-1:-1;;;;;15850:22:0;;:::o;15907:21::-;;;-1:-1:-1;;;;;15907:21:0;;:::o;14903:672::-;15049:15;15037:8;:27;;15029:57;;;;;-1:-1:-1;;;15029:57:0;;;;;;;;;;;;-1:-1:-1;;;15029:57:0;;;;;;;;;;;;;;;15202:16;;-1:-1:-1;;;;;15298:13:0;;;15097:14;15298:13;;;:6;:13;;;;;;;;:15;;;;;;;;;15247:77;;12716:66;15247:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15247:77:0;;;;;15237:88;;;;;;-1:-1:-1;;;15138:202:0;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15138:202:0;;;;;;15114:237;;;;;;;;;15389:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15097:14;;15298:15;15389:26;;;;;-1:-1:-1;;15389:26:0;;;;;;;;;;15298:15;15389:26;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;15389:26:0;;-1:-1:-1;;15389:26:0;;;-1:-1:-1;;;;;;;15434:30:0;;;;;;:59;;;15488:5;-1:-1:-1;;;;;15468:25:0;:16;-1:-1:-1;;;;;15468:25:0;;15434:59;15426:99;;;;;-1:-1:-1;;;15426:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15536:31;15545:5;15552:7;15561:5;15536:8;:31::i;:::-;14903:672;;;;;;;;;:::o;12461:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;25449:158::-;16481:8;;16493:1;16481:13;16473:42;;;;;-1:-1:-1;;;16473:42:0;;;;;;;;;;;;-1:-1:-1;;;16473:42:0;;;;;;;;;;;;;;;16537:1;16526:8;:12;25505:6;;25498:39;;;-1:-1:-1;;;25498:39:0;;25531:4;25498:39;;;;;;25490:109;;-1:-1:-1;;;;;25505:6:0;;25498:24;;:39;;;;;;;;;;;;;;25505:6;25498:39;;;5:2:-1;;;;30:1;27;20:12;5:2;25498:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25498:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25498:39:0;25546:6;;25539:39;;;-1:-1:-1;;;25539:39:0;;25572:4;25539:39;;;;;;-1:-1:-1;;;;;25546:6:0;;;;25539:24;;:39;;;;;25498;;25539;;;;;;;;25546:6;25539:39;;;5:2:-1;;;;30:1;27;20:12;5:2;25539:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25539:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25539:39:0;25580:8;;-1:-1:-1;;;;;25580:8:0;;;;-1:-1:-1;;;25590:8:0;;;25490:7;:109::i;:::-;16572:1;16561:8;:12;25449:158::o;16828:286::-;15805:34;;;;;;;;;;;;;;;;;16956:43;;-1:-1:-1;;;;;16956:43:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;16956:43:0;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;16945:55:0;;;;16910:12;;16924:17;;16945:10;;;16956:43;16945:55;;;25:18:-1;16945: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;;;16945: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;;16909:91:0;;;;17019:7;:57;;;;-1:-1:-1;17031:11:0;;:16;;:44;;;17062:4;17051:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17051:24:0;17031:44;17011:95;;;;;-1:-1:-1;;;17011:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16828:286;;;;;:::o;8270:471::-;8328:7;8573:6;8569:47;;-1:-1:-1;8603:1:0;8596:8;;8569:47;8640:5;;;8644:1;8640;:5;:1;8664:5;;;;;:10;8656:56;;;;-1:-1:-1;;;8656:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8732:1;8270:471;-1:-1:-1;;;8270:471:0:o;7926:136::-;7984:7;8011:43;8015:1;8018;8011:43;;;;;;;;;;;;;;;;;:3;:43::i;17951:872::-;-1:-1:-1;;;;;18063:24:0;;;;;:52;;-1:-1:-1;;;;;;18091:24:0;;;18063:52;18055:83;;;;;-1:-1:-1;;;18055:83:0;;;;;;;;;;;;-1:-1:-1;;;18055:83:0;;;;;;;;;;;;;;;18255:18;;18180:25;:15;:25;;;-1:-1:-1;;;18255:18:0;;;;18238:35;;;18320:15;;;;;;:33;;-1:-1:-1;;;;;;18339:14:0;;;;18320:33;:51;;;;-1:-1:-1;;;;;;18357:14:0;;;;18320:51;18316:336;;;18526:11;18473:64;;18478:44;18512:9;18478:27;18495:9;18478:16;:27::i;:::-;-1:-1:-1;;;;;18478:33:0;;:44;:33;:44;:::i;:::-;18449:20;:88;;-1:-1:-1;;;;;18473:50:0;;;;:64;;;;18449:88;;;18576:64;;;18581:44;18615:9;18581:27;18598:9;18581:16;:27::i;:44::-;18552:20;:88;;-1:-1:-1;;;;;18576:50:0;;;;:64;;;;18552:88;;;18316:336;18662:8;:28;;-1:-1:-1;;18662:28:0;-1:-1:-1;;;;;18662:28:0;;;;;;;-1:-1:-1;;;;18701:28:0;-1:-1:-1;;;18701:28:0;;;;;;;;;-1:-1:-1;;;;;18740:35:0;-1:-1:-1;;;18740:35:0;;;;;;;;;18791:24;;;18796:8;;;18791:24;;18806:8;;;;;;;18791:24;;;;;;;;;;;;;;;;;17951:872;;;;;;:::o;13886:169::-;-1:-1:-1;;;;;13967:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;14016:31;;;;;;;;;;;;;;;;;13886:169;;;:::o;14063:220::-;-1:-1:-1;;;;;14157:15:0;;;;;;:9;:15;;;;;;:26;;14177:5;14157:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;14139:15:0;;;;;;;:9;:15;;;;;;:44;;;;14210:13;;;;;;;:24;;14228:5;14210:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;14194:13:0;;;;;;;:9;:13;;;;;;;;;:40;;;;14250:25;;;;;;;14194:13;;14250:25;;;;;;;;;;;;;14063:220;;;:::o;18913:953::-;18986:10;19009:13;19038:7;;;;;;;;;-1:-1:-1;;;;;19038:7:0;-1:-1:-1;;;;;19025:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19025:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19025:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19025:29:0;;-1:-1:-1;;;;;;19073:19:0;;;;;;:76;;-1:-1:-1;19109:7:0;;19096:48;;;-1:-1:-1;;;19096:48:0;;19138:4;19096:48;;;;;;-1:-1:-1;;;;;19109:7:0;;;;19096:33;;:48;;;;;;;;;;;;;;;19109:7;19096:48;;;5:2:-1;;;;30:1;27;20:12;5:2;19096:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19096:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19096:48:0;19148:1;19096:53;;19073:76;19174:5;;19065:84;;-1:-1:-1;19214:645:0;;;;19244:11;;19240:549;;19276:10;19289:45;19303:30;-1:-1:-1;;;;;19303:15:0;;;;:30;;;:19;:30;:::i;19289:45::-;19276:58;;19353:14;19370:21;19384:6;19370:13;:21::i;:::-;19353:38;;19422:9;19414:5;:17;19410:364;;;19456:14;19473:37;19489:20;:5;19499:9;19489:20;:9;:20;:::i;:::-;19473:11;;;:37;:15;:37;:::i;:::-;19575:7;;19562:48;;;-1:-1:-1;;;19562:48:0;;19604:4;19562:48;;;;;;19456:54;;-1:-1:-1;19533:16:0;;19552:74;;19616:9;;19552:59;;-1:-1:-1;;;;;19575:7:0;;;;19562:33;;:48;;;;;;;;;;;;;;;19575:7;19562:48;;;5:2:-1;;;;30:1;27;20:12;5:2;19562:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19562:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19562:48:0;19552:5;;:59;:9;:59;:::i;:::-;:63;:74;:63;:74;:::i;:::-;19533:93;;19649:14;19678:11;19666:9;:23;;;;;;;-1:-1:-1;19716:13:0;;19712:42;;19731:23;19737:5;19744:9;19731:5;:23::i;:::-;19410:364;;;;19240:549;;;19214:645;;;19810:11;;19806:53;;19846:1;19838:5;:9;19806:53;18913:953;;;;;;:::o;9784:312::-;9832:9;9862:1;9858;:5;9854:235;;;-1:-1:-1;9884:1:0;9920;9916;9912:5;;:9;9936:92;9947:1;9943;:5;9936:92;;;9973:1;9969:5;;10011:1;10006;10002;9998;:5;;;;;;:9;9997:15;;;;;;9993:19;;9936:92;;;9854:235;;;;10049:6;;10045:44;;-1:-1:-1;10076:1:0;10045:44;9784:312;;;:::o;13460:201::-;13533:11;;:22;;13549:5;13533:22;:15;:22;:::i;:::-;13519:11;:36;;;-1:-1:-1;;;;;13582:13:0;;;;:9;:13;;;;;;:24;;13600:5;13582:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;13566:13:0;;;;;;:9;:13;;;;;;;;:40;;;;13622:31;;;;;;;13566:13;;;;13622:31;;;;;;;;;;13460:201;;:::o;9554:107::-;9612:7;9644:1;9639;:6;;:14;;9652:1;9639:14;;;-1:-1:-1;9648:1:0;;9554:107;-1:-1:-1;9554:107:0:o;13669:209::-;-1:-1:-1;;;;;13748:15:0;;;;;;:9;:15;;;;;;:26;;13768:5;13748:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;13730:15:0;;;;;;:9;:15;;;;;:44;;;;13799:11;:22;;13815:5;13799:22;:15;:22;:::i;:::-;13785:11;:36;;;13837:33;;;;;;;;-1:-1:-1;;;;;13837:33:0;;;;;;;;;;;;;13669:209;;:::o;8070:192::-;8156:7;8192:12;8184:6;;;;8176:29;;;;-1:-1:-1;;;8176:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8176:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8228:5:0;;;8070:192::o;11853:129::-;-1:-1:-1;;;;;11929:10:0;-1:-1:-1;;;11929:17:0;;11853:129::o;12053:108::-;12113:9;-1:-1:-1;;;;;12143:10:0;;-1:-1:-1;;;;;12139:14:0;;12143:10;12139:14;;;;;;12053:108;-1:-1:-1;;;12053:108:0:o;7737:181::-;7795:7;7827:5;;;7851:6;;;;7843:46;;;;;-1:-1:-1;;;7843:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://46c07a569a6b1459249f351af48901239e20429187f1402f7470459510c63def
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.