Contract 0xac2657ba28768fe5f09052f07a9b7ea867a4608f

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x8ae798c49099dcc5cdec0babd9bd35441a5b1f444f46c76ca01d7dddf75a7545Approve34818632023-05-03 9:57:1829 days 6 hrs ago0xda9ddc47a979e685bdd92703af375ba8ba383194 IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.014924413369
0x792312a8d49263d14f77e80dcf870d1321ece828ec0ff1d225b0c146f4d3acbcApprove33650362023-04-16 10:56:1846 days 5 hrs ago0xda9ddc47a979e685bdd92703af375ba8ba383194 IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.00474163716
0xee74576ab3dd7e06d047e2e571a33974fd5c425fc4d964424af75843518d004fApprove33248922023-04-10 16:28:5451 days 23 hrs ago0x61a964a5a0308b2ec87d3e1ab2b1e14ea00f6974 IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.004688285
0xcd0b0bfdcbda5f3abba972fda3a7938736e64c38aff90a0949215305a6546dbdApprove33208322023-04-10 2:34:0052 days 13 hrs ago0xdd0a4223b501176c1ce551185c09c1ab0bc0599c IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.002530150632
0x2e0a3cd5d6549129418bd41efd721c009f84a6b8ad0f613e391fefbb2ea766f9Approve33208322023-04-10 2:34:0052 days 13 hrs ago0xdd0a4223b501176c1ce551185c09c1ab0bc0599c IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.002530150632
0xe60b6ff22f25de4eabf4e98ae5a1bb6b760f590e5602c0d7d75c4f2a622d9313Approve32886452023-04-05 5:28:4857 days 10 hrs ago0x06e0444de2397806621d0c61846394350436668d IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.004689503
0xd12eb1b8cc5c3668c9a7b59f93d1ee9a6d4357c09f0f90f3c25ec95664c35244Approve32241622023-03-26 22:15:2466 days 18 hrs ago0x13ccfac101f88ac5dc942aab90b28dcc7d45fdab IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.004689503
0xd7b1ba268873bc0ae01dd0f1988c79e9553758eb75832d95d5aacda35cbcfc23Approve31703532023-03-19 4:58:0074 days 11 hrs ago0x26085e33fc513cddb25a86117c39163a662ec729 IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.004721171
0x437c8c6ef7c1c1c2df954574fca0e72afad03ec19544177daa993360611c4b40Approve31224242023-03-11 11:35:0082 days 4 hrs ago0x3433790b1545963955c69301f6a462ce3fd2214e IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.00492211148
0xbf064308666b1708406c4a2aac0d435ebb7a9c3b14e74ae72452562890870799Approve30733202023-03-04 11:41:1289 days 4 hrs ago0x046b4b671661358dbe6aee82de78ecba4aa87ee7 IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.002701321
0xefb17bdfb7a7016fe6e233945b7a13bf089bea5352ece83f18e0254d6e4ce51fApprove30733182023-03-04 11:40:4889 days 4 hrs ago0x046b4b671661358dbe6aee82de78ecba4aa87ee7 IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.004721171
0x9bd2b04269f496d660e85e668cbcc9b0484dabba25943200dca52b8d989c1779Approve29783132023-02-18 22:56:06102 days 17 hrs ago0x49b5a44f569acdb43c2bbc58535b85c75ad46158 IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.002701321
0x4ee27411de87d2e5efea7ebedc3877cb3f73047b8d1b5f451466137ae82211b9Approve29783102023-02-18 22:55:30102 days 17 hrs ago0x49b5a44f569acdb43c2bbc58535b85c75ad46158 IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.004721171
0xf58144f33c329d5c58734ee88b0895b6f8e7ad28862dc645748e84bc08296875Approve29218322023-02-10 22:06:42110 days 18 hrs ago0x9d7d42b68d7982cdfac8c2bdf1256f8b7b9b85f1 IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.002708522365
0xa0bac4bb29f84071d239cbaf1eda6fe58ef4fba678b9d44531f6ba20a0c86d20Approve29218322023-02-10 22:06:42110 days 18 hrs ago0x9d7d42b68d7982cdfac8c2bdf1256f8b7b9b85f1 IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.00474163716
0x313dcfed211f77ef36c5ad55a18d0d5a6657cb87676701c2073a16e6c612ac96Approve27685012023-01-20 5:54:54132 days 10 hrs ago0x49e474d45cd188d5296f2558ad584a1e26c1fd9c IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.004721171
0x231814622c678aa896f0bae89243c4538af3ddab4e07ab66e79a9ccf26fad2d8Approve27554032023-01-18 9:40:12134 days 6 hrs ago0x5781166b1cae483baca93895ae82bce8acc9795e IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.004721171
0x0e01bd4b38d7814a3425ecc17c00711bfe6776d1a02ebd17e16c96ede05c7b42Approve27270172023-01-14 9:24:36138 days 6 hrs ago0xd70b5dbd65a31c6a54259844ace48eadd3965708 IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.0051025858
0x898b0ad15a139c814a8d0e6ba8b00bc6d44a96953a6328db09eb152cafcc6554Approve25965342022-12-26 23:47:30156 days 16 hrs ago0x414e5fdfd8b047880d1b130ed343905d2f9666e5 IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.004721171
0x4e85fb31a78da5531f087322ef325fa6abc318adb38e17f11c8820576d7f7b4aApprove24754952022-12-09 21:14:30173 days 19 hrs ago0xf20c06122adb43cf40c61f9f475ffb2d6122b51d IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.004697914
0x21ac925655764dec2afab1c4bc9be777bb5ee1f3d6677e06056429f1e16e4455Approve24450822022-12-05 14:09:00178 days 2 hrs ago0x54316ba945d1224e1ccce2c6133b90e86838e78e IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.005033469071
0x339fd37b94831c0728539a7fbb124b9db205e0af645abbb2bdaa8b30f638629aApprove23539762022-11-22 17:55:30190 days 22 hrs ago0x15f688feed7f014b933d306a74bc5d11506f54b9 IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.004721171
0xa5d5ce62bb61ee69ffda0dd32630cd4c6868237872e77d7a803f290e754f2644Approve23408362022-11-20 21:34:54192 days 18 hrs ago0xc1fbbfafb8d6b1128baf015884afe3a8c3b2122e IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.004721171
0x7cabbd400d487cfbdbe9d8a097a17f590a6609e27b4d9ef66e17f59ac0ecf168Approve23259452022-11-18 19:15:36194 days 21 hrs ago0x44977abd302cec1a9663559555054a515d7a869d IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.004721171
0x4c87fe8acc252851eecf5a007755eff6af0bbead2f75d009766c8bc45930ed68Approve22618182022-11-09 17:15:00203 days 23 hrs ago0xc7f6b43076615dbffeb9e40a2c5ac0fa7f331fbb IN  0xac2657ba28768fe5f09052f07a9b7ea867a4608f0 GLMR0.004721171
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x5f51bbf6c74cc1d202f48d1b530a06b40a87a5698df756f9e4d91f45f0281e1b1792222022-01-12 13:54:06505 days 2 hrs ago StellaSwap: Factory V1  Contract Creation0 GLMR
[ Download CSV Export 
Loading

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

Contract Name:
StellaSwapV2Pair

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at moonbeam.moonscan.io on 2022-02-09
*/

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function migrator() 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 setMigrator(address) external;
}


// File contracts/amm/libraries/SafeMath.sol



pragma solidity =0.6.12;

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

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

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

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


// File contracts/amm/StellaSwapV2ERC20.sol



pragma solidity =0.6.12;

contract StellaSwapV2ERC20 {
    using SafeMathStellaSwap for uint;

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


// File contracts/amm/libraries/Math.sol



pragma solidity =0.6.12;

// a library for performing various math operations

library Math {
    function min(uint x, uint y) internal pure returns (uint z) {
        z = x < y ? x : y;
    }

    // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
    function sqrt(uint y) internal pure returns (uint z) {
        if (y > 3) {
            z = y;
            uint x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}


// File contracts/amm/libraries/UQ112x112.sol



pragma solidity =0.6.12;

// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))

// range: [0, 2**112 - 1]
// resolution: 1 / 2**112

library UQ112x112 {
    uint224 constant Q112 = 2**112;

    // encode a uint112 as a UQ112x112
    function encode(uint112 y) internal pure returns (uint224 z) {
        z = uint224(y) * Q112; // never overflows
    }

    // divide a UQ112x112 by a uint112, returning a UQ112x112
    function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) {
        z = x / uint224(y);
    }
}


// File contracts/amm/interfaces/IERC20.sol



pragma solidity >=0.5.0;

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

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

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


// File contracts/amm/interfaces/IStellaSwapV2Callee.sol



pragma solidity >=0.5.0;

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


// File contracts/amm/StellaSwapV2Pair.sol



pragma solidity =0.6.12;






interface IMigrator {
    // Return the desired amount of liquidity token that the migrator wants.
    function desiredLiquidity() external view returns (uint256);
}

contract StellaSwapV2Pair is StellaSwapV2ERC20 {
    using SafeMathStellaSwap  for uint;
    using UQ112x112 for uint224;

    uint public constant MINIMUM_LIQUIDITY = 10**3;
    bytes4 private constant SELECTOR = bytes4(keccak256(bytes('transfer(address,uint256)')));

    address public factory;
    address public token0;
    address public token1;

    uint112 private reserve0;           // uses single storage slot, accessible via getReserves
    uint112 private reserve1;           // uses single storage slot, accessible via getReserves
    uint32  private blockTimestampLast; // uses single storage slot, accessible via getReserves

    uint public price0CumulativeLast;
    uint public price1CumulativeLast;
    uint public kLast; // reserve0 * reserve1, as of immediately after the most recent liquidity event

    uint32 public swapFee = 25; // uses 0.25% default
    uint32 public devFee = 5; // uses 0.05% default from swap fee

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

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

    // 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), 'StellaSwapV2: 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/5th of the growth in sqrt(k)
    function _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) {
        address feeTo = IStellaSwapV2Factory(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(devFee).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 = IERC20StellaSwap(token0).balanceOf(address(this));
        uint balance1 = IERC20StellaSwap(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) {
            address migrator = IStellaSwapV2Factory(factory).migrator();
            if (msg.sender == migrator) {
                liquidity = IMigrator(migrator).desiredLiquidity();
                require(liquidity > 0 && liquidity != uint256(-1), "Bad desired liquidity");
            } else {
                require(migrator == address(0), "Must not have migrator");
                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, 'StellaSwapV2: 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 = IERC20StellaSwap(_token0).balanceOf(address(this));
        uint balance1 = IERC20StellaSwap(_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, 'StellaSwapV2: INSUFFICIENT_LIQUIDITY_BURNED');
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20StellaSwap(_token0).balanceOf(address(this));
        balance1 = IERC20StellaSwap(_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, 'StellaSwapV2: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'StellaSwapV2: 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, 'StellaSwapV2: 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) IStellaSwapV2Callee(to).stellaswapV2Call(msg.sender, amount0Out, amount1Out, data);
        balance0 = IERC20StellaSwap(_token0).balanceOf(address(this));
        balance1 = IERC20StellaSwap(_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, 'StellaSwapV2: INSUFFICIENT_INPUT_AMOUNT');
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
        uint _swapFee = swapFee;
        uint balance0Adjusted = balance0.mul(10000).sub(amount0In.mul(_swapFee));
        uint balance1Adjusted = balance1.mul(10000).sub(amount1In.mul(_swapFee));

        require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(10000**2), 'StellaSwapV2: 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, IERC20StellaSwap(_token0).balanceOf(address(this)).sub(reserve0));
        _safeTransfer(_token1, to, IERC20StellaSwap(_token1).balanceOf(address(this)).sub(reserve1));
    }

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

Contract ABI

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

60806040526019600c60006101000a81548163ffffffff021916908363ffffffff1602179055506005600c60046101000a81548163ffffffff021916908363ffffffff1602179055506001600d5534801561005957600080fd5b5060004690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600981526020017f5374656c6c61204c500000000000000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001208330604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050604051602081830303815290604052805190602001206003819055505033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061403d806101ab6000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80636827e7641161010f578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610955578063d6d788c3146109ee578063dd62ed3e14610a22578063fff6cae914610a9a576101e5565b8063ba9a7a561461088b578063bc25cf77146108a9578063c45a0155146108ed578063d21220a714610921576101e5565b80637ecebe00116100de5780637ecebe00146106ed57806389afcb441461074557806395d89b41146107a4578063a9059cbb14610827576101e5565b80636827e764146105fb5780636a6278421461061f57806370a08231146106775780637464fc3d146106cf576101e5565b806323b872dd11610187578063485cc95511610156578063485cc9551461053757806354cf2aeb1461059b5780635909c0d5146105bf5780635a3d5493146105dd576101e5565b806323b872dd1461045657806330adf81f146104da578063313ce567146104f85780633644e51514610519576101e5565b80630902f1ac116101c35780630902f1ac1461034e578063095ea7b3146103a05780630dfe16811461040457806318160ddd14610438576101e5565b8063022c0d9f146101ea57806303c150b01461029757806306fdde03146102cb575b600080fd5b6102956004803603608081101561020057600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561025157600080fd5b82018360208201111561026357600080fd5b8035906020019184600183028401116401000000008311171561028557600080fd5b9091929391929390505050610aa4565b005b6102c9600480360360208110156102ad57600080fd5b81019080803563ffffffff16906020019092919050505061126c565b005b6102d361144d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103135780820151818401526020810190506102f8565b50505050905090810190601f1680156103405780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610356611486565b60405180846dffffffffffffffffffffffffffff168152602001836dffffffffffffffffffffffffffff1681526020018263ffffffff168152602001935050505060405180910390f35b6103ec600480360360408110156103b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e3565b60405180821515815260200191505060405180910390f35b61040c6114fa565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610440611520565b6040518082815260200191505060405180910390f35b6104c26004803603606081101561046c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611526565b60405180821515815260200191505060405180910390f35b6104e26116f1565b6040518082815260200191505060405180910390f35b610500611718565b604051808260ff16815260200191505060405180910390f35b61052161171d565b6040518082815260200191505060405180910390f35b6105996004803603604081101561054d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611723565b005b6105a361186c565b604051808263ffffffff16815260200191505060405180910390f35b6105c7611882565b6040518082815260200191505060405180910390f35b6105e5611888565b6040518082815260200191505060405180910390f35b61060361188e565b604051808263ffffffff16815260200191505060405180910390f35b6106616004803603602081101561063557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118a4565b6040518082815260200191505060405180910390f35b6106b96004803603602081101561068d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fd2565b6040518082815260200191505060405180910390f35b6106d7611fea565b6040518082815260200191505060405180910390f35b61072f6004803603602081101561070357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ff0565b6040518082815260200191505060405180910390f35b6107876004803603602081101561075b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612008565b604051808381526020018281526020019250505060405180910390f35b6107ac61259d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107ec5780820151818401526020810190506107d1565b50505050905090810190601f1680156108195780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108736004803603604081101561083d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506125d6565b60405180821515815260200191505060405180910390f35b6108936125ed565b6040518082815260200191505060405180910390f35b6108eb600480360360208110156108bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125f3565b005b6108f56128a2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109296128c8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109ec600480360360e081101561096b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506128ee565b005b610a2060048036036020811015610a0457600080fd5b81019080803563ffffffff169060200190929190505050612c03565b005b610a8460048036036040811015610a3857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612de4565b6040518082815260200191505060405180910390f35b610aa2612e09565b005b6001600d5414610b1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5374656c6c615377617056323a204c4f434b454400000000000000000000000081525060200191505060405180910390fd5b6000600d819055506000851180610b335750600084115b610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613f3f6028913960400191505060405180910390fd5b600080610b93611486565b5091509150816dffffffffffffffffffffffffffff1687108015610bc65750806dffffffffffffffffffffffffffff1686105b610c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613f676024913960400191505060405180910390fd5b6000806000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614158015610cd457508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b610d46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f5374656c6c615377617056323a20494e56414c49445f544f000000000000000081525060200191505060405180910390fd5b60008b1115610d5b57610d5a828a8d61305d565b5b60008a1115610d7057610d6f818a8c61305d565b5b6000888890501115610e42578873ffffffffffffffffffffffffffffffffffffffff1663d3f7e539338d8d8c8c6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610e2957600080fd5b505af1158015610e3d573d6000803e3d6000fd5b505050505b8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610ea957600080fd5b505afa158015610ebd573d6000803e3d6000fd5b505050506040513d6020811015610ed357600080fd5b810190808051906020019092919050505093508073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610f4d57600080fd5b505afa158015610f61573d6000803e3d6000fd5b505050506040513d6020811015610f7757600080fd5b810190808051906020019092919050505092505050600089856dffffffffffffffffffffffffffff16038311610fae576000610fc4565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff16038311610fe8576000610ffe565b89856dffffffffffffffffffffffffffff160383035b9050600082118061100f5750600081115b611064576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613fb66027913960400191505060405180910390fd5b6000600c60009054906101000a900463ffffffff1663ffffffff16905060006110bc611099838661329490919063ffffffff16565b6110ae6127108961329490919063ffffffff16565b61332990919063ffffffff16565b905060006110f96110d6848661329490919063ffffffff16565b6110eb6127108961329490919063ffffffff16565b61332990919063ffffffff16565b90506111446305f5e1006111368a6dffffffffffffffffffffffffffff168c6dffffffffffffffffffffffffffff1661329490919063ffffffff16565b61329490919063ffffffff16565b611157828461329490919063ffffffff16565b10156111cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5374656c6c615377617056323a204b000000000000000000000000000000000081525060200191505060405180910390fd5b5050506111da848488886133ac565b8873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82284848f8f6040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050505050506001600d819055505050505050565b60008163ffffffff16116112e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5374656c6c615377617056323a206c6f776572207468656e203000000000000081525060200191505060405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f5374656c6c615377617056323a20464f5242494444454e00000000000000000081525060200191505060405180910390fd5b6101f48163ffffffff161115611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f5374656c6c615377617056323a20464f5242494444454e5f464545000000000081525060200191505060405180910390fd5b80600c60046101000a81548163ffffffff021916908363ffffffff16021790555050565b6040518060400160405280600981526020017f5374656c6c61204c50000000000000000000000000000000000000000000000081525081565b6000806000600860009054906101000a90046dffffffffffffffffffffffffffff1692506008600e9054906101000a90046dffffffffffffffffffffffffffff1691506008601c9054906101000a900463ffffffff169050909192565b60006114f033848461370a565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146116db5761165a82600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6116e68484846137f5565b600190509392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b81565b601281565b60035481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f5374656c6c615377617056323a20464f5242494444454e00000000000000000081525060200191505060405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600c60009054906101000a900463ffffffff1681565b60095481565b600a5481565b600c60049054906101000a900463ffffffff1681565b60006001600d541461191e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5374656c6c615377617056323a204c4f434b454400000000000000000000000081525060200191505060405180910390fd5b6000600d81905550600080611931611486565b50915091506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156119c157600080fd5b505afa1580156119d5573d6000803e3d6000fd5b505050506040513d60208110156119eb57600080fd5b810190808051906020019092919050505090506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a8957600080fd5b505afa158015611a9d573d6000803e3d6000fd5b505050506040513d6020811015611ab357600080fd5b810190808051906020019092919050505090506000611aeb856dffffffffffffffffffffffffffff168461332990919063ffffffff16565b90506000611b12856dffffffffffffffffffffffffffff168461332990919063ffffffff16565b90506000611b208787613989565b90506000805490506000811415611e1d576000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637cd07e476040518163ffffffff1660e01b815260040160206040518083038186803b158015611b9b57600080fd5b505afa158015611baf573d6000803e3d6000fd5b505050506040513d6020811015611bc557600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611d36578073ffffffffffffffffffffffffffffffffffffffff166340dc0e376040518163ffffffff1660e01b815260040160206040518083038186803b158015611c5257600080fd5b505afa158015611c66573d6000803e3d6000fd5b505050506040513d6020811015611c7c57600080fd5b8101908080519060200190929190505050995060008a118015611cbf57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8a14155b611d31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4261642064657369726564206c6971756964697479000000000000000000000081525060200191505060405180910390fd5b611e17565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611dd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d757374206e6f742068617665206d69677261746f720000000000000000000081525060200191505060405180910390fd5b611e076103e8611df9611df4878961329490919063ffffffff16565b613b81565b61332990919063ffffffff16565b9950611e1660006103e8613be3565b5b50611e80565b611e7d886dffffffffffffffffffffffffffff16611e44838761329490919063ffffffff16565b81611e4b57fe5b04886dffffffffffffffffffffffffffff16611e70848761329490919063ffffffff16565b81611e7757fe5b04613cfd565b98505b60008911611ed9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613fdd602b913960400191505060405180910390fd5b611ee38a8a613be3565b611eef86868a8a6133ac565b8115611f6757611f606008600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16600860009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1661329490919063ffffffff16565b600b819055505b3373ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f8585604051808381526020018281526020019250505060405180910390a250505050505050506001600d81905550919050565b60016020528060005260406000206000915090505481565b600b5481565b60046020528060005260406000206000915090505481565b6000806001600d5414612083576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5374656c6c615377617056323a204c4f434b454400000000000000000000000081525060200191505060405180910390fd5b6000600d81905550600080612096611486565b50915091506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561215257600080fd5b505afa158015612166573d6000803e3d6000fd5b505050506040513d602081101561217c57600080fd5b8101908080519060200190929190505050905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156121f857600080fd5b505afa15801561220c573d6000803e3d6000fd5b505050506040513d602081101561222257600080fd5b810190808051906020019092919050505090506000600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006122858888613989565b9050600080549050806122a1868561329490919063ffffffff16565b816122a857fe5b049a50806122bf858561329490919063ffffffff16565b816122c657fe5b04995060008b1180156122d9575060008a115b61232e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613f8b602b913960400191505060405180910390fd5b6123383084613d16565b612343878d8d61305d565b61234e868d8c61305d565b8673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156123b557600080fd5b505afa1580156123c9573d6000803e3d6000fd5b505050506040513d60208110156123df57600080fd5b810190808051906020019092919050505094508573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561245957600080fd5b505afa15801561246d573d6000803e3d6000fd5b505050506040513d602081101561248357600080fd5b810190808051906020019092919050505093506124a285858b8b6133ac565b811561251a576125136008600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16600860009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1661329490919063ffffffff16565b600b819055505b8b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d819364968d8d604051808381526020018281526020019250505060405180910390a35050505050505050506001600d81905550915091565b6040518060400160405280600981526020017f5354454c4c41204c50000000000000000000000000000000000000000000000081525081565b60006125e33384846137f5565b6001905092915050565b6103e881565b6001600d541461266b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5374656c6c615377617056323a204c4f434b454400000000000000000000000081525060200191505060405180910390fd5b6000600d819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506127ab82846127a6600860009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561275d57600080fd5b505afa158015612771573d6000803e3d6000fd5b505050506040513d602081101561278757600080fd5b810190808051906020019092919050505061332990919063ffffffff16565b61305d565b61289581846128906008600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561284757600080fd5b505afa15801561285b573d6000803e3d6000fd5b505050506040513d602081101561287157600080fd5b810190808051906020019092919050505061332990919063ffffffff16565b61305d565b50506001600d8190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b42841015612964576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f5374656c6c615377617056323a2045585049524544000000000000000000000081525060200191505060405180910390fd5b60006003547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b898989600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558a604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012060405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612b07573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015612b7b57508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b612bed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5374656c6c615377617056323a20494e56414c49445f5349474e41545552450081525060200191505060405180910390fd5b612bf889898961370a565b505050505050505050565b60008163ffffffff1611612c7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5374656c6c615377617056323a206c6f776572207468656e203000000000000081525060200191505060405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f5374656c6c615377617056323a20464f5242494444454e00000000000000000081525060200191505060405180910390fd5b6103e88163ffffffff161115612dc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f5374656c6c615377617056323a20464f5242494444454e5f464545000000000081525060200191505060405180910390fd5b80600c60006101000a81548163ffffffff021916908363ffffffff16021790555050565b6002602052816000526040600020602052806000526040600020600091509150505481565b6001600d5414612e81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5374656c6c615377617056323a204c4f434b454400000000000000000000000081525060200191505060405180910390fd5b6000600d81905550613053600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612f1557600080fd5b505afa158015612f29573d6000803e3d6000fd5b505050506040513d6020811015612f3f57600080fd5b8101908080519060200190929190505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612fd957600080fd5b505afa158015612fed573d6000803e3d6000fd5b505050506040513d602081101561300357600080fd5b8101908080519060200190929190505050600860009054906101000a90046dffffffffffffffffffffffffffff166008600e9054906101000a90046dffffffffffffffffffffffffffff166133ac565b6001600d81905550565b600060608473ffffffffffffffffffffffffffffffffffffffff166040518060400160405280601981526020017f7472616e7366657228616464726573732c75696e743235362900000000000000815250805190602001208585604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106131745780518252602082019150602081019050602083039250613151565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146131d6576040519150601f19603f3d011682016040523d82523d6000602084013e6131db565b606091505b509150915081801561321b575060008151148061321a575080806020019051602081101561320857600080fd5b81019080805190602001909291905050505b5b61328d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f5374656c6c615377617056323a205452414e534645525f4641494c454400000081525060200191505060405180910390fd5b5050505050565b6000808214806132b157508282838502925082816132ae57fe5b04145b613323576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6d756c2d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b60008282840391508111156133a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff16841115801561341c57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff168311155b61348e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f5374656c6c615377617056323a204f564552464c4f570000000000000000000081525060200191505060405180910390fd5b6000640100000000428161349e57fe5b06905060006008601c9054906101000a900463ffffffff168203905060008163ffffffff161180156134e157506000846dffffffffffffffffffffffffffff1614155b80156134fe57506000836dffffffffffffffffffffffffffff1614155b156135e0578063ffffffff166135438561351786613e30565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16613e5b90919063ffffffff16565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16026009600082825401925050819055508063ffffffff166135b18461358587613e30565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16613e5b90919063ffffffff16565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1602600a600082825401925050819055505b85600860006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550846008600e6101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550816008601c6101000a81548163ffffffff021916908363ffffffff1602179055507f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1600860009054906101000a90046dffffffffffffffffffffffffffff166008600e9054906101000a90046dffffffffffffffffffffffffffff1660405180836dffffffffffffffffffffffffffff168152602001826dffffffffffffffffffffffffffff1681526020019250505060405180910390a1505050505050565b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b61384781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332990919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138dc81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ebb90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156139f457600080fd5b505afa158015613a08573d6000803e3d6000fd5b505050506040513d6020811015613a1e57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141591506000600b5490508215613b675760008114613b62576000613ab6613ab1866dffffffffffffffffffffffffffff16886dffffffffffffffffffffffffffff1661329490919063ffffffff16565b613b81565b90506000613ac383613b81565b905080821115613b5f576000613af6613ae5838561332990919063ffffffff16565b60005461329490919063ffffffff16565b90506000613b3783613b29600c60049054906101000a900463ffffffff1663ffffffff168761329490919063ffffffff16565b613ebb90919063ffffffff16565b90506000818381613b4457fe5b0490506000811115613b5b57613b5a8782613be3565b5b5050505b50505b613b79565b60008114613b78576000600b819055505b5b505092915050565b60006003821115613bd0578190506000600160028481613b9d57fe5b040190505b81811015613bca57809150600281828581613bb957fe5b040181613bc257fe5b049050613ba2565b50613bde565b60008214613bdd57600190505b5b919050565b613bf881600054613ebb90919063ffffffff16565b600081905550613c5081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ebb90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000818310613d0c5781613d0e565b825b905092915050565b613d6881600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332990919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dc08160005461332990919063ffffffff16565b600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60006e010000000000000000000000000000826dffffffffffffffffffffffffffff16029050919050565b6000816dffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681613eb257fe5b04905092915050565b6000828284019150811015613f38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b9291505056fe5374656c6c615377617056323a20494e53554646494349454e545f4f55545055545f414d4f554e545374656c6c615377617056323a20494e53554646494349454e545f4c49515549444954595374656c6c615377617056323a20494e53554646494349454e545f4c49515549444954595f4255524e45445374656c6c615377617056323a20494e53554646494349454e545f494e5055545f414d4f554e545374656c6c615377617056323a20494e53554646494349454e545f4c49515549444954595f4d494e544544a264697066735822122064dc4327e2006ee77e4a3acc162bce7df613ab59d31906adbc43de2dc2e04c7164736f6c634300060c0033

Deployed ByteCode Sourcemap

7714:11006:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16104:1983;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10438:273;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1628:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8862:231;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3679:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8024:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1768:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3981:301;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2060:108;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1726:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1917:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9925:213;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8559:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8375:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8414;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8614:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12706:1665;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1799:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8453:17;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2175:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14483:1509;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1676:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3834:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7845:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18136:354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7995:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8052:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4290:680;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10146:280;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1847:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18539:178;;;:::i;:::-;;16104:1983;8762:1;8750:8;;:13;8742:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8810:1;8799:8;:12;;;;16231:1:::1;16218:10;:14;:32;;;;16249:1;16236:10;:14;16218:32;16210:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16307:17;16326::::0;16348:13:::1;:11;:13::i;:::-;16306:55;;;;;16408:9;16395:22;;:10;:22;:48;;;;;16434:9;16421:22;;:10;:22;16395:48;16387:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16497:13;16521::::0;16611:15:::1;16629:6;;;;;;;;;;;16611:24;;16646:15;16664:6;;;;;;;;;;;16646:24;;16695:7;16689:13;;:2;:13;;;;:30;;;;;16712:7;16706:13;;:2;:13;;;;16689:30;16681:67;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;16776:1;16763:10;:14;16759:58;;;16779:38;16793:7;16802:2;16806:10;16779:13;:38::i;:::-;16759:58;16879:1;16866:10;:14;16862:58;;;16882:38;16896:7;16905:2;16909:10;16882:13;:38::i;:::-;16862:58;16983:1;16969:4;;:11;;:15;16965:103;;;17006:2;16986:40;;;17027:10;17039;17051;17063:4;;16986:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16965:103;17107:7;17090:35;;;17134:4;17090:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;17079:61;;17179:7;17162:35;;;17206:4;17162:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;17151:61;;8822:1;;17234:14;17274:10;17262:9;:22;;;17251:8;:33;:75;;17325:1;17251:75;;;17311:10;17299:9;:22;;;17287:8;:35;17251:75;17234:92;;17337:14;17377:10;17365:9;:22;;;17354:8;:33;:75;;17428:1;17354:75;;;17414:10;17402:9;:22;;;17390:8;:35;17354:75;17337:92;;17460:1;17448:9;:13;:30;;;;17477:1;17465:9;:13;17448:30;17440:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17608:13;17624:7;;;;;;;;;;;17608:23;;;;17642:21;17666:48;17690:23;17704:8;17690:9;:13;;:23;;;;:::i;:::-;17666:19;17679:5;17666:8;:12;;:19;;;;:::i;:::-;:23;;:48;;;;:::i;:::-;17642:72;;17725:21;17749:48;17773:23;17787:8;17773:9;:13;;:23;;;;:::i;:::-;17749:19;17762:5;17749:8;:12;;:19;;;;:::i;:::-;:23;;:48;;;;:::i;:::-;17725:72;;17860:44;17895:8;17860:30;17880:9;17860:30;;17865:9;17860:15;;:19;;:30;;;;:::i;:::-;:34;;:44;;;;:::i;:::-;17818:38;17839:16;17818;:20;;:38;;;;:::i;:::-;:86;;17810:114;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;8822:1;;;17948:49;17956:8;17966;17976:9;17987;17948:7;:49::i;:::-;18076:2;18013:66;;18018:10;18013:66;;;18030:9;18041;18052:10;18064;18013:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8822:1;;;;;;8845::::0;8834:8;:12;;;;16104:1983;;;;;:::o;10438:273::-;10511:1;10501:7;:11;;;10493:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10576:7;;;;;;;;;;;10562:21;;:10;:21;;;10554:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10641:3;10630:7;:14;;;;10622:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10696:7;10687:6;;:16;;;;;;;;;;;;;;;;;;10438:273;:::o;1628:41::-;;;;;;;;;;;;;;;;;;;:::o;8862:231::-;8906:17;8925;8944:26;8995:8;;;;;;;;;;;8983:20;;9026:8;;;;;;;;;;;9014:20;;9067:18;;;;;;;;;;;9045:40;;8862:231;;;:::o;3679:147::-;3743:4;3760:36;3769:10;3781:7;3790:5;3760:8;:36::i;:::-;3814:4;3807:11;;3679:147;;;;:::o;8024:21::-;;;;;;;;;;;;;:::o;1768:24::-;;;;:::o;3981:301::-;4059:4;4116:2;4080:9;:15;4090:4;4080:15;;;;;;;;;;;;;;;:27;4096:10;4080:27;;;;;;;;;;;;;;;;:39;4076:140;;4166:38;4198:5;4166:9;:15;4176:4;4166:15;;;;;;;;;;;;;;;:27;4182:10;4166:27;;;;;;;;;;;;;;;;:31;;:38;;;;:::i;:::-;4136:9;:15;4146:4;4136:15;;;;;;;;;;;;;;;:27;4152:10;4136:27;;;;;;;;;;;;;;;:68;;;;4076:140;4226:26;4236:4;4242:2;4246:5;4226:9;:26::i;:::-;4270:4;4263:11;;3981:301;;;;;:::o;2060:108::-;2102:66;2060:108;;;:::o;1726:35::-;1759:2;1726:35;:::o;1917:31::-;;;;:::o;9925:213::-;10021:7;;;;;;;;;;;10007:21;;:10;:21;;;9999:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10096:7;10087:6;;:16;;;;;;;;;;;;;;;;;;10123:7;10114:6;;:16;;;;;;;;;;;;;;;;;;9925:213;;:::o;8559:26::-;;;;;;;;;;;;;:::o;8375:32::-;;;;:::o;8414:::-;;;;:::o;8614:24::-;;;;;;;;;;;;;:::o;12706:1665::-;12755:14;8762:1;8750:8;;:13;8742:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8810:1;8799:8;:12;;;;12783:17:::1;12802::::0;12824:13:::1;:11;:13::i;:::-;12782:55;;;;;12863:13;12896:6;;;;;;;;;;;12879:34;;;12922:4;12879:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;12863:65;;12939:13;12972:6;;;;;;;;;;;12955:34;;;12998:4;12955:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;12939:65;;13015:12;13030:23;13043:9;13030:23;;:8;:12;;:23;;;;:::i;:::-;13015:38;;13064:12;13079:23;13092:9;13079:23;;:8;:12;;:23;;;;:::i;:::-;13064:38;;13115:10;13128:30;13137:9;13148;13128:8;:30::i;:::-;13115:43;;13169:17;13189:11:::0;::::1;13169:31;;13309:1;13293:12;:17;13289:754;;;13327:16;13367:7;;;;;;;;;;;13346:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;13327:59;;13419:8;13405:22;;:10;:22;;;13401:500;;;13470:8;13460:36;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;13448:50;;13537:1;13525:9;:13;:41;;;;;13563:2;13542:9;:24;;13525:41;13517:75;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;13401:500;;;13661:1;13641:22;;:8;:22;;;13633:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;13721:54;7886:5;13721:31;13731:20;13743:7;13731;:11;;:20;;;;:::i;:::-;13721:9;:31::i;:::-;:35;;:54;;;;:::i;:::-;13709:66;;13794:36;13808:1;7886:5;13794;:36::i;:::-;13401:500;13289:754;;;;13945:86;13982:9;13954:37;;:25;13966:12;13954:7;:11;;:25;;;;:::i;:::-;:37;;;;;;14021:9;13993:37;;:25;14005:12;13993:7;:11;;:25;;;;:::i;:::-;:37;;;;;;13945:8;:86::i;:::-;13933:98;;13289:754;14073:1;14061:9;:13;14053:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14133:20;14139:2;14143:9;14133:5;:20::i;:::-;14166:49;14174:8;14184;14194:9;14205;14166:7;:49::i;:::-;14230:5;14226:47;;;14245:28;14264:8;;;;;;;;;;;14245:28;;14250:8;;;;;;;;;;;14245:14;;:18;;:28;;;;:::i;:::-;14237:5;:36;;;;14226:47;14334:10;14329:34;;;14346:7;14355;14329:34;;;;;;;;;;;;;;;;;;;;;;;;8822:1;;;;;;;;8845::::0;8834:8;:12;;;;12706:1665;;;:::o;1799:41::-;;;;;;;;;;;;;;;;;:::o;8453:17::-;;;;:::o;2175:38::-;;;;;;;;;;;;;;;;;:::o;14483:1509::-;14532:12;14546;8762:1;8750:8;;:13;8742:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8810:1;8799:8;:12;;;;14572:17:::1;14591::::0;14613:13:::1;:11;:13::i;:::-;14571:55;;;;;14652:15;14670:6;;;;;;;;;;;14652:24;;14733:15;14751:6;;;;;;;;;;;14733:24;;14814:13;14847:7;14830:35;;;14874:4;14830:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;14814:66;;14891:13;14924:7;14907:35;;;14951:4;14907:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;14891:66;;14968:14;14985:9;:24;15003:4;14985:24;;;;;;;;;;;;;;;;14968:41;;15022:10;15035:30;15044:9;15055;15035:8;:30::i;:::-;15022:43;;15076:17;15096:11:::0;::::1;15076:31;;15232:12;15206:23;15220:8;15206:9;:13;;:23;;;;:::i;:::-;:38;;;;;;15196:48;;15339:12;15313:23;15327:8;15313:9;:13;;:23;;;;:::i;:::-;:38;;;;;;15303:48;;15428:1;15418:7;:11;:26;;;;;15443:1;15433:7;:11;15418:26;15410:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15503:31;15517:4;15524:9;15503:5;:31::i;:::-;15545:35;15559:7;15568:2;15572:7;15545:13;:35::i;:::-;15591;15605:7;15614:2;15618:7;15591:13;:35::i;:::-;15665:7;15648:35;;;15692:4;15648:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;15637:61;;15737:7;15720:35;;;15764:4;15720:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;15709:61;;15783:49;15791:8;15801;15811:9;15822;15783:7;:49::i;:::-;15847:5;15843:47;;;15862:28;15881:8;;;;;;;;;;;15862:28;;15867:8;;;;;;;;;;;15862:14;;:18;;:28;;;;:::i;:::-;15854:5;:36;;;;15843:47;15981:2;15946:38;;15951:10;15946:38;;;15963:7;15972;15946:38;;;;;;;;;;;;;;;;;;;;;;;;8822:1;;;;;;;;;8845::::0;8834:8;:12;;;;14483:1509;;;:::o;1676:43::-;;;;;;;;;;;;;;;;;;;:::o;3834:139::-;3894:4;3911:32;3921:10;3933:2;3937:5;3911:9;:32::i;:::-;3961:4;3954:11;;3834:139;;;;:::o;7845:46::-;7886:5;7845:46;:::o;18136:354::-;8762:1;8750:8;;:13;8742:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8810:1;8799:8;:12;;;;18187:15:::1;18205:6;;;;;;;;;;;18187:24;;18237:15;18255:6;;;;;;;;;;;18237:24;;18287:92;18301:7;18310:2;18314:64;18369:8;;;;;;;;;;;18314:64;;18331:7;18314:35;;;18358:4;18314:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:54;;:64;;;;:::i;:::-;18287:13;:92::i;:::-;18390;18404:7;18413:2;18417:64;18472:8;;;;;;;;;;;18417:64;;18434:7;18417:35;;;18461:4;18417:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:54;;:64;;;;:::i;:::-;18390:13;:92::i;:::-;8822:1;;8845::::0;8834:8;:12;;;;18136:354;:::o;7995:22::-;;;;;;;;;;;;;:::o;8052:21::-;;;;;;;;;;;;;:::o;4290:680::-;4436:15;4424:8;:27;;4416:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4488:14;4593:16;;2102:66;4649:15;;4666:5;4673:7;4682:5;4689:6;:13;4696:5;4689:13;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;4706:8;4638:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4628:88;;;;;;4529:202;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4505:237;;;;;;4488:254;;4753:24;4780:26;4790:6;4798:1;4801;4804;4780:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4753:53;;4853:1;4825:30;;:16;:30;;;;:59;;;;;4879:5;4859:25;;:16;:25;;;4825:59;4817:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4931:31;4940:5;4947:7;4956:5;4931:8;:31::i;:::-;4290:680;;;;;;;;;:::o;10146:280::-;10222:1;10211:8;:12;;;10203:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10287:7;;;;;;;;;;;10273:21;;:10;:21;;;10265:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10353:4;10341:8;:16;;;;10333:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10410:8;10400:7;;:18;;;;;;;;;;;;;;;;;;10146:280;:::o;1847:61::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18539:178::-;8762:1;8750:8;;:13;8742:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8810:1;8799:8;:12;;;;18580:129:::1;18605:6;;;;;;;;;;;18588:34;;;18631:4;18588:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;18656:6;;;;;;;;;;;18639:34;;;18682:4;18639:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;18690:8;;;;;;;;;;;18700;;;;;;;;;;;18580:7;:129::i;:::-;8845:1:::0;8834:8;:12;;;;18539:178::o;9101:290::-;9183:12;9197:17;9218:5;:10;;7950:34;;;;;;;;;;;;;;;;;7940:45;;;;;;9262:2;9266:5;9229:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9218:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9182:91;;;;9292:7;:57;;;;;9319:1;9304:4;:11;:16;:44;;;;9335:4;9324:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9304:44;9292:57;9284:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9101:290;;;;;:::o;1322:142::-;1374:6;1406:1;1401;:6;:30;;;;1430:1;1425;1420;1416;:5;1412:9;;;1411:15;;;;;;:20;1401:30;1393:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1322:142;;;;:::o;1185:129::-;1237:6;1279:1;1273;1269;:5;1265:9;;;1264:16;;1256:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1185:129;;;;:::o;10796:863::-;10928:2;10908:23;;:8;:23;;:50;;;;;10955:2;10935:23;;:8;:23;;10908:50;10900:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10996:21;11045:5;11027:15;:23;;;;;;10996:55;;11062:18;11100;;;;;;;;;;;11083:14;:35;11062:56;;11170:1;11156:11;:15;;;:33;;;;;11188:1;11175:9;:14;;;;11156:33;:51;;;;;11206:1;11193:9;:14;;;;11156:51;11152:336;;;11362:11;11309:64;;11314:44;11348:9;11314:27;11331:9;11314:16;:27::i;:::-;:33;;;;:44;;;;:::i;:::-;11309:50;;:64;11285:20;;:88;;;;;;;;;;;11465:11;11412:64;;11417:44;11451:9;11417:27;11434:9;11417:16;:27::i;:::-;:33;;;;:44;;;;:::i;:::-;11412:50;;:64;11388:20;;:88;;;;;;;;;;;11152:336;11517:8;11498;;:28;;;;;;;;;;;;;;;;;;11556:8;11537;;:28;;;;;;;;;;;;;;;;;;11597:14;11576:18;;:35;;;;;;;;;;;;;;;;;;11627:24;11632:8;;;;;;;;;;;11642;;;;;;;;;;;11627:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;10796:863;;;;;;:::o;3274:169::-;3383:5;3355:9;:16;3365:5;3355:16;;;;;;;;;;;;;;;:25;3372:7;3355:25;;;;;;;;;;;;;;;:33;;;;3420:7;3404:31;;3413:5;3404:31;;;3429:5;3404:31;;;;;;;;;;;;;;;;;;3274:169;;;:::o;3451:220::-;3545:26;3565:5;3545:9;:15;3555:4;3545:15;;;;;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;3527:9;:15;3537:4;3527:15;;;;;;;;;;;;;;;:44;;;;3598:24;3616:5;3598:9;:13;3608:2;3598:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;3582:9;:13;3592:2;3582:13;;;;;;;;;;;;;;;:40;;;;3653:2;3638:25;;3647:4;3638:25;;;3657:5;3638:25;;;;;;;;;;;;;;;;;;3451:220;;;:::o;11749:845::-;11822:10;11845:13;11882:7;;;;;;;;;;;11861:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11845:53;;11934:1;11917:19;;:5;:19;;;;11909:27;;11947:11;11961:5;;11947:19;;11996:5;11992:595;;;12032:1;12022:6;:11;12018:499;;12054:10;12067:41;12077:30;12097:9;12077:30;;12082:9;12077:15;;:19;;:30;;;;:::i;:::-;12067:9;:41::i;:::-;12054:54;;12127:14;12144:17;12154:6;12144:9;:17::i;:::-;12127:34;;12192:9;12184:5;:17;12180:322;;;12226:14;12243:37;12259:20;12269:9;12259:5;:9;;:20;;;;:::i;:::-;12243:11;;:15;;:37;;;;:::i;:::-;12226:54;;12303:16;12322:32;12344:9;12322:17;12332:6;;;;;;;;;;;12322:17;;:5;:9;;:17;;;;:::i;:::-;:21;;:32;;;;:::i;:::-;12303:51;;12377:14;12406:11;12394:9;:23;;;;;;12377:40;;12456:1;12444:9;:13;12440:42;;;12459:23;12465:5;12472:9;12459:5;:23::i;:::-;12440:42;12180:322;;;;12018:499;;;11992:595;;;12548:1;12538:6;:11;12534:53;;12574:1;12566:5;:9;;;;12534:53;11992:595;11749:845;;;;;;:::o;5344:303::-;5389:6;5416:1;5412;:5;5408:232;;;5438:1;5434:5;;5454:6;5471:1;5467;5463;:5;;;;;;:9;5454:18;;5487:92;5498:1;5494;:5;5487:92;;;5524:1;5520:5;;5562:1;5557;5553;5549;:5;;;;;;:9;5548:15;;;;;;5544:19;;5487:92;;;5408:232;;;;5605:1;5600;:6;5596:44;;5627:1;5623:5;;5596:44;5408:232;5344:303;;;:::o;2848:201::-;2921:22;2937:5;2921:11;;:15;;:22;;;;:::i;:::-;2907:11;:36;;;;2970:24;2988:5;2970:9;:13;2980:2;2970:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;2954:9;:13;2964:2;2954:13;;;;;;;;;;;;;;;:40;;;;3031:2;3010:31;;3027:1;3010:31;;;3035:5;3010:31;;;;;;;;;;;;;;;;;;2848:201;;:::o;5130:96::-;5182:6;5209:1;5205;:5;:13;;5217:1;5205:13;;;5213:1;5205:13;5201:17;;5130:96;;;;:::o;3057:209::-;3136:26;3156:5;3136:9;:15;3146:4;3136:15;;;;;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;3118:9;:15;3128:4;3118:15;;;;;;;;;;;;;;;:44;;;;3187:22;3203:5;3187:11;;:15;;:22;;;;:::i;:::-;3173:11;:36;;;;3248:1;3225:33;;3234:4;3225:33;;;3252:5;3225:33;;;;;;;;;;;;;;;;;;3057:209;;:::o;6003:120::-;6053:9;5948:6;6087:1;6079:10;;:17;6075:21;;6003:120;;;:::o;6194:108::-;6254:9;6292:1;6284:10;;6280:14;;:1;:14;;;;;;;;6276:18;;6194:108;;;;:::o;1049:128::-;1101:6;1143:1;1137;1133;:5;1129:9;;;1128:16;;1120:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1049:128;;;;:::o

Swarm Source

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