Contract 0xef45d134b73241eda7703fa787148d9c9f4950b0

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x694ca4a738c32bfb2e93470cac326c8525c8972533f4237569cf076cacb33a01Set Locked382458452022-05-14 20:22:304 days 18 hrs ago0x14abc77c71521f9fe7c663c0e44d6da0a51f9b11 IN  SpiritSwap: Factory0 FTM0.01023084391
0x8cf5008d2fe1190b01987d5e12d15f3f96d171729a8a02e0748b0d92dd0e38f6Set Locked381784682022-05-13 21:52:025 days 17 hrs ago0x14abc77c71521f9fe7c663c0e44d6da0a51f9b11 IN  SpiritSwap: Factory0 FTM0.02828101
0x99c72ff3b1471f9eea1a631b81ca8a16354c5ff23c5715944ba348b1732407a5Create Pair367228542022-04-22 19:29:1626 days 19 hrs ago0x85d6298705d6b9885eaa2de262df9442353d0218 IN  SpiritSwap: Factory0 FTM0.378172235235
0xcb9547d21f330271b21474129c3a38e054b43d7769a94e35a6803a048153f493Create Pair332902422022-03-13 5:40:2667 days 9 hrs ago2omb Finance: Deployer IN  SpiritSwap: Factory0 FTM0.43608870444
0x0e3164cb763c79b1dda807c5cde4ad69d636c0c17aaf8480aa9c2f3d4dfca79dCreate Pair332900822022-03-13 5:38:0167 days 9 hrs ago2omb Finance: Deployer IN  SpiritSwap: Factory0 FTM0.422297198278
0x5a079fe8a0ad6e19fc63715ca5e6a53f7fd6fc1d7141191e25f686ce351b0722Create Pair332900382022-03-13 5:37:0767 days 9 hrs ago2omb Finance: Deployer IN  SpiritSwap: Factory0 FTM0.456761804025
0x6c5182e909ac205b78601a143a3bf55dd82535ba7fc9a0eba87d438559273e25Create Pair332600372022-03-12 21:07:2267 days 18 hrs ago2omb Finance: Deployer IN  SpiritSwap: Factory0 FTM0.805714075475
0x8457e9e19b62668938df7c90cd8a6c31fbbaeb8b420fed4398c80bd6c059490bCreate Pair306740482022-02-11 20:07:5396 days 19 hrs agoGrowth DeFi: Deployer IN  SpiritSwap: Factory0 FTM1.952027273488
0xa988e6fd6088267af5cbb54efa8571293f7c3547e991ed6ee88afbf49315e4bbCreate Pair287108632022-01-22 8:35:34117 days 6 hrs ago0x69a07f5455b0bb4350694e4f18c07146793e03bd IN  SpiritSwap: Factory0 FTM3.010701423121
0x7315efff1356bd3ca0b80e9adfd1bd2377d6c64d7e71f08f1c9e09df7168a983Create Pair271451122022-01-06 8:35:34133 days 6 hrs ago0xee29d59252bc819df52dae7e72e42e2b6d529437 IN  SpiritSwap: Factory0 FTM0.434930522527
0x81ddd1dc87cf39257759c32ebe07ee92e8ef2d46e43d663ed5d8847eaf0407f7Create Pair267381992022-01-02 5:11:12137 days 10 hrs ago0xf7a94db286946ab360a137b588ca4d726e959388 IN  SpiritSwap: Factory0 FTM0.416109407418
0x2041b960f62513e3a75134b6c20ac4d72f9f71630fb16607e87d8b8c83a6b610Create Pair251017432021-12-16 6:06:36154 days 9 hrs agoSecureDAO: Deployer IN  SpiritSwap: Factory0 FTM0.321704738437
0xb3c34091c6ab2c90b8eccd5ba01ecf637d7481780f7767d01c36011e5f5ef76bSwap Exact Token...213148832021-11-07 5:27:06193 days 9 hrs ago0xda5824e47998bdeb91b25bb71cbf74e832f875a8 IN  SpiritSwap: Factory0 FTM0.01191478486
0xead2ea774c5ad1263e9b9ef41b61925acb9772df25aa5452de2288b3cf303de8Swap Exact Token...213146652021-11-07 5:24:01193 days 9 hrs ago0xda5824e47998bdeb91b25bb71cbf74e832f875a8 IN  SpiritSwap: Factory0 FTM0.012425592547
0xc27d6458e6c25dc781efcbb99ed24d52d0ca16478ca273b9442e90b93c33fc67Swap Exact Token...213143962021-11-07 5:20:16193 days 9 hrs ago0xda5824e47998bdeb91b25bb71cbf74e832f875a8 IN  SpiritSwap: Factory0 FTM0.012439948243
0xd0c65e088482b288604e4e63ec6d47952850cedda0fa9f984e4897a42c042f7dSwap Exact Token...213142172021-11-07 5:17:43193 days 9 hrs ago0xda5824e47998bdeb91b25bb71cbf74e832f875a8 IN  SpiritSwap: Factory0 FTM0.01253160352
0x919460f058c5170f61f95276a42f98e08cf13bfca49a8c83ace62b6fe383b207Swap Exact Token...213125232021-11-07 4:53:26193 days 10 hrs ago0xda5824e47998bdeb91b25bb71cbf74e832f875a8 IN  SpiritSwap: Factory0 FTM0.01728230329
0x5232bc310a1a7f1e84141106c8f4e1566a695d9efe9716ee762a3a62ef7f47eeSwap Exact Token...213124072021-11-07 4:51:50193 days 10 hrs ago0xda5824e47998bdeb91b25bb71cbf74e832f875a8 IN  SpiritSwap: Factory0 FTM0.01641651205
0x2de816a4646e849b49792143f8aace5e6b0485c191e44e79956e3f1244261e26Swap Exact Token...213122402021-11-07 4:49:17193 days 10 hrs ago0xda5824e47998bdeb91b25bb71cbf74e832f875a8 IN  SpiritSwap: Factory0 FTM0.01574716846
0xe2f35fa16a03cd55b198eb8ad752319de2bedec3935974a88b2dae16a81bebbbSwap Exact Token...213117592021-11-07 4:41:01193 days 10 hrs ago0xda5824e47998bdeb91b25bb71cbf74e832f875a8 IN  SpiritSwap: Factory0 FTM0.01469441494
0xdf08d9e52e9376b5dda474bd063da44ce7280294ecab77d7980daf90d8d21af3Create Pair206642162021-10-31 16:55:39199 days 22 hrs ago0xa2ba62ac5a89f5d5cfc71073250b92c853805b58 IN  SpiritSwap: Factory0 FTM0.236967423055
0x86984397166c965de43308407d18a49f6cebea2a2864fbfef826762708e35391Create Pair186781672021-10-09 14:32:25222 days 38 mins ago0xe2dca5be87a29dd426d9cfa38cc08681ff3a84e3 IN  SpiritSwap: Factory0 FTM0.299282182722
0xe66cafc90402d6e6683027285792501d2011b6a7e8ffdd18e5ba83fa932589bfCreate Pair186780372021-10-09 14:29:05222 days 42 mins ago0xe2dca5be87a29dd426d9cfa38cc08681ff3a84e3 IN  SpiritSwap: Factory0 FTM0.317679764529
0xbbf04828caf9e7666a7a4918f25961d715f3c455486ed4367c5b775cca9675c8Create Pair178627882021-09-28 12:48:34233 days 2 hrs ago0xc5f43e0418754f39494a23220a485c5fb5cbc0b6 IN  SpiritSwap: Factory0 FTM0.438905532255
0x84c02f9406e8faedb64d88b1b6ec72667137b7679df5f10407824392fe9a0c85Create Pair175320732021-09-23 9:40:10238 days 5 hrs ago0xf77ce6e2445052a952df1e32c1586524091ea735 IN  SpiritSwap: Factory0 FTM0.3563968757
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x12cbea51771b6dc4d9a2f36a298f5405e0e93c7a115e3686cad1d2a1fde9b342384035432022-05-17 0:36:462 days 14 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xaf724baa6a145263ad54556c7e4cfd5a84ea6656fdf98b32e5bb26906ec98e21383917092022-05-16 20:57:362 days 18 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x2728a4275355acda5172f90ece3dbe46a4dfeabc30e7583bcd96f2323e76c3ee383436122022-05-16 5:18:143 days 9 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xdb463dc8312cfcefdd64f5842113504b56a2d018a01a0e156a710c5409ed594e383314662022-05-16 1:15:433 days 13 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x755b89a290398c009eb6ccd7abf8cad3a4edc8e24602264425f1fb9dffcc738b383019912022-05-15 14:54:174 days 16 mins ago SpiritSwap: Factory  Contract Creation0 FTM
0xbf135c7bba9744927b6b85284d9c69b597144ba03338767fc713a8f80ba537a3383017372022-05-15 14:49:304 days 21 mins ago SpiritSwap: Factory  Contract Creation0 FTM
0xbf79e929e540ef93bb9b94fe52a99db83cb5a26ecee45e8ece16b94e10b98abd383014882022-05-15 14:45:064 days 26 mins ago SpiritSwap: Factory  Contract Creation0 FTM
0x03ac8e83769ef392a8cbce58e75066984b43050a0af1a500275deca460dac59f383014442022-05-15 14:44:244 days 26 mins ago SpiritSwap: Factory  Contract Creation0 FTM
0xc6aaf0e445a2affebe73f57dda59374cf962b268ce268b74e16a94c801133850381622532022-05-13 16:24:545 days 22 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xef589d52ba48954b2772ba4cc24f27a5e34b89006fb3ec484107272ea6bc3eb6381469132022-05-13 10:40:576 days 4 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x4c3d7f5d1870851a68394d33f059e62ec52c03583d2efd69476fbc2a282d0973381422622022-05-13 8:38:566 days 6 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xa7ec3d1d8f0d08ba22b8c34daee70c8551925b235bdb5f5f10fc80aff69e7606381148842022-05-12 20:46:106 days 18 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x8a31424ea5cae3a533da4c7405d2634b2dac68a17800a215ed657a6d1fdbe119380555462022-05-11 18:44:327 days 20 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x307ccd8e5e78fcaddc1b9aa80aad8dfb3bde61b8e84292f3ddcb70b713621698379177232022-05-09 15:18:159 days 23 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x0f7c4b48f3b6581636c0afdff0c4c07952ad03154b7c116a6180cba4278a1460378772142022-05-09 2:04:0410 days 13 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x6565e3dcf7d0108ad51d1ca290a4a730df1b8f18de4fb08a417b009aaf82c93f378652512022-05-08 22:26:2810 days 16 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x7e9f31c22e1ec18370f70c1e530aea50de3e4da1c3b1f9b5bcb308b2b6347c1b377708052022-05-07 16:08:0311 days 23 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x18364f46eea30d3b009cc469bb181c4a8ca45ca074a19c60af7ba51511fb3be8376170252022-05-05 14:37:4714 days 33 mins ago SpiritSwap: Factory  Contract Creation0 FTM
0xef6b51de1264200bdcc801886650dc05cc778705ba92be88863366dc8c467817376008852022-05-05 9:42:2314 days 5 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xdc9941a1f5fae1272df872950172b74806a264e159e4203fbfaec19a57f401e4375902032022-05-05 6:31:1714 days 8 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xf24c3d73827f2bf4958a7f97d80e4f5a6dbace0910b080ed15e895b610bc657f375893802022-05-05 6:15:3814 days 8 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x134ba34b4c0a30f1942808d5d76bcc3f8f2d3381d53096c3a0c58a1295e99aaa375892952022-05-05 6:14:0714 days 8 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xf68ac8b3bc264570257e3368ea2406797ef18aa2c440f9beb9e125bb7629b67a375223092022-05-04 9:30:2315 days 5 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xb475099aff41604f75a444cf56ef05e5208489c5813c02820651f613833fae3b374952382022-05-04 0:59:2915 days 14 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xd3794799f820ff195d4d302d7a4d868f5c050460f18f9d11f31fc244dd3086b7374077862022-05-02 19:18:0816 days 19 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
[ Download CSV Export 
Loading

Similar Match Source Code
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 Security Audit

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.