Contract 0xef45d134b73241eda7703fa787148d9c9f4950b0

Txn Hash
Block
From
To
Value [Txn Fee]
0x2e734c1bad7bef03b390c10e5d45a2c77cdf625ab4a084f35ebd1b776ffb8445101247782021-06-19 23:28:5734 days 7 hrs ago0xee19202883dfeaa7c2c73e23e63464bd8cc502f7 IN  SpiritSwap: Factory0 FTM0.10488635
0x13ced1acdd02a0019e8a30b9aa02ef937a9978ed6f96939e36f421f14db983ce101247552021-06-19 23:28:2934 days 8 hrs ago0xee19202883dfeaa7c2c73e23e63464bd8cc502f7 IN  SpiritSwap: Factory0 FTM0.10488635
0xa4ff46d21021c31e79400fc9d68a7ee82bdeb80e68ef88d6699cac7f2348487a101243892021-06-19 23:21:1834 days 8 hrs ago0xee19202883dfeaa7c2c73e23e63464bd8cc502f7 IN  SpiritSwap: Factory0 FTM0.10488635
0x28d197dce1fd038b63a987c2e8dce4c8b2fe9eed233d5d7f89468f2a546280c5100204282021-06-18 18:48:4435 days 12 hrs ago0xbd2eab5074658c0f3ff0ef7045563cafda008bcb IN  SpiritSwap: Factory0 FTM0.14865083316
0xeea073f500cb1fe5b975388e560599f8c24a28c02616d208c3825206b3476b46100203552021-06-18 18:47:2835 days 12 hrs ago0xbd2eab5074658c0f3ff0ef7045563cafda008bcb IN  SpiritSwap: Factory0 FTM0.14865083316
0xdb356f8554b028f678439a16ef91592169888691f943d3cb32a7b5ff9f15cc0d100202982021-06-18 18:46:0135 days 12 hrs ago0xbd2eab5074658c0f3ff0ef7045563cafda008bcb IN  SpiritSwap: Factory0 FTM0.14865083316
0x329aa21ae8558e829cc2657cc22502a160af30e303fed5f7eba98a10e078ca3a97720122021-06-15 18:21:4138 days 13 hrs ago0xbd2eab5074658c0f3ff0ef7045563cafda008bcb IN  SpiritSwap: Factory0 FTM0.1199906136
0x9c991313785f978aa55cebbe27d04cc61c548368f143330d09c650612b8a2b6897719972021-06-15 18:21:2438 days 13 hrs ago0xbd2eab5074658c0f3ff0ef7045563cafda008bcb IN  SpiritSwap: Factory0 FTM0.1199906136
0xe043db23dc07faea79bb1e7690438626ea4c4d8b64cc5dabe158f93aa693aaba94779652021-06-12 2:31:2342 days 4 hrs ago0x4d5362dd18ea4ba880c829b0152b7ba371741e59 IN  SpiritSwap: Factory0 FTM0.0024140616
0x2b96de7afb764b00f46cfb988be3c8eaa207fda88e67f157f69c239bcf1d5d8877647832021-05-26 16:36:0658 days 14 hrs ago0xbd2eab5074658c0f3ff0ef7045563cafda008bcb IN  SpiritSwap: Factory0 FTM0.255924036
0x758d958d1799ac3a69f3212aab676b21f1ab491adfb32e79568c347d30e61dff77646022021-05-26 16:34:0058 days 14 hrs ago0xbd2eab5074658c0f3ff0ef7045563cafda008bcb IN  SpiritSwap: Factory0 FTM0.255924036
0xa7f8ef2bf681992047960cb025229225e75773ffe2ea5a6f09527c2f35a69c3575742792021-05-25 4:25:1760 days 3 hrs ago0x8114e8d393915a02eae20bd60c30e776e9f56d38 IN  SpiritSwap: Factory0 FTM0.00849493931
0x3352a474e68c46a1aaf4f303bfa8362f7fd9ecf9a914a1920d41e476aa29329168409172021-05-18 17:01:4566 days 14 hrs ago0xc1640bfe0eccde515a416c6563e8debbc05fb433 IN  SpiritSwap: Factory0 FTM0.10488635
0x8a6eb64154f15b7f43b7311459498f6a2ff573dfe5e5a59f9d7e1bad864ddf2367694152021-05-18 1:50:4567 days 5 hrs ago0xc914a68cf666b3c3e92fad4cc4f6636359364ed3 IN  SpiritSwap: Factory0 FTM0.10488575
0xd1cb25deebf0218844897ec7aa65fa4733e1969712db467578a0686439fcca1667690642021-05-18 1:45:3967 days 5 hrs ago0xc1640bfe0eccde515a416c6563e8debbc05fb433 IN  SpiritSwap: Factory0 FTM0.10488635
0xe6fde3fb837d0a8e365e0bf196bbacb4f92bfda84cf9edde902e72db6e2b0b3167688252021-05-18 1:42:1167 days 5 hrs ago0xc1640bfe0eccde515a416c6563e8debbc05fb433 IN  SpiritSwap: Factory0 FTM0.10488635
0x1481090bb265e98db694c4b76689575f4360bc4a97772e93128f723426d48aae67687262021-05-18 1:40:5067 days 5 hrs ago0xc1640bfe0eccde515a416c6563e8debbc05fb433 IN  SpiritSwap: Factory0 FTM0.10488635
0x62a64920d1006fde4d7cde8196ed403a1c73fe01871c99a32ccff79377aa1eb167686352021-05-18 1:39:2567 days 5 hrs ago0xc1640bfe0eccde515a416c6563e8debbc05fb433 IN  SpiritSwap: Factory0 FTM0.10488635
0xd1139f302a167d244389fb892efcd95a6b18b3d196b6ea0dd7369f903ab7c3f866718282021-05-17 4:05:2268 days 3 hrs agoFrankenstein Finance: Deployer IN  SpiritSwap: Factory0 FTM0.17830773
0x1ec04b739ea2ce69fd311f687eb0721becdbe0a071ba64619fa7d87309e2f1c866717872021-05-17 4:04:5068 days 3 hrs agoFrankenstein Finance: Deployer IN  SpiritSwap: Factory0 FTM0.17830773
0x0ef19f943e59524c3058da2b439a36e9de0dc8d06782b738093622258fa0a61466717262021-05-17 4:04:0768 days 3 hrs agoFrankenstein Finance: Deployer IN  SpiritSwap: Factory0 FTM0.17830773
0xb68b0274ed571b6b240e1afc10717a2d86950d9100b874d2c553f7501604de2c66501622021-05-16 23:11:2968 days 8 hrs agoFrankenstein Finance: Deployer IN  SpiritSwap: Factory0 FTM0.172014516
0x27f62ca1cbc4eb25f27a0e4cf0a5f85955b1e1020aa40c4443e3f3afde6449fa66467022021-05-16 22:14:2268 days 9 hrs agoFrankenstein Finance: Deployer IN  SpiritSwap: Factory0 FTM0.172014516
0x5e45987ae692301fa4ee72b9ccbd354c35fb0177fbe1b2b1a9cceb29107754d766466892021-05-16 22:14:1168 days 9 hrs agoFrankenstein Finance: Deployer IN  SpiritSwap: Factory0 FTM0.172013614
0x50d6cd51e2a2ced009b0c0a320ca5a0e78c3dfbcf5454bf2ff178b281faa7e7365474582021-05-15 23:03:2669 days 8 hrs ago0x4d5362dd18ea4ba880c829b0152b7ba371741e59 IN  SpiritSwap: Factory0 FTM0.001822497
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x09e876edd68aad0be264984389555cc74cda34e3bda25a632d5d65f679a567b4127881172021-07-24 0:45:016 hrs 43 mins ago SpiritSwap: Factory  Contract Creation0 FTM
0x16b551fc5154575bc88278cd0c014b8bba9709bb45e7637e7b95c330921d1880127879492021-07-24 0:41:496 hrs 46 mins ago SpiritSwap: Factory  Contract Creation0 FTM
0xd42c5755e3ddaedd923df0e584703769cae32cb56c3db6eb6d830580b0352ba6127864012021-07-24 0:14:427 hrs 13 mins ago SpiritSwap: Factory  Contract Creation0 FTM
0x5fcd52d77606be459e3325e8ff72c00e8a2cfddd832f9de2885eeff8e8639551126769112021-07-22 13:43:181 day 17 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xeec227e89f888c64696d483ee7d4b1efe4d24cb46476c77778b89d7352f9816b125845592021-07-21 9:03:032 days 22 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xd2cca713593ed0cc4e6f07d0cb794f95d67455a7163deff6775b939455e35ec4125373862021-07-20 17:28:503 days 13 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xc572ffe240124aeb1ca4a327645d39d057ccf2c102016eea5f4ba34061120aab125224192021-07-20 12:48:253 days 18 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xad9997550c0bbff0c89edbe30109e7e92150cfb2401154923aa9314ebd9415aa125218042021-07-20 12:36:393 days 18 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x1f5afeb5dc79485d64504a624129d16283ff451106961faf62f1409338ecff08125185002021-07-20 11:34:013 days 19 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xe8c9e0d69e88034ee1ba3263d3c1c149adcdd2dec44abd45c943bfc7819e9bb7124764102021-07-19 22:35:234 days 8 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x7933b0a6176b69153c4415447eb472a06862f96082f20bc81fc6410eafd7720a124747322021-07-19 22:03:394 days 9 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x03a4d6acc506840762a59112a0487368e98adc54cc1337b12fef8060e3f273f0124717562021-07-19 21:04:024 days 10 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xab67f98356b06a2339f96971b4fd3f5c9cff158d15570c151a014dc3fe350618124678412021-07-19 19:47:054 days 11 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xb76fdf10daae8165393bd4fe0d4e05ac2fe03d7fb5536f9586db406f69786212124605502021-07-19 17:26:364 days 14 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x10518a0ec0208b2825598799b4da14e1e92cc3e0de3eca49b24005fd5259af33124479612021-07-19 13:37:454 days 17 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x9efa115ae9ceeac8bdb010b70b54ac72689d2981bcec2b13816214b396dba725124431412021-07-19 12:14:394 days 19 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x292ac686468c278032541a3adcda9feb8038fa7808db4bcd21a60713a0ea2e48124428292021-07-19 12:09:044 days 19 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x826ffce6a7a43de1cfae8eaa5b035490dd1c61c1a772453140876b6bee65a731124215642021-07-19 5:26:245 days 2 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xac1465d66465efc5edf55f8636844dca51d0c922e0c21bd16e28168221c5b080124168442021-07-19 3:54:565 days 3 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xe76bbea2b5d855e88c8227b3c133c7315cbd5c3b3d86be26c4d22a66a2c7cd99124080312021-07-19 1:05:585 days 6 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x614e3c870553861cfe9517439454cbb3673bb3c7407ac780d524ff7b097896bd123995382021-07-18 22:23:295 days 9 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x8240a28b4c69fcc9047610ea83ba103dc11e625dc91309e861fa7e55dcd57bd8123950042021-07-18 20:56:155 days 10 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x217bbd0da58182d6fe86f89058eb8789e72ebc0de5a92a1d799dfeca59e5ceeb123844882021-07-18 17:34:025 days 13 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x10c02e6fa25f167f7e1433f12e9511cad814de90bf44863f11b8127a1088f60d123633562021-07-18 10:54:195 days 20 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x30e2b86ce0bb0f3676e67c2aafea56d1cf72b729ce03633b8ccb37835b0fef80123101692021-07-17 17:12:096 days 14 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
[ Download CSV Export 
Loading

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

Contract Name:
SpiritFactory

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2021-04-20
*/

/**
 *Submitted for verification at FtmScan.com on 2020-09-19
*/

pragma solidity =0.5.16;


interface IPancakeFactory {
    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;

    function locked() external view returns (bool);
    function setLocked(bool) external;
}

interface IPancakePair {
    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 IPancakeERC20 {
    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 PancakeERC20 is IPancakeERC20 {
    using SafeMath for uint;

    string public constant name = 'Spirit LPs';
    string public constant symbol = 'SPIRIT-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, 'Pancake: 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, 'Pancake: 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 IPancakeCallee {
    function pancakeCall(address sender, uint amount0, uint amount1, bytes calldata data) external;
}

contract PancakePair is IPancakePair, PancakeERC20 {
    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, 'Pancake: 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))), 'Pancake: 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, 'Pancake: 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), 'Pancake: 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 = IPancakeFactory(factory).feeTo();
        feeOn = feeTo != address(0);
        uint _kLast = kLast; // gas savings
        if (feeOn) {
            if (_kLast != 0) {
                uint rootK = Math.sqrt(uint(_reserve0).mul(_reserve1));
                uint rootKLast = Math.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint numerator = totalSupply.mul(rootK.sub(rootKLast));
                    uint denominator = rootK.mul(5).add(rootKLast);
                    uint liquidity = numerator / denominator;
                    if (liquidity > 0) _mint(feeTo, liquidity);
                }
            }
        } else if (_kLast != 0) {
            kLast = 0;
        }
    }

    // this low-level function should be called from a contract which performs important safety checks
    function mint(address to) external lock returns (uint liquidity) {
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        uint balance0 = 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, 'Pancake: 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, 'Pancake: 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, 'Pancake: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'Pancake: 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, 'Pancake: 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) IPancakeCallee(to).pancakeCall(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, 'Pancake: INSUFFICIENT_INPUT_AMOUNT');
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
        uint balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(3));
        uint balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(3));
        require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(1000**2), 'Pancake: 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 SpiritFactory is IPancakeFactory {
    bytes32 public constant INIT_CODE_PAIR_HASH = keccak256(abi.encodePacked(type(PancakePair).creationCode));

    address public feeTo;
    address public feeToSetter;
    bool public locked;

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

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

    constructor(address _feeToSetter, bool _locked) public {
        feeToSetter = _feeToSetter;
        locked = _locked;
    }

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

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

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

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

    function setLocked(bool _locked) external {
        require(msg.sender == feeToSetter, 'Spirit: FORBIDDEN');
        locked = _locked;
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"},{"internalType":"bool","name":"_locked","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"PairCreated","type":"event"},{"constant":true,"inputs":[],"name":"INIT_CODE_PAIR_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"allPairsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"createPair","outputs":[{"internalType":"address","name":"pair","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feeTo","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeToSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"locked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_feeTo","type":"address"}],"name":"setFeeTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"name":"setFeeToSetter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"_locked","type":"bool"}],"name":"setLocked","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50604051612c06380380612c068339818101604052604081101561003357600080fd5b508051602090910151600180546001600160a01b0319166001600160a01b039093169290921760ff60a01b1916600160a01b91151591909102179055612b888061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80635855a25a116100715780635855a25a14610132578063a2e74af61461013a578063c9c6539614610160578063cf3090121461018e578063e6a43905146101aa578063f46901ed146101d8576100a9565b8063017e7e58146100ae578063094b7415146100d25780631e3dd18b146100da578063211e28b6146100f7578063574f2ba314610118575b600080fd5b6100b66101fe565b604080516001600160a01b039092168252519081900360200190f35b6100b661020d565b6100b6600480360360208110156100f057600080fd5b503561021c565b6101166004803603602081101561010d57600080fd5b50351515610243565b005b6101206102b4565b60408051918252519081900360200190f35b6101206102ba565b6101166004803603602081101561015057600080fd5b50356001600160a01b031661034d565b6100b66004803603604081101561017657600080fd5b506001600160a01b03813581169160200135166103c2565b6101966106e7565b604080519115158252519081900360200190f35b6100b6600480360360408110156101c057600080fd5b506001600160a01b03813581169160200135166106f7565b610116600480360360208110156101ee57600080fd5b50356001600160a01b031661071d565b6000546001600160a01b031681565b6001546001600160a01b031681565b6003818154811061022957fe5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b03163314610296576040805162461bcd60e51b815260206004820152601160248201527029b834b934ba1d102327a92124a22222a760791b604482015290519081900360640190fd5b60018054911515600160a01b0260ff60a01b19909216919091179055565b60035490565b6040516102c960208201610792565b6020820181038252601f19601f820116604052506040516020018082805190602001908083835b6020831061030f5780518252601f1990920191602091820191016102f0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b6001546001600160a01b031633146103a0576040805162461bcd60e51b815260206004820152601160248201527029b834b934ba1d102327a92124a22222a760791b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b0316141561042b576040805162461bcd60e51b815260206004820152601b60248201527f5370697269743a204944454e544943414c5f4144445245535345530000000000604482015290519081900360640190fd5b600080836001600160a01b0316856001600160a01b03161061044e578385610451565b84845b90925090506001600160a01b0382166104a8576040805162461bcd60e51b81526020600482015260146024820152735370697269743a205a45524f5f4144445245535360601b604482015290519081900360640190fd5b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615610518576040805162461bcd60e51b81526020600482015260136024820152725370697269743a20504149525f45584953545360681b604482015290519081900360640190fd5b60606040518060200161052a90610792565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f56040805163485cc95560e01b81526001600160a01b038781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b1580156105fd57600080fd5b505af1158015610611573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b600154600160a01b900460ff1681565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b03163314610770576040805162461bcd60e51b815260206004820152601160248201527029b834b934ba1d102327a92124a22222a760791b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6123b4806107a08339019056fe60806040526001600c5534801561001557600080fd5b5060405146908060526123628239604080519182900360520182208282018252600a835269537069726974204c507360b01b6020938401528151808301835260018152603160f81b908401528151808401919091527f12dc4b9d23cac02671870eb5c48f2276ff76c2eecd5057842d000e7dd01f04e6818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561225d806101056000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610b0e565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610b34565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b5e565b604080519115158252519081900360200190f35b610339610b75565b604080516001600160a01b039092168252519081900360200190f35b61035d610b84565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610b8a565b61035d610c24565b6103b5610c48565b6040805160ff9092168252519081900360200190f35b61035d610c4d565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c53565b61035d610cd5565b61035d610cdb565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610ce1565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b0316610fdf565b61035d610ff1565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316610ff7565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611009565b6040805192835260208301919091528051918290030190f35b6102446113ad565b61031d600480360360408110156104e857600080fd5b506001600160a01b0381351690602001356113d2565b61035d6113df565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b03166113e5565b61033961154e565b61033961155d565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c0013561156c565b61035d600480360360408110156105a357600080fd5b506001600160a01b038135811691602001351661176c565b61023a611789565b600c5460011461060c576040805162461bcd60e51b815260206004820152600f60248201526e14185b98d85ad94e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c558415158061061f5750600084115b61065a5760405162461bcd60e51b81526004018080602001828103825260238152602001806121e06023913960400191505060405180910390fd5b600080610665610b34565b5091509150816001600160701b03168710801561068a5750806001600160701b031686105b6106db576040805162461bcd60e51b815260206004820152601f60248201527f50616e63616b653a20494e53554646494349454e545f4c495155494449545900604482015290519081900360640190fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107195750806001600160a01b0316896001600160a01b031614155b610760576040805162461bcd60e51b815260206004820152601360248201527250616e63616b653a20494e56414c49445f544f60681b604482015290519081900360640190fd5b8a1561077157610771828a8d6118e9565b891561078257610782818a8c6118e9565b861561083d57886001600160a01b03166384800812338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561082457600080fd5b505af1158015610838573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561088357600080fd5b505afa158015610897573d6000803e3d6000fd5b505050506040513d60208110156108ad57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108f957600080fd5b505afa15801561090d573d6000803e3d6000fd5b505050506040513d602081101561092357600080fd5b5051925060009150506001600160701b0385168a90038311610946576000610955565b89856001600160701b03160383035b9050600089856001600160701b0316038311610972576000610981565b89856001600160701b03160383035b905060008211806109925750600081115b6109cd5760405162461bcd60e51b81526004018080602001828103825260228152602001806121986022913960400191505060405180910390fd5b6000610a016109e384600363ffffffff611a8316565b6109f5876103e863ffffffff611a8316565b9063ffffffff611ae616565b90506000610a196109e384600363ffffffff611a8316565b9050610a4a620f4240610a3e6001600160701b038b8116908b1663ffffffff611a8316565b9063ffffffff611a8316565b610a5a838363ffffffff611a8316565b1015610a9a576040805162461bcd60e51b815260206004820152600a60248201526950616e63616b653a204b60b01b604482015290519081900360640190fd5b5050610aa884848888611b36565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600a815260200169537069726974204c507360b01b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b6b338484611cf9565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c0f576001600160a01b0384166000908152600260209081526040808320338452909152902054610bea908363ffffffff611ae616565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c1a848484611d5b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610ca7576040805162461bcd60e51b81526020600482015260126024820152712830b731b0b5b29d102327a92124a22222a760711b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610d2c576040805162461bcd60e51b815260206004820152600f60248201526e14185b98d85ad94e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c81905580610d3c610b34565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d9057600080fd5b505afa158015610da4573d6000803e3d6000fd5b505050506040513d6020811015610dba57600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e0d57600080fd5b505afa158015610e21573d6000803e3d6000fd5b505050506040513d6020811015610e3757600080fd5b505190506000610e56836001600160701b03871663ffffffff611ae616565b90506000610e73836001600160701b03871663ffffffff611ae616565b90506000610e818787611e15565b60005490915080610ebe57610eaa6103e86109f5610ea5878763ffffffff611a8316565b611f73565b9850610eb960006103e8611fc5565b610f0d565b610f0a6001600160701b038916610edb868463ffffffff611a8316565b81610ee257fe5b046001600160701b038916610efd868563ffffffff611a8316565b81610f0457fe5b0461205b565b98505b60008911610f4c5760405162461bcd60e51b81526004018080602001828103825260268152602001806122036026913960400191505060405180910390fd5b610f568a8a611fc5565b610f6286868a8a611b36565b8115610f9257600854610f8e906001600160701b0380821691600160701b90041663ffffffff611a8316565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c54600114611055576040805162461bcd60e51b815260206004820152600f60248201526e14185b98d85ad94e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c81905580611065610b34565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b1580156110c157600080fd5b505afa1580156110d5573d6000803e3d6000fd5b505050506040513d60208110156110eb57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561113957600080fd5b505afa15801561114d573d6000803e3d6000fd5b505050506040513d602081101561116357600080fd5b5051306000908152600160205260408120549192506111828888611e15565b60005490915080611199848763ffffffff611a8316565b816111a057fe5b049a50806111b4848663ffffffff611a8316565b816111bb57fe5b04995060008b1180156111ce575060008a115b6112095760405162461bcd60e51b81526004018080602001828103825260268152602001806121ba6026913960400191505060405180910390fd5b6112133084612073565b61121e878d8d6118e9565b611229868d8c6118e9565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561126f57600080fd5b505afa158015611283573d6000803e3d6000fd5b505050506040513d602081101561129957600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b1580156112e557600080fd5b505afa1580156112f9573d6000803e3d6000fd5b505050506040513d602081101561130f57600080fd5b5051935061131f85858b8b611b36565b811561134f5760085461134b906001600160701b0380821691600160701b90041663ffffffff611a8316565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600981526020016805350495249542d4c560bc1b81525081565b6000610b6b338484611d5b565b6103e881565b600c5460011461142e576040805162461bcd60e51b815260206004820152600f60248201526e14185b98d85ad94e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b0394851694909316926114dd92859287926114d8926001600160701b03169185916370a0823191602480820192602092909190829003018186803b1580156114a057600080fd5b505afa1580156114b4573d6000803e3d6000fd5b505050506040513d60208110156114ca57600080fd5b50519063ffffffff611ae616565b6118e9565b600854604080516370a0823160e01b8152306004820152905161154492849287926114d892600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b1580156114a057600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b428410156115b4576040805162461bcd60e51b815260206004820152601060248201526f14185b98d85ad94e881156141254915160821b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156116cf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117055750886001600160a01b0316816001600160a01b0316145b611756576040805162461bcd60e51b815260206004820152601a60248201527f50616e63616b653a20494e56414c49445f5349474e4154555245000000000000604482015290519081900360640190fd5b611761898989611cf9565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c546001146117d2576040805162461bcd60e51b815260206004820152600f60248201526e14185b98d85ad94e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b815230600482015290516118e2926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561182357600080fd5b505afa158015611837573d6000803e3d6000fd5b505050506040513d602081101561184d57600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561189a57600080fd5b505afa1580156118ae573d6000803e3d6000fd5b505050506040513d60208110156118c457600080fd5b50516008546001600160701b0380821691600160701b900416611b36565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b602083106119965780518252601f199092019160209182019101611977565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146119f8576040519150601f19603f3d011682016040523d82523d6000602084013e6119fd565b606091505b5091509150818015611a2b575080511580611a2b5750808060200190516020811015611a2857600080fd5b50515b611a7c576040805162461bcd60e51b815260206004820152601860248201527f50616e63616b653a205452414e534645525f4641494c45440000000000000000604482015290519081900360640190fd5b5050505050565b6000811580611a9e57505080820282828281611a9b57fe5b04145b610b6f576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b6f576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611b5457506001600160701b038311155b611b99576040805162461bcd60e51b815260206004820152601160248201527050616e63616b653a204f564552464c4f5760781b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611bc957506001600160701b03841615155b8015611bdd57506001600160701b03831615155b15611c4e578063ffffffff16611c0b85611bf686612111565b6001600160e01b03169063ffffffff61212316565b600980546001600160e01b03929092169290920201905563ffffffff8116611c3684611bf687612111565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611d84908263ffffffff611ae616565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611db9908263ffffffff61214816565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611e6657600080fd5b505afa158015611e7a573d6000803e3d6000fd5b505050506040513d6020811015611e9057600080fd5b5051600b546001600160a01b038216158015945091925090611f5f578015611f5a576000611ed3610ea56001600160701b0388811690881663ffffffff611a8316565b90506000611ee083611f73565b905080821115611f57576000611f0e611eff848463ffffffff611ae616565b6000549063ffffffff611a8316565b90506000611f3383611f2786600563ffffffff611a8316565b9063ffffffff61214816565b90506000818381611f4057fe5b0490508015611f5357611f538782611fc5565b5050505b50505b611f6b565b8015611f6b576000600b555b505092915050565b60006003821115611fb6575080600160028204015b81811015611fb057809150600281828581611f9f57fe5b040181611fa857fe5b049050611f88565b50611fc0565b8115611fc0575060015b919050565b600054611fd8908263ffffffff61214816565b60009081556001600160a01b038316815260016020526040902054612003908263ffffffff61214816565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061206a578161206c565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461209c908263ffffffff611ae616565b6001600160a01b038316600090815260016020526040812091909155546120c9908263ffffffff611ae616565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161214057fe5b049392505050565b80820182811015610b6f576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe50616e63616b653a20494e53554646494349454e545f494e5055545f414d4f554e5450616e63616b653a20494e53554646494349454e545f4c49515549444954595f4255524e454450616e63616b653a20494e53554646494349454e545f4f55545055545f414d4f554e5450616e63616b653a20494e53554646494349454e545f4c49515549444954595f4d494e544544a265627a7a72315820205942e5fc0d6fa8a2d4b43ceac04d52e3229319213f78166c4992900ba1770564736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429a265627a7a72315820fd9916c9f3a5bac9fc3a9fb92613c3d0cddd123d44a41e484aee1ef85425aadd64736f6c63430005100032000000000000000000000000635be83d56fe9b6a9f9a232f8d051eff9a415f130000000000000000000000000000000000000000000000000000000000000001

Deployed ByteCode Sourcemap

20174:2114:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20174:2114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20337:20;;;:::i;:::-;;;;-1:-1:-1;;;;;20337:20:0;;;;;;;;;;;;;;20364:26;;;:::i;20493:25::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20493:25:0;;:::i;22142:143::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22142:143:0;;;;:::i;:::-;;20756:96;;;:::i;:::-;;;;;;;;;;;;;;;;20223:105;;;:::i;21968:166::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21968:166:0;-1:-1:-1;;;;;21968:166:0;;:::i;20860:950::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20860:950:0;;;;;;;;;;:::i;20397:18::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;20424:62;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20424:62:0;;;;;;;;;;:::i;21818:142::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21818:142:0;-1:-1:-1;;;;;21818:142:0;;:::i;20337:20::-;;;-1:-1:-1;;;;;20337:20:0;;:::o;20364:26::-;;;-1:-1:-1;;;;;20364:26:0;;:::o;20493:25::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20493:25:0;;-1:-1:-1;20493:25:0;:::o;22142:143::-;22217:11;;-1:-1:-1;;;;;22217:11:0;22203:10;:25;22195:55;;;;;-1:-1:-1;;;22195:55:0;;;;;;;;;;;;-1:-1:-1;;;22195:55:0;;;;;;;;;;;;;;;22261:6;:16;;;;;-1:-1:-1;;;22261:16:0;-1:-1:-1;;;;22261:16:0;;;;;;;;;22142:143::o;20756:96::-;20829:8;:15;20756:96;:::o;20223:105::-;20296:30;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;87:2;83:7;78:2;73:3;69:12;65:26;61:2;54:38;20296:30:0;20279:48;;;;;;;;;;;;;;;36:153:-1;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;;;20279:48:0;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;20279:48:0;;;20269:59;;;;;;20223:105;:::o;21968:166::-;22056:11;;-1:-1:-1;;;;;22056:11:0;22042:10;:25;22034:55;;;;;-1:-1:-1;;;22034:55:0;;;;;;;;;;;;-1:-1:-1;;;22034:55:0;;;;;;;;;;;;;;;22100:11;:26;;-1:-1:-1;;;;;;22100:26:0;-1:-1:-1;;;;;22100:26:0;;;;;;;;;;21968:166::o;20860:950::-;20930:12;20973:6;-1:-1:-1;;;;;20963:16:0;:6;-1:-1:-1;;;;;20963:16:0;;;20955:56;;;;;-1:-1:-1;;;20955:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21023:14;21039;21066:6;-1:-1:-1;;;;;21057:15:0;:6;-1:-1:-1;;;;;21057:15:0;;:53;;21095:6;21103;21057:53;;;21076:6;21084;21057:53;21022:88;;-1:-1:-1;21022:88:0;-1:-1:-1;;;;;;21129:20:0;;21121:53;;;;;-1:-1:-1;;;21121:53:0;;;;;;;;;;;;-1:-1:-1;;;21121:53:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21193:15:0;;;21228:1;21193:15;;;:7;:15;;;;;;;;:23;;;;;;;;;;;;:37;21185:69;;;;;-1:-1:-1;;;21185:69:0;;;;;;;;;;;;-1:-1:-1;;;21185:69:0;;;;;;;;;;;;;;;21295:21;21319:30;;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;87:2;83:7;78:2;73:3;69:12;65:26;61:2;54:38;21319:30:0;21295:54;;21360:12;21402:6;21410;21385:32;;;;;;-1:-1:-1;;;;;21385:32:0;-1:-1:-1;;;;;21385:32:0;;;;;;;;-1:-1:-1;;;;;21385:32:0;-1:-1:-1;;;;;21385:32:0;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21385:32:0;;;21375:43;;;;;;21360:58;;21508:4;21497:8;21491:15;21486:2;21476:8;21472:17;21469:1;21461:52;21534:45;;;-1:-1:-1;;;21534:45:0;;-1:-1:-1;;;;;21534:45:0;;;;;;;;;;;;;;;;21453:60;;-1:-1:-1;21534:29:0;;;;;;:45;;;;;-1:-1:-1;;21534:45:0;;;;;;;;-1:-1:-1;21534:29:0;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;21534:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;;;;;;21590:15:0;;;;;;;:7;:15;;;;;;;;:23;;;;;;;;;;;;:30;;;;;-1:-1:-1;;;;;;21590:30:0;;;;;;;;21631:15;;;;;;:23;;;;;;;;:30;;;;;;;;21717:8;27:10:-1;;-1:-1;23:18;;45:23;;21717:19:0;;;;;;;;;;;;;;;;;;21786:15;;21752:50;;;;;;;;;;;;;;;;;;;;;;20860:950;;;;;;;;:::o;20397:18::-;;;-1:-1:-1;;;20397:18:0;;;;;:::o;20424:62::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20424:62:0;;:::o;21818:142::-;21894:11;;-1:-1:-1;;;;;21894:11:0;21880:10;:25;21872:55;;;;;-1:-1:-1;;;21872:55:0;;;;;;;;;;;;-1:-1:-1;;;21872:55:0;;;;;;;;;;;;;;;21938:5;:14;;-1:-1:-1;;;;;;21938:14:0;-1:-1:-1;;;;;21938:14:0;;;;;;;;;;21818:142::o;20174:2114::-;;;;;;;;:::o

Swarm Source

bzzr://fd9916c9f3a5bac9fc3a9fb92613c3d0cddd123d44a41e484aee1ef85425aadd
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

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