ETH Price: $2,063.59 (+0.08%)
 

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Approve218710152024-11-02 7:09:37495 days ago1730531377IN
0xE937dd36...EE0D12BF5
0 ETH0.00000010.00364122
Approve173239902024-07-20 1:02:07600 days ago1721437327IN
0xE937dd36...EE0D12BF5
0 ETH0.000005380.11417631
Transfer166639192024-07-04 18:19:45616 days ago1720117185IN
0xE937dd36...EE0D12BF5
0 ETH0.000000480.00594228
Approve164847582024-06-30 14:47:43620 days ago1719758863IN
0xE937dd36...EE0D12BF5
0 ETH0.000001010.02139454
Approve162071352024-06-24 4:33:37626 days ago1719203617IN
0xE937dd36...EE0D12BF5
0 ETH0.000000120.00242841
Approve160633472024-06-20 20:40:41630 days ago1718916041IN
0xE937dd36...EE0D12BF5
0 ETH0.000000570.00119261
Approve157676622024-06-14 0:24:31636 days ago1718324671IN
0xE937dd36...EE0D12BF5
0 ETH0.000001060.02221321
Transfer157675602024-06-14 0:21:07636 days ago1718324467IN
0xE937dd36...EE0D12BF5
0 ETH0.000400035.01993429
Transfer157090702024-06-12 15:51:27638 days ago1718207487IN
0xE937dd36...EE0D12BF5
0 ETH0.000002370.03122392
Transfer156732422024-06-11 19:57:11639 days ago1718135831IN
0xE937dd36...EE0D12BF5
0 ETH0.000000810.01061674
Transfer156720412024-06-11 19:17:09639 days ago1718133429IN
0xE937dd36...EE0D12BF5
0 ETH0.000000950.01245604
Approve155846502024-06-09 18:44:07641 days ago1717958647IN
0xE937dd36...EE0D12BF5
0 ETH0.000000120.0023031
Approve155215222024-06-08 7:39:51642 days ago1717832391IN
0xE937dd36...EE0D12BF5
0 ETH0.00000010.00185565
Transfer155102392024-06-08 1:23:45642 days ago1717809825IN
0xE937dd36...EE0D12BF5
0 ETH0.000000230.00299614
Approve155025872024-06-07 21:08:41643 days ago1717794521IN
0xE937dd36...EE0D12BF5
0 ETH0.000000210.00385138
Approve154333802024-06-06 6:41:47644 days ago1717656107IN
0xE937dd36...EE0D12BF5
0 ETH0.000000140.00255618
Approve154332192024-06-06 6:36:25644 days ago1717655785IN
0xE937dd36...EE0D12BF5
0 ETH0.000000150.00256766
Transfer154179472024-06-05 22:07:21645 days ago1717625241IN
0xE937dd36...EE0D12BF5
0 ETH0.000000820.014
Transfer154179192024-06-05 22:06:25645 days ago1717625185IN
0xE937dd36...EE0D12BF5
0 ETH0.000000760.01214879
Transfer154179062024-06-05 22:05:59645 days ago1717625159IN
0xE937dd36...EE0D12BF5
0 ETH0.000001080.0137
Approve152925132024-06-03 0:26:13647 days ago1717374373IN
0xE937dd36...EE0D12BF5
0 ETH0.000000170.00305187
Transfer152924942024-06-03 0:25:35647 days ago1717374335IN
0xE937dd36...EE0D12BF5
0 ETH0.000000260.00302363
Approve152913522024-06-02 23:47:31647 days ago1717372051IN
0xE937dd36...EE0D12BF5
0 ETH0.00000010.00178549
Transfer152909202024-06-02 23:33:07647 days ago1717371187IN
0xE937dd36...EE0D12BF5
0 ETH0.000000080.00131422
Transfer152908972024-06-02 23:32:21647 days ago1717371141IN
0xE937dd36...EE0D12BF5
0 ETH0.000000080.0013204
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
207454302024-10-07 5:50:07521 days ago1728280207
0xE937dd36...EE0D12BF5
0.00001667 ETH
207454182024-10-07 5:49:43521 days ago1728280183
0xE937dd36...EE0D12BF5
0.00002399 ETH
207454072024-10-07 5:49:21521 days ago1728280161
0xE937dd36...EE0D12BF5
0.00701564 ETH
182142452024-08-09 15:37:17580 days ago1723217837
0xE937dd36...EE0D12BF5
0.00801397 ETH
182142372024-08-09 15:37:01580 days ago1723217821
0xE937dd36...EE0D12BF5
0.01033751 ETH
182142372024-08-09 15:37:01580 days ago1723217821
0xE937dd36...EE0D12BF5
0.00001342 ETH
173690442024-07-21 2:03:55599 days ago1721527435
0xE937dd36...EE0D12BF5
0.00001608 ETH
173690282024-07-21 2:03:23599 days ago1721527403
0xE937dd36...EE0D12BF5
0.01780193 ETH
173690282024-07-21 2:03:23599 days ago1721527403
0xE937dd36...EE0D12BF5
0.00373269 ETH
173239972024-07-20 1:02:21600 days ago1721437341
0xE937dd36...EE0D12BF5
0.02799 ETH
173239972024-07-20 1:02:21600 days ago1721437341
0xE937dd36...EE0D12BF5
0.0000127 ETH
164847612024-06-30 14:47:49620 days ago1719758869
0xE937dd36...EE0D12BF5
0.04824941 ETH
164847612024-06-30 14:47:49620 days ago1719758869
0xE937dd36...EE0D12BF5
0.01706653 ETH
162071822024-06-24 4:35:11626 days ago1719203711
0xE937dd36...EE0D12BF5
0.0000442 ETH
159876452024-06-19 2:37:17631 days ago1718764637
0xE937dd36...EE0D12BF5
0.00004425 ETH
159876322024-06-19 2:36:51631 days ago1718764611
0xE937dd36...EE0D12BF5
0.0000443 ETH
159876242024-06-19 2:36:35631 days ago1718764595
0xE937dd36...EE0D12BF5
0.00004435 ETH
159876202024-06-19 2:36:27631 days ago1718764587
0xE937dd36...EE0D12BF5
0.0000444 ETH
159876132024-06-19 2:36:13631 days ago1718764573
0xE937dd36...EE0D12BF5
0.00004445 ETH
159876082024-06-19 2:36:03631 days ago1718764563
0xE937dd36...EE0D12BF5
0.0000445 ETH
159875982024-06-19 2:35:43631 days ago1718764543
0xE937dd36...EE0D12BF5
0.00004455 ETH
159875942024-06-19 2:35:35631 days ago1718764535
0xE937dd36...EE0D12BF5
0.00004461 ETH
159875882024-06-19 2:35:23631 days ago1718764523
0xE937dd36...EE0D12BF5
0.00004466 ETH
159875812024-06-19 2:35:09631 days ago1718764509
0xE937dd36...EE0D12BF5
0.00004471 ETH
159875752024-06-19 2:34:57631 days ago1718764497
0xE937dd36...EE0D12BF5
0.00004476 ETH
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VacuumToken

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2024-05-23
*/

/**
       ___      ___ ________  ________  ___  ___  ___  ___  _____ ______      
   |\  \    /  /|\   __  \|\   ____\|\  \|\  \|\  \|\  \|\   _ \  _   \    
   \ \  \  /  / | \  \|\  \ \  \___|\ \  \\\  \ \  \\\  \ \  \\\__\ \  \   
    \ \  \/  / / \ \   __  \ \  \    \ \  \\\  \ \  \\\  \ \  \\|__| \  \  
     \ \    / /   \ \  \ \  \ \  \____\ \  \\\  \ \  \\\  \ \  \    \ \  \ 
      \ \__/ /     \ \__\ \__\ \_______\ \_______\ \_______\ \__\    \ \__\
       \|__|/       \|__|\|__|\|_______|\|_______|\|_______|\|__|     \|__|
                                                                        
                                                                        
                                                                        
   # Linear taxes from 3% to 30%. All tax proceeds go towards the Black Hole, Negative Entropy keeps the token alive, forever.
   # Twitter: https://x.com/Vacu_Fi
   # Telegram: https://t.me/Vacu_Fi
   # Warpcast: https://warpcast.com/vacufi
   # Whitepaper: https://vacufi.gitbook.io/vacufi
 */

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IBEP20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount)
        external
        returns (bool);
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}
contract Owner {

    address private owner;
    
    // event for EVM logging
    event OwnerSet(address indexed newOwner);
    
    // modifier to check if caller is owner
    modifier onlyOwner() {
        // If the first argument of 'require' evaluates to 'false', execution terminates and all
        // changes to the state and to Ether balances are reverted.
        // This used to consume all gas in old EVM versions, but not anymore.
        // It is often a good idea to use 'require' to check if functions are called correctly.
        // As a second argument, you can also provide an explanation about what went wrong.
        require(msg.sender == getOwner(), "Caller is not owner");
        _;
    }
    
    /**
     * @dev Set contract deployer as owner
     */
    constructor() {
        owner = msg.sender; // 'msg.sender' is sender of current call, contract deployer for a constructor
        emit OwnerSet(owner);
    }

    /**
     * @dev Change owner
     * @param newOwner address of new owner
     */
    function changeOwner(address newOwner) public onlyOwner {
        owner = newOwner;
        
        emit OwnerSet(newOwner);

    }

    /**
     * @dev Return owner address 
     * @return address of owner
     */
    function getOwner() internal view returns (address) {
            return owner; 
    }
    
    function getOwnerExternal() public view returns (address) {
        return getOwner();
    }
}

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

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

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

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

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

interface IUniswapV2Pair {
    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 IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}


interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract VacuumToken is IBEP20, Owner {

    address WETH = 0x4200000000000000000000000000000000000006;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string _name = "Vacuum";
    string constant _symbol = "VACU";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 10**9 * (10 ** _decimals);

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    
    uint256 private constant LOWER_BOUND = 50;   // equivalent to 0.00005 or 0.005%
    uint256 private constant UPPER_BOUND = 5000; // equivalent to 0.005 or 0.5%
    uint256 private constant LOWER_TAX_RATE = 300; // equivalent to 3%
    uint256 private constant UPPER_TAX_RATE = 3000; // equivalent to 30%
    uint256 private constant INITIAL_TAX_MULTIPLIER = 3;
    uint256 public negentropyThreshold = 23 hours;
    uint256 public totalVolumeForNegentropy = 0;
    uint256 public lastEpoch = 0;
    uint256 public taxMultiplierTimestamp = 0;
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    address routerAddress = 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24;


    bool inSwap;
    modifier swapping() { 
        inSwap = true; 
        _; 
        inSwap = false; 
        
    }
    
    event BasicTransfer(address sender, address recipient, uint256 amount);
    event SwapVacuumForETH(uint256 vacuumSwapped, uint256 WETHReceived);
    event SwapETHForVacuum(uint256 amount);
    event TotalVolumeIncreased(address sender, address recipient, uint256 amount);

    constructor () {
        
        uniswapV2Router = IUniswapV2Router02(routerAddress);
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6)
            .createPair(address(this), uniswapV2Router.WETH());

        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;
        WETH = uniswapV2Router.WETH();


        approve(routerAddress, _totalSupply);
        approve(address(uniswapV2Pair), _totalSupply);
        _balances[msg.sender] = _totalSupply;
        taxMultiplierTimestamp = block.timestamp;
        lastEpoch = block.timestamp;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) {
        return _totalSupply; 
        
    }
    
    function decimals() external pure override returns (uint8) {
        return _decimals; 
    }
    
    function symbol() external pure override returns (string memory) { 
        return _symbol;
    }
    
    function name() external view override returns (string memory) {
        return _name;
    }
    
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }
    
    function allowance(address holder, address spender) external view override returns (uint256) {
        return _allowances[holder][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, _totalSupply);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != _totalSupply){
            require(_allowances[sender][msg.sender] >= amount, "Insufficient Allowance");
            _allowances[sender][msg.sender] -= amount;
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(balanceOf(sender) >= amount, "Insufficient balance");
        
        if(txCountForVolume(sender, recipient)) {
            totalVolumeForNegentropy += amount;
            emit TotalVolumeIncreased(sender, recipient, amount);
        }

        if (inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }


        if(shouldSwapVacuumForWETH(recipient)) {
            swapVacuumForETH();
        }

        if(shouldSwapWETHForVacuum(recipient)) {
            negentropy();
        }
        
        if(block.timestamp - lastEpoch >= negentropyThreshold && recipient == uniswapV2Pair) {
            // Start a new epoch if the negentropy function hasn't been called after a sell at the end of the timer meaning the threshold volume has been reached
            lastEpoch = block.timestamp;
            totalVolumeForNegentropy = 0;
        }

        uint256 taxedAmount = shouldTakeFee(sender, recipient) ? takeFee(sender, amount) : amount;
        
        _balances[sender] -= amount;
        _balances[recipient] += taxedAmount;

        emit Transfer(sender, recipient, taxedAmount);
        
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] -= amount;
        _balances[recipient] += amount;
        
        emit BasicTransfer(sender, recipient, amount);
        return true;
    }

    function txCountForVolume(address sender, address recipient) internal view returns (bool) {
        return (sender == uniswapV2Pair || recipient == uniswapV2Pair) && sender != getOwner() && recipient != getOwner() && recipient != DEAD && recipient != ZERO;
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return sender != getOwner() && recipient != getOwner() && (sender == uniswapV2Pair || recipient == uniswapV2Pair) && (recipient != DEAD && recipient != ZERO && sender != address(this) && recipient != address(this));
    }

    function takeFee(address sender, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = calculateTax(amount);
        _balances[address(this)] += feeAmount;
        emit Transfer(sender, address(this), feeAmount);

        return amount - feeAmount;
    }

    function calculateTax(uint256 amount) internal view returns (uint256) {
        uint256 tax = getTax(amount);
        uint256 multiplier = getMultiplier();
        uint256 taxedAmount = amount * (tax * multiplier) / 10000;
        return taxedAmount;
    }

    function getMultiplier() internal view returns (uint256) {
        uint256 elapsedTime = block.timestamp - taxMultiplierTimestamp;
        if(elapsedTime < 20 minutes) { 
            return INITIAL_TAX_MULTIPLIER;
        } else {
            return 1;
        }
    }
    // Function to calculate tax based on transaction size and circulating supply
    function getTax(uint256 transactionSize) internal view returns (uint256) {
        
        uint256 circulatingSupply = getCirculatingSupply();
        if(circulatingSupply == 0) return 0; // Prevent division by zero
        uint256 lowerTaxRateThreshold = circulatingSupply * 5 / 100000; // 0.005%
        uint256 upperTaxRateThreshold = circulatingSupply * 500 / 100000; // 0.5%
        if(transactionSize <= lowerTaxRateThreshold) {
            return LOWER_TAX_RATE;
        } else if(transactionSize >= upperTaxRateThreshold) {
            return UPPER_TAX_RATE;
        } else {
            // Linear interpolation between points:
            // Correcting calculation for slope using accurate range difference calculations:
            uint256 taxRate = ((transactionSize - lowerTaxRateThreshold) * (UPPER_TAX_RATE - LOWER_TAX_RATE) / (upperTaxRateThreshold - lowerTaxRateThreshold)) + LOWER_TAX_RATE;
            return taxRate;
        }
    }

    function negentropy() internal  {
        lastEpoch = block.timestamp;
        negentropyThreshold = getRandomHours() * 1 hours;
        totalVolumeForNegentropy = 0;
        uint256 wethBalance = address(this).balance;
        if(wethBalance > 0) {
            uint256 amountToSwap = wethBalance * 42 / 100;
            swapETHForVacuum(amountToSwap);
        }
    }

    function shouldSwapVacuumForWETH(address recipient) internal view returns (bool) {
        // Only swap during a sell
        return !inSwap
            && msg.sender != uniswapV2Pair
            && recipient == uniswapV2Pair
            && balanceOf(address(this)) > 0;
    }

    function shouldSwapWETHForVacuum(address recipient) internal view returns (bool) {
        // Only swap during a sell
        uint256 circulatingSupply = getCirculatingSupply();
        uint256 meaningfulThreshold = circulatingSupply / 100; // 1%
        bool thresholdNotReached = totalVolumeForNegentropy < meaningfulThreshold;
        return thresholdNotReached
            && block.timestamp - lastEpoch >= negentropyThreshold
            && msg.sender != uniswapV2Pair
            && recipient == uniswapV2Pair
            && address(this).balance > 0;
    }

    function swapVacuumForETH() internal swapping {
        
        uint256 amountToSwap = balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 ETHBalance = address(this).balance;
        
        emit SwapVacuumForETH(amountToSwap, ETHBalance);
        
    }
    
    function swapETHForVacuum(uint256 wETHAmount) internal {

        uint256 previousVacuumAmount = balanceOf(address(this));
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(this);

        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: wETHAmount}(
            0,
            path,
            DEAD, // The tokens are sent to the DEAD address
            block.timestamp
        );
        
        
        uint256 amountSwapped = balanceOf(address(this)) - previousVacuumAmount;
        
        emit SwapETHForVacuum(amountSwapped);
    }

    function getRandomHours() internal view returns (uint256) {
        uint256 randomValue = uint256(keccak256(abi.encodePacked(block.timestamp, block.difficulty))) % 4;
        return 22 + randomValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - balanceOf(DEAD) - balanceOf(ZERO);
    }

    function launch() public onlyOwner {
        taxMultiplierTimestamp = block.timestamp;
    }
}

Contract Security Audit

Contract ABI

API
[{"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":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BasicTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapETHForVacuum","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"vacuumSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"WETHReceived","type":"uint256"}],"name":"SwapVacuumForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TotalVolumeIncreased","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":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwnerExternal","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"negentropyThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxMultiplierTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalVolumeForNegentropy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273420000000000000000000000000000000000000660015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600681526020017f56616375756d00000000000000000000000000000000000000000000000000008152506004908161011e91906109c9565b506009600a61012d9190610c00565b633b9aca0061013c9190610c4a565b600555620143706008555f6009555f600a555f600b55734752ba5dbc23f44d87826276bf6fd6b1c372ad24600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156101b1575f80fd5b50335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f50146d0e3c60aa1d17a70635b05494f864e86144a2201275021014fbf08bafe260405160405180910390a2600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550738909dc15e40173ff4699343b6eb8132c65e18ec673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561034f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103739190610ce9565b6040518363ffffffff1660e01b8152600401610390929190610d23565b6020604051808303815f875af11580156103ac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103d09190610ce9565b600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060055460075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610519573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061053d9190610ce9565b60015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506105af600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005546106a260201b60201c565b506105e3600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005546106a260201b60201c565b5060055460065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555042600b8190555042600a819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6005546040516106959190610d59565b60405180910390a3610d72565b5f8160075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161077d9190610d59565b60405180910390a36001905092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061080a57607f821691505b60208210810361081d5761081c6107c6565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261087f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610844565b6108898683610844565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6108cd6108c86108c3846108a1565b6108aa565b6108a1565b9050919050565b5f819050919050565b6108e6836108b3565b6108fa6108f2826108d4565b848454610850565b825550505050565b5f90565b61090e610902565b6109198184846108dd565b505050565b5b8181101561093c576109315f82610906565b60018101905061091f565b5050565b601f8211156109815761095281610823565b61095b84610835565b8101602085101561096a578190505b61097e61097685610835565b83018261091e565b50505b505050565b5f82821c905092915050565b5f6109a15f1984600802610986565b1980831691505092915050565b5f6109b98383610992565b9150826002028217905092915050565b6109d28261078f565b67ffffffffffffffff8111156109eb576109ea610799565b5b6109f582546107f3565b610a00828285610940565b5f60209050601f831160018114610a31575f8415610a1f578287015190505b610a2985826109ae565b865550610a90565b601f198416610a3f86610823565b5f5b82811015610a6657848901518255600182019150602085019450602081019050610a41565b86831015610a835784890151610a7f601f891682610992565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115610b1a57808604811115610af657610af5610a98565b5b6001851615610b055780820291505b8081029050610b1385610ac5565b9450610ada565b94509492505050565b5f82610b325760019050610bed565b81610b3f575f9050610bed565b8160018114610b555760028114610b5f57610b8e565b6001915050610bed565b60ff841115610b7157610b70610a98565b5b8360020a915084821115610b8857610b87610a98565b5b50610bed565b5060208310610133831016604e8410600b8410161715610bc35782820a905083811115610bbe57610bbd610a98565b5b610bed565b610bd08484846001610ad1565b92509050818404811115610be757610be6610a98565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610c0a826108a1565b9150610c1583610bf4565b9250610c427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610b23565b905092915050565b5f610c54826108a1565b9150610c5f836108a1565b9250828202610c6d816108a1565b91508282048414831517610c8457610c83610a98565b5b5092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610cb882610c8f565b9050919050565b610cc881610cae565b8114610cd2575f80fd5b50565b5f81519050610ce381610cbf565b92915050565b5f60208284031215610cfe57610cfd610c8b565b5b5f610d0b84828501610cd5565b91505092915050565b610d1d81610cae565b82525050565b5f604082019050610d365f830185610d14565b610d436020830184610d14565b9392505050565b610d53816108a1565b82525050565b5f602082019050610d6c5f830184610d4a565b92915050565b6125b780610d7f5f395ff3fe608060405260043610610122575f3560e01c806331d2716f1161009f57806370a082311161006357806370a08231146103c557806395d89b4114610401578063a6f9dae11461042b578063a9059cbb14610453578063dd62ed3e1461048f57610129565b806331d2716f146102e157806349bd5a5e1461030b5780634b402c5214610335578063512afb3a1461035f578063571ac8b01461038957610129565b80631694505e116100e65780631694505e146101fd57806318160ddd1461022757806323b872dd146102515780632b112e491461028d578063313ce567146102b757610129565b806301339c211461012d57806306a4c9831461014357806306fdde031461016d578063095ea7b3146101975780630d3faaa4146101d357610129565b3661012957005b5f80fd5b348015610138575f80fd5b506101416104cb565b005b34801561014e575f80fd5b50610157610549565b6040516101649190611ccd565b60405180910390f35b348015610178575f80fd5b5061018161054f565b60405161018e9190611d56565b60405180910390f35b3480156101a2575f80fd5b506101bd60048036038101906101b89190611dfe565b6105df565b6040516101ca9190611e56565b60405180910390f35b3480156101de575f80fd5b506101e76106cc565b6040516101f49190611ccd565b60405180910390f35b348015610208575f80fd5b506102116106d2565b60405161021e9190611eca565b60405180910390f35b348015610232575f80fd5b5061023b6106f7565b6040516102489190611ccd565b60405180910390f35b34801561025c575f80fd5b5061027760048036038101906102729190611ee3565b610700565b6040516102849190611e56565b60405180910390f35b348015610298575f80fd5b506102a16108e0565b6040516102ae9190611ccd565b60405180910390f35b3480156102c2575f80fd5b506102cb610951565b6040516102d89190611f4e565b60405180910390f35b3480156102ec575f80fd5b506102f5610959565b6040516103029190611f76565b60405180910390f35b348015610316575f80fd5b5061031f610967565b60405161032c9190611f76565b60405180910390f35b348015610340575f80fd5b5061034961098c565b6040516103569190611ccd565b60405180910390f35b34801561036a575f80fd5b50610373610992565b6040516103809190611ccd565b60405180910390f35b348015610394575f80fd5b506103af60048036038101906103aa9190611f8f565b610998565b6040516103bc9190611e56565b60405180910390f35b3480156103d0575f80fd5b506103eb60048036038101906103e69190611f8f565b6109ac565b6040516103f89190611ccd565b60405180910390f35b34801561040c575f80fd5b506104156109f2565b6040516104229190611d56565b60405180910390f35b348015610436575f80fd5b50610451600480360381019061044c9190611f8f565b610a2f565b005b34801561045e575f80fd5b5061047960048036038101906104749190611dfe565b610b29565b6040516104869190611e56565b60405180910390f35b34801561049a575f80fd5b506104b560048036038101906104b09190611fba565b610b3d565b6040516104c29190611ccd565b60405180910390f35b6104d3610bbf565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053790612042565b60405180910390fd5b42600b81905550565b600a5481565b60606004805461055e9061208d565b80601f016020809104026020016040519081016040528092919081815260200182805461058a9061208d565b80156105d55780601f106105ac576101008083540402835291602001916105d5565b820191905f5260205f20905b8154815290600101906020018083116105b857829003601f168201915b5050505050905090565b5f8160075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516106ba9190611ccd565b60405180910390a36001905092915050565b600b5481565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600554905090565b5f60055460075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054146108cc578160075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054101561083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083490612107565b60405180910390fd5b8160075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108c49190612152565b925050819055505b6108d7848484610be6565b90509392505050565b5f61090b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166109ac565b61093560025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166109ac565b6005546109429190612152565b61094c9190612152565b905090565b5f6009905090565b5f610962610bbf565b905090565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b60085481565b5f6109a5826005546105df565b9050919050565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60606040518060400160405280600481526020017f5641435500000000000000000000000000000000000000000000000000000000815250905090565b610a37610bbf565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9b90612042565b60405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f50146d0e3c60aa1d17a70635b05494f864e86144a2201275021014fbf08bafe260405160405180910390a250565b5f610b35338484610be6565b905092915050565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f81610bf1856109ac565b1015610c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c29906121cf565b60405180910390fd5b610c3c8484610ea3565b15610c95578160095f828254610c5291906121ed565b925050819055507f68941839ba52618f2e2f1d9ae52fee27c2c983e54c319a08feec74b9b44c6f5a848484604051610c8c93929190612220565b60405180910390a15b600e60149054906101000a900460ff1615610cbc57610cb5848484611083565b9050610e9c565b610cc583611170565b15610cd357610cd261124d565b5b610cdc8361146a565b15610cea57610ce9611570565b5b600854600a5442610cfb9190612152565b10158015610d555750600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610d695742600a819055505f6009819055505b5f610d7485856115cf565b610d7e5782610d89565b610d88858461181f565b5b90508260065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610dd79190612152565b925050819055508060065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610e2a91906121ed565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e8e9190611ccd565b60405180910390a360019150505b9392505050565b5f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610f4b5750600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015610f8a5750610f5a610bbf565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015610fc95750610f99610bbf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611022575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561107b575060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b905092915050565b5f8160065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546110d09190612152565b925050819055508160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461112391906121ed565b925050819055507f23782940353c76f32cdb6b37a9ec14ebb34dcf332acbe27eb97102e11799192584848460405161115d93929190612220565b60405180910390a1600190509392505050565b5f600e60149054906101000a900460ff161580156111db5750600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b80156112335750600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b801561124657505f611244306109ac565b115b9050919050565b6001600e60146101000a81548160ff0219169083151502179055505f611272306109ac565b90505f600267ffffffffffffffff8111156112905761128f612255565b5b6040519080825280602002602001820160405280156112be5781602001602082028036833780820191505090505b50905030815f815181106112d5576112d4612282565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061134557611344612282565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016113e195949392919061239f565b5f604051808303815f87803b1580156113f8575f80fd5b505af115801561140a573d5f803e3d5ffd5b505050505f4790507f7f7e68c3f8bfb8963fb4665895846b1e29696621fd4a00db34a4702f10ba4f3283826040516114439291906123f7565b60405180910390a15050505f600e60146101000a81548160ff021916908315150217905550565b5f806114746108e0565b90505f606482611484919061244b565b90505f816009541090508080156114aa5750600854600a54426114a79190612152565b10155b80156115035750600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b801561155b5750600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b801561156657505f47115b9350505050919050565b42600a81905550610e106115826118f9565b61158c919061247b565b6008819055505f6009819055505f4790505f8111156115cc575f6064602a836115b5919061247b565b6115bf919061244b565b90506115ca81611947565b505b50565b5f6115d8610bbf565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156116465750611616610bbf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156116f55750600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806116f45750600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b5b8015611817575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156117a6575060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117de57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561181657503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b5b905092915050565b5f8061182a83611b62565b90508060065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461187891906121ed565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118dc9190611ccd565b60405180910390a380836118f09190612152565b91505092915050565b5f80600442446040516020016119109291906124dc565b604051602081830303815290604052805190602001205f1c6119329190612507565b905080601661194191906121ed565b91505090565b5f611951306109ac565b90505f600267ffffffffffffffff81111561196f5761196e612255565b5b60405190808252806020026020018201604052801561199d5781602001602082028036833780820191505090505b50905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f815181106119d5576119d4612282565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611a2457611a23612282565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95845f8460025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611ae09493929190612537565b5f604051808303818588803b158015611af7575f80fd5b505af1158015611b09573d5f803e3d5ffd5b50505050505f82611b19306109ac565b611b239190612152565b90507f0dff86dd34ae770828d474354eef8f145ff7bcea09b138c457b7eefa2b28a1a281604051611b549190611ccd565b60405180910390a150505050565b5f80611b6d83611bac565b90505f611b78611c86565b90505f6127108284611b8a919061247b565b86611b95919061247b565b611b9f919061244b565b9050809350505050919050565b5f80611bb66108e0565b90505f8103611bc8575f915050611c81565b5f620186a0600583611bda919061247b565b611be4919061244b565b90505f620186a06101f484611bf9919061247b565b611c03919061244b565b9050818511611c195761012c9350505050611c81565b808510611c2d57610bb89350505050611c81565b5f61012c8383611c3d9190612152565b61012c610bb8611c4d9190612152565b8589611c599190612152565b611c63919061247b565b611c6d919061244b565b611c7791906121ed565b9050809450505050505b919050565b5f80600b5442611c969190612152565b90506104b0811015611cac576003915050611cb2565b60019150505b90565b5f819050919050565b611cc781611cb5565b82525050565b5f602082019050611ce05f830184611cbe565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611d2882611ce6565b611d328185611cf0565b9350611d42818560208601611d00565b611d4b81611d0e565b840191505092915050565b5f6020820190508181035f830152611d6e8184611d1e565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611da382611d7a565b9050919050565b611db381611d99565b8114611dbd575f80fd5b50565b5f81359050611dce81611daa565b92915050565b611ddd81611cb5565b8114611de7575f80fd5b50565b5f81359050611df881611dd4565b92915050565b5f8060408385031215611e1457611e13611d76565b5b5f611e2185828601611dc0565b9250506020611e3285828601611dea565b9150509250929050565b5f8115159050919050565b611e5081611e3c565b82525050565b5f602082019050611e695f830184611e47565b92915050565b5f819050919050565b5f611e92611e8d611e8884611d7a565b611e6f565b611d7a565b9050919050565b5f611ea382611e78565b9050919050565b5f611eb482611e99565b9050919050565b611ec481611eaa565b82525050565b5f602082019050611edd5f830184611ebb565b92915050565b5f805f60608486031215611efa57611ef9611d76565b5b5f611f0786828701611dc0565b9350506020611f1886828701611dc0565b9250506040611f2986828701611dea565b9150509250925092565b5f60ff82169050919050565b611f4881611f33565b82525050565b5f602082019050611f615f830184611f3f565b92915050565b611f7081611d99565b82525050565b5f602082019050611f895f830184611f67565b92915050565b5f60208284031215611fa457611fa3611d76565b5b5f611fb184828501611dc0565b91505092915050565b5f8060408385031215611fd057611fcf611d76565b5b5f611fdd85828601611dc0565b9250506020611fee85828601611dc0565b9150509250929050565b7f43616c6c6572206973206e6f74206f776e6572000000000000000000000000005f82015250565b5f61202c601383611cf0565b915061203782611ff8565b602082019050919050565b5f6020820190508181035f83015261205981612020565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806120a457607f821691505b6020821081036120b7576120b6612060565b5b50919050565b7f496e73756666696369656e7420416c6c6f77616e6365000000000000000000005f82015250565b5f6120f1601683611cf0565b91506120fc826120bd565b602082019050919050565b5f6020820190508181035f83015261211e816120e5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61215c82611cb5565b915061216783611cb5565b925082820390508181111561217f5761217e612125565b5b92915050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f6121b9601483611cf0565b91506121c482612185565b602082019050919050565b5f6020820190508181035f8301526121e6816121ad565b9050919050565b5f6121f782611cb5565b915061220283611cb5565b925082820190508082111561221a57612219612125565b5b92915050565b5f6060820190506122335f830186611f67565b6122406020830185611f67565b61224d6040830184611cbe565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6122d26122cd6122c8846122af565b611e6f565b611cb5565b9050919050565b6122e2816122b8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61231a81611d99565b82525050565b5f61232b8383612311565b60208301905092915050565b5f602082019050919050565b5f61234d826122e8565b61235781856122f2565b935061236283612302565b805f5b838110156123925781516123798882612320565b975061238483612337565b925050600181019050612365565b5085935050505092915050565b5f60a0820190506123b25f830188611cbe565b6123bf60208301876122d9565b81810360408301526123d18186612343565b90506123e06060830185611f67565b6123ed6080830184611cbe565b9695505050505050565b5f60408201905061240a5f830185611cbe565b6124176020830184611cbe565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61245582611cb5565b915061246083611cb5565b9250826124705761246f61241e565b5b828204905092915050565b5f61248582611cb5565b915061249083611cb5565b925082820261249e81611cb5565b915082820484148315176124b5576124b4612125565b5b5092915050565b5f819050919050565b6124d66124d182611cb5565b6124bc565b82525050565b5f6124e782856124c5565b6020820191506124f782846124c5565b6020820191508190509392505050565b5f61251182611cb5565b915061251c83611cb5565b92508261252c5761252b61241e565b5b828206905092915050565b5f60808201905061254a5f8301876122d9565b818103602083015261255c8186612343565b905061256b6040830185611f67565b6125786060830184611cbe565b9594505050505056fea264697066735822122045834ee78a54f31c3a3abbd9aab1f8912413f6a591c409535f2bd5fb75a8056464736f6c63430008190033

Deployed Bytecode

0x608060405260043610610122575f3560e01c806331d2716f1161009f57806370a082311161006357806370a08231146103c557806395d89b4114610401578063a6f9dae11461042b578063a9059cbb14610453578063dd62ed3e1461048f57610129565b806331d2716f146102e157806349bd5a5e1461030b5780634b402c5214610335578063512afb3a1461035f578063571ac8b01461038957610129565b80631694505e116100e65780631694505e146101fd57806318160ddd1461022757806323b872dd146102515780632b112e491461028d578063313ce567146102b757610129565b806301339c211461012d57806306a4c9831461014357806306fdde031461016d578063095ea7b3146101975780630d3faaa4146101d357610129565b3661012957005b5f80fd5b348015610138575f80fd5b506101416104cb565b005b34801561014e575f80fd5b50610157610549565b6040516101649190611ccd565b60405180910390f35b348015610178575f80fd5b5061018161054f565b60405161018e9190611d56565b60405180910390f35b3480156101a2575f80fd5b506101bd60048036038101906101b89190611dfe565b6105df565b6040516101ca9190611e56565b60405180910390f35b3480156101de575f80fd5b506101e76106cc565b6040516101f49190611ccd565b60405180910390f35b348015610208575f80fd5b506102116106d2565b60405161021e9190611eca565b60405180910390f35b348015610232575f80fd5b5061023b6106f7565b6040516102489190611ccd565b60405180910390f35b34801561025c575f80fd5b5061027760048036038101906102729190611ee3565b610700565b6040516102849190611e56565b60405180910390f35b348015610298575f80fd5b506102a16108e0565b6040516102ae9190611ccd565b60405180910390f35b3480156102c2575f80fd5b506102cb610951565b6040516102d89190611f4e565b60405180910390f35b3480156102ec575f80fd5b506102f5610959565b6040516103029190611f76565b60405180910390f35b348015610316575f80fd5b5061031f610967565b60405161032c9190611f76565b60405180910390f35b348015610340575f80fd5b5061034961098c565b6040516103569190611ccd565b60405180910390f35b34801561036a575f80fd5b50610373610992565b6040516103809190611ccd565b60405180910390f35b348015610394575f80fd5b506103af60048036038101906103aa9190611f8f565b610998565b6040516103bc9190611e56565b60405180910390f35b3480156103d0575f80fd5b506103eb60048036038101906103e69190611f8f565b6109ac565b6040516103f89190611ccd565b60405180910390f35b34801561040c575f80fd5b506104156109f2565b6040516104229190611d56565b60405180910390f35b348015610436575f80fd5b50610451600480360381019061044c9190611f8f565b610a2f565b005b34801561045e575f80fd5b5061047960048036038101906104749190611dfe565b610b29565b6040516104869190611e56565b60405180910390f35b34801561049a575f80fd5b506104b560048036038101906104b09190611fba565b610b3d565b6040516104c29190611ccd565b60405180910390f35b6104d3610bbf565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053790612042565b60405180910390fd5b42600b81905550565b600a5481565b60606004805461055e9061208d565b80601f016020809104026020016040519081016040528092919081815260200182805461058a9061208d565b80156105d55780601f106105ac576101008083540402835291602001916105d5565b820191905f5260205f20905b8154815290600101906020018083116105b857829003601f168201915b5050505050905090565b5f8160075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516106ba9190611ccd565b60405180910390a36001905092915050565b600b5481565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600554905090565b5f60055460075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054146108cc578160075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054101561083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083490612107565b60405180910390fd5b8160075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108c49190612152565b925050819055505b6108d7848484610be6565b90509392505050565b5f61090b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166109ac565b61093560025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166109ac565b6005546109429190612152565b61094c9190612152565b905090565b5f6009905090565b5f610962610bbf565b905090565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b60085481565b5f6109a5826005546105df565b9050919050565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60606040518060400160405280600481526020017f5641435500000000000000000000000000000000000000000000000000000000815250905090565b610a37610bbf565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9b90612042565b60405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f50146d0e3c60aa1d17a70635b05494f864e86144a2201275021014fbf08bafe260405160405180910390a250565b5f610b35338484610be6565b905092915050565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f81610bf1856109ac565b1015610c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c29906121cf565b60405180910390fd5b610c3c8484610ea3565b15610c95578160095f828254610c5291906121ed565b925050819055507f68941839ba52618f2e2f1d9ae52fee27c2c983e54c319a08feec74b9b44c6f5a848484604051610c8c93929190612220565b60405180910390a15b600e60149054906101000a900460ff1615610cbc57610cb5848484611083565b9050610e9c565b610cc583611170565b15610cd357610cd261124d565b5b610cdc8361146a565b15610cea57610ce9611570565b5b600854600a5442610cfb9190612152565b10158015610d555750600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610d695742600a819055505f6009819055505b5f610d7485856115cf565b610d7e5782610d89565b610d88858461181f565b5b90508260065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610dd79190612152565b925050819055508060065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610e2a91906121ed565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e8e9190611ccd565b60405180910390a360019150505b9392505050565b5f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610f4b5750600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015610f8a5750610f5a610bbf565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015610fc95750610f99610bbf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611022575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561107b575060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b905092915050565b5f8160065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546110d09190612152565b925050819055508160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461112391906121ed565b925050819055507f23782940353c76f32cdb6b37a9ec14ebb34dcf332acbe27eb97102e11799192584848460405161115d93929190612220565b60405180910390a1600190509392505050565b5f600e60149054906101000a900460ff161580156111db5750600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b80156112335750600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b801561124657505f611244306109ac565b115b9050919050565b6001600e60146101000a81548160ff0219169083151502179055505f611272306109ac565b90505f600267ffffffffffffffff8111156112905761128f612255565b5b6040519080825280602002602001820160405280156112be5781602001602082028036833780820191505090505b50905030815f815181106112d5576112d4612282565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061134557611344612282565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016113e195949392919061239f565b5f604051808303815f87803b1580156113f8575f80fd5b505af115801561140a573d5f803e3d5ffd5b505050505f4790507f7f7e68c3f8bfb8963fb4665895846b1e29696621fd4a00db34a4702f10ba4f3283826040516114439291906123f7565b60405180910390a15050505f600e60146101000a81548160ff021916908315150217905550565b5f806114746108e0565b90505f606482611484919061244b565b90505f816009541090508080156114aa5750600854600a54426114a79190612152565b10155b80156115035750600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b801561155b5750600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b801561156657505f47115b9350505050919050565b42600a81905550610e106115826118f9565b61158c919061247b565b6008819055505f6009819055505f4790505f8111156115cc575f6064602a836115b5919061247b565b6115bf919061244b565b90506115ca81611947565b505b50565b5f6115d8610bbf565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156116465750611616610bbf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156116f55750600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806116f45750600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b5b8015611817575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156117a6575060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117de57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561181657503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b5b905092915050565b5f8061182a83611b62565b90508060065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461187891906121ed565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118dc9190611ccd565b60405180910390a380836118f09190612152565b91505092915050565b5f80600442446040516020016119109291906124dc565b604051602081830303815290604052805190602001205f1c6119329190612507565b905080601661194191906121ed565b91505090565b5f611951306109ac565b90505f600267ffffffffffffffff81111561196f5761196e612255565b5b60405190808252806020026020018201604052801561199d5781602001602082028036833780820191505090505b50905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f815181106119d5576119d4612282565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611a2457611a23612282565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95845f8460025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611ae09493929190612537565b5f604051808303818588803b158015611af7575f80fd5b505af1158015611b09573d5f803e3d5ffd5b50505050505f82611b19306109ac565b611b239190612152565b90507f0dff86dd34ae770828d474354eef8f145ff7bcea09b138c457b7eefa2b28a1a281604051611b549190611ccd565b60405180910390a150505050565b5f80611b6d83611bac565b90505f611b78611c86565b90505f6127108284611b8a919061247b565b86611b95919061247b565b611b9f919061244b565b9050809350505050919050565b5f80611bb66108e0565b90505f8103611bc8575f915050611c81565b5f620186a0600583611bda919061247b565b611be4919061244b565b90505f620186a06101f484611bf9919061247b565b611c03919061244b565b9050818511611c195761012c9350505050611c81565b808510611c2d57610bb89350505050611c81565b5f61012c8383611c3d9190612152565b61012c610bb8611c4d9190612152565b8589611c599190612152565b611c63919061247b565b611c6d919061244b565b611c7791906121ed565b9050809450505050505b919050565b5f80600b5442611c969190612152565b90506104b0811015611cac576003915050611cb2565b60019150505b90565b5f819050919050565b611cc781611cb5565b82525050565b5f602082019050611ce05f830184611cbe565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611d2882611ce6565b611d328185611cf0565b9350611d42818560208601611d00565b611d4b81611d0e565b840191505092915050565b5f6020820190508181035f830152611d6e8184611d1e565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611da382611d7a565b9050919050565b611db381611d99565b8114611dbd575f80fd5b50565b5f81359050611dce81611daa565b92915050565b611ddd81611cb5565b8114611de7575f80fd5b50565b5f81359050611df881611dd4565b92915050565b5f8060408385031215611e1457611e13611d76565b5b5f611e2185828601611dc0565b9250506020611e3285828601611dea565b9150509250929050565b5f8115159050919050565b611e5081611e3c565b82525050565b5f602082019050611e695f830184611e47565b92915050565b5f819050919050565b5f611e92611e8d611e8884611d7a565b611e6f565b611d7a565b9050919050565b5f611ea382611e78565b9050919050565b5f611eb482611e99565b9050919050565b611ec481611eaa565b82525050565b5f602082019050611edd5f830184611ebb565b92915050565b5f805f60608486031215611efa57611ef9611d76565b5b5f611f0786828701611dc0565b9350506020611f1886828701611dc0565b9250506040611f2986828701611dea565b9150509250925092565b5f60ff82169050919050565b611f4881611f33565b82525050565b5f602082019050611f615f830184611f3f565b92915050565b611f7081611d99565b82525050565b5f602082019050611f895f830184611f67565b92915050565b5f60208284031215611fa457611fa3611d76565b5b5f611fb184828501611dc0565b91505092915050565b5f8060408385031215611fd057611fcf611d76565b5b5f611fdd85828601611dc0565b9250506020611fee85828601611dc0565b9150509250929050565b7f43616c6c6572206973206e6f74206f776e6572000000000000000000000000005f82015250565b5f61202c601383611cf0565b915061203782611ff8565b602082019050919050565b5f6020820190508181035f83015261205981612020565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806120a457607f821691505b6020821081036120b7576120b6612060565b5b50919050565b7f496e73756666696369656e7420416c6c6f77616e6365000000000000000000005f82015250565b5f6120f1601683611cf0565b91506120fc826120bd565b602082019050919050565b5f6020820190508181035f83015261211e816120e5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61215c82611cb5565b915061216783611cb5565b925082820390508181111561217f5761217e612125565b5b92915050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f6121b9601483611cf0565b91506121c482612185565b602082019050919050565b5f6020820190508181035f8301526121e6816121ad565b9050919050565b5f6121f782611cb5565b915061220283611cb5565b925082820190508082111561221a57612219612125565b5b92915050565b5f6060820190506122335f830186611f67565b6122406020830185611f67565b61224d6040830184611cbe565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6122d26122cd6122c8846122af565b611e6f565b611cb5565b9050919050565b6122e2816122b8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61231a81611d99565b82525050565b5f61232b8383612311565b60208301905092915050565b5f602082019050919050565b5f61234d826122e8565b61235781856122f2565b935061236283612302565b805f5b838110156123925781516123798882612320565b975061238483612337565b925050600181019050612365565b5085935050505092915050565b5f60a0820190506123b25f830188611cbe565b6123bf60208301876122d9565b81810360408301526123d18186612343565b90506123e06060830185611f67565b6123ed6080830184611cbe565b9695505050505050565b5f60408201905061240a5f830185611cbe565b6124176020830184611cbe565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61245582611cb5565b915061246083611cb5565b9250826124705761246f61241e565b5b828204905092915050565b5f61248582611cb5565b915061249083611cb5565b925082820261249e81611cb5565b915082820484148315176124b5576124b4612125565b5b5092915050565b5f819050919050565b6124d66124d182611cb5565b6124bc565b82525050565b5f6124e782856124c5565b6020820191506124f782846124c5565b6020820191508190509392505050565b5f61251182611cb5565b915061251c83611cb5565b92508261252c5761252b61241e565b5b828206905092915050565b5f60808201905061254a5f8301876122d9565b818103602083015261255c8186612343565b905061256b6040830185611f67565b6125786060830184611cbe565b9594505050505056fea264697066735822122045834ee78a54f31c3a3abbd9aab1f8912413f6a591c409535f2bd5fb75a8056464736f6c63430008190033

Deployed Bytecode Sourcemap

12239:11114:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23256:94;;;;;;;;;;;;;:::i;:::-;;13234:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15007:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15399:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13269:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13317;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14664:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15912:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23112:136;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14789:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4171:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13365:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13184:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13132:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15623:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15113:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14896:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3840:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15748:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15244:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23256:94;3454:10;:8;:10::i;:::-;3440:24;;:10;:24;;;3432:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;23327:15:::1;23302:22;:40;;;;23256:94::o:0;13234:28::-;;;;:::o;15007:94::-;15055:13;15088:5;15081:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15007:94;:::o;15399:216::-;15474:4;15526:6;15491:11;:23;15503:10;15491:23;;;;;;;;;;;;;;;:32;15515:7;15491:32;;;;;;;;;;;;;;;:41;;;;15569:7;15548:37;;15557:10;15548:37;;;15578:6;15548:37;;;;;;:::i;:::-;;;;;;;;15603:4;15596:11;;15399:216;;;;:::o;13269:41::-;;;;:::o;13317:::-;;;;;;;;;;;;;:::o;14664:113::-;14719:7;14746:12;;14739:19;;14664:113;:::o;15912:394::-;16012:4;16067:12;;16032:11;:19;16044:6;16032:19;;;;;;;;;;;;;;;:31;16052:10;16032:31;;;;;;;;;;;;;;;;:47;16029:210;;16138:6;16103:11;:19;16115:6;16103:19;;;;;;;;;;;;;;;:31;16123:10;16103:31;;;;;;;;;;;;;;;;:41;;16095:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;16221:6;16186:11;:19;16198:6;16186:19;;;;;;;;;;;;;;;:31;16206:10;16186:31;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;16029:210;16258:40;16272:6;16280:9;16291:6;16258:13;:40::i;:::-;16251:47;;15912:394;;;;;:::o;23112:136::-;23165:7;23225:15;23235:4;;;;;;;;;;;23225:9;:15::i;:::-;23207;23217:4;;;;;;;;;;;23207:9;:15::i;:::-;23192:12;;:30;;;;:::i;:::-;:48;;;;:::i;:::-;23185:55;;23112:136;:::o;14789:95::-;14841:5;12576:1;14859:16;;14789:95;:::o;4171:94::-;4220:7;4247:10;:8;:10::i;:::-;4240:17;;4171:94;:::o;13365:28::-;;;;;;;;;;;;;:::o;13184:43::-;;;;:::o;13132:45::-;;;;:::o;15623:117::-;15678:4;15702:30;15710:7;15719:12;;15702:7;:30::i;:::-;15695:37;;15623:117;;;:::o;15113:119::-;15179:7;15206:9;:18;15216:7;15206:18;;;;;;;;;;;;;;;;15199:25;;15113:119;;;:::o;14896:99::-;14946:13;14980:7;;;;;;;;;;;;;;;;;14973:14;;14896:99;:::o;3840:137::-;3454:10;:8;:10::i;:::-;3440:24;;:10;:24;;;3432:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3915:8:::1;3907:5;::::0;:16:::1;;;;;;;;;;;;;;;;;;3958:8;3949:18;;;;;;;;;;;;3840:137:::0;:::o;15748:156::-;15828:4;15852:44;15866:10;15878:9;15889:6;15852:13;:44::i;:::-;15845:51;;15748:156;;;;:::o;15244:147::-;15328:7;15355:11;:19;15367:6;15355:19;;;;;;;;;;;;;;;:28;15375:7;15355:28;;;;;;;;;;;;;;;;15348:35;;15244:147;;;;:::o;4071:88::-;4114:7;4145:5;;;;;;;;;;;4138:12;;4071:88;:::o;16314:1303::-;16406:4;16452:6;16431:17;16441:6;16431:9;:17::i;:::-;:27;;16423:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;16507:35;16524:6;16532:9;16507:16;:35::i;:::-;16504:168;;;16587:6;16559:24;;:34;;;;;;;:::i;:::-;;;;;;;;16613:47;16634:6;16642:9;16653:6;16613:47;;;;;;;;:::i;:::-;;;;;;;;16504:168;16688:6;;;;;;;;;;;16684:87;;;16718:41;16733:6;16741:9;16752:6;16718:14;:41::i;:::-;16711:48;;;;16684:87;16788:34;16812:9;16788:23;:34::i;:::-;16785:84;;;16839:18;:16;:18::i;:::-;16785:84;16884:34;16908:9;16884:23;:34::i;:::-;16881:78;;;16935:12;:10;:12::i;:::-;16881:78;17013:19;;17000:9;;16982:15;:27;;;;:::i;:::-;:50;;:80;;;;;17049:13;;;;;;;;;;;17036:26;;:9;:26;;;16982:80;16979:345;;;17254:15;17242:9;:27;;;;17311:1;17284:24;:28;;;;16979:345;17336:19;17358:32;17372:6;17380:9;17358:13;:32::i;:::-;:67;;17419:6;17358:67;;;17393:23;17401:6;17409;17393:7;:23::i;:::-;17358:67;17336:89;;17467:6;17446:9;:17;17456:6;17446:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;17508:11;17484:9;:20;17494:9;17484:20;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;17554:9;17537:40;;17546:6;17537:40;;;17565:11;17537:40;;;;;;:::i;:::-;;;;;;;;17605:4;17598:11;;;16314:1303;;;;;;:::o;17907:264::-;17991:4;18026:13;;;;;;;;;;;18016:23;;:6;:23;;;:53;;;;18056:13;;;;;;;;;;;18043:26;;:9;:26;;;18016:53;18015:79;;;;;18084:10;:8;:10::i;:::-;18074:20;;:6;:20;;;;18015:79;:106;;;;;18111:10;:8;:10::i;:::-;18098:23;;:9;:23;;;;18015:106;:127;;;;;18138:4;;;;;;;;;;;18125:17;;:9;:17;;;;18015:127;:148;;;;;18159:4;;;;;;;;;;;18146:17;;:9;:17;;;;18015:148;18008:155;;17907:264;;;;:::o;17625:274::-;17718:4;17756:6;17735:9;:17;17745:6;17735:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;17797:6;17773:9;:20;17783:9;17773:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17829:40;17843:6;17851:9;17862:6;17829:40;;;;;;;;:::i;:::-;;;;;;;;17887:4;17880:11;;17625:274;;;;;:::o;20788:282::-;20863:4;20924:6;;;;;;;;;;;20923:7;:51;;;;;20961:13;;;;;;;;;;;20947:27;;:10;:27;;;;20923:51;:94;;;;;21004:13;;;;;;;;;;;20991:26;;:9;:26;;;20923:94;:139;;;;;21061:1;21034:24;21052:4;21034:9;:24::i;:::-;:28;20923:139;20916:146;;20788:282;;;:::o;21659:577::-;13536:4;13527:6;;:13;;;;;;;;;;;;;;;;;;21726:20:::1;21749:24;21767:4;21749:9;:24::i;:::-;21726:47;;21786:21;21824:1;21810:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21786:40;;21855:4;21837;21842:1;21837:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;21881:4;;;;;;;;;;;21871;21876:1;21871:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;21898:15;;;;;;;;;;;:66;;;21979:12;22006:1;22022:4;22049;22069:15;21898:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22108:18;22129:21;22108:42;;22176;22193:12;22207:10;22176:42;;;;;;;:::i;:::-;;;;;;;;21705:531;;;13574:5:::0;13565:6;;:14;;;;;;;;;;;;;;;;;;21659:577::o;21078:573::-;21153:4;21206:25;21234:22;:20;:22::i;:::-;21206:50;;21267:27;21317:3;21297:17;:23;;;;:::i;:::-;21267:53;;21337:24;21391:19;21364:24;;:46;21337:73;;21428:19;:86;;;;;21495:19;;21482:9;;21464:15;:27;;;;:::i;:::-;:50;;21428:86;:130;;;;;21545:13;;;;;;;;;;;21531:27;;:10;:27;;;;21428:130;:173;;;;;21588:13;;;;;;;;;;;21575:26;;:9;:26;;;21428:173;:215;;;;;21642:1;21618:21;:25;21428:215;21421:222;;;;;21078:573;;;:::o;20403:377::-;20458:15;20446:9;:27;;;;20525:7;20506:16;:14;:16::i;:::-;:26;;;;:::i;:::-;20484:19;:48;;;;20570:1;20543:24;:28;;;;20582:19;20604:21;20582:43;;20653:1;20639:11;:15;20636:137;;;20671:20;20713:3;20708:2;20694:11;:16;;;;:::i;:::-;:22;;;;:::i;:::-;20671:45;;20731:30;20748:12;20731:16;:30::i;:::-;20656:117;20636:137;20435:345;20403:377::o;18179:320::-;18260:4;18294:10;:8;:10::i;:::-;18284:20;;:6;:20;;;;:47;;;;;18321:10;:8;:10::i;:::-;18308:23;;:9;:23;;;;18284:47;:106;;;;;18346:13;;;;;;;;;;;18336:23;;:6;:23;;;:53;;;;18376:13;;;;;;;;;;;18363:26;;:9;:26;;;18336:53;18284:106;:207;;;;;18408:4;;;;;;;;;;;18395:17;;:9;:17;;;;:38;;;;;18429:4;;;;;;;;;;;18416:17;;:9;:17;;;;18395:38;:65;;;;;18455:4;18437:23;;:6;:23;;;;18395:65;:95;;;;;18485:4;18464:26;;:9;:26;;;;18395:95;18284:207;18277:214;;18179:320;;;;:::o;18507:279::-;18574:7;18594:17;18614:20;18627:6;18614:12;:20::i;:::-;18594:40;;18673:9;18645;:24;18663:4;18645:24;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;18723:4;18698:42;;18707:6;18698:42;;;18730:9;18698:42;;;;;;:::i;:::-;;;;;;;;18769:9;18760:6;:18;;;;:::i;:::-;18753:25;;;18507:279;;;;:::o;22892:208::-;22941:7;22961:19;23057:1;23018:15;23035:16;23001:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22991:62;;;;;;22983:71;;:75;;;;:::i;:::-;22961:97;;23081:11;23076:2;:16;;;;:::i;:::-;23069:23;;;22892:208;:::o;22248:636::-;22316:28;22347:24;22365:4;22347:9;:24::i;:::-;22316:55;;22382:21;22420:1;22406:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22382:40;;22443:4;;;;;;;;;;;22433;22438:1;22433:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;22476:4;22458;22463:1;22458:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;22494:15;;;;;;;;;;;:66;;;22568:10;22594:1;22610:4;22629;;;;;;;;;;;22691:15;22494:223;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22748:21;22799:20;22772:24;22790:4;22772:9;:24::i;:::-;:47;;;;:::i;:::-;22748:71;;22845:31;22862:13;22845:31;;;;;;:::i;:::-;;;;;;;;22303:581;;;22248:636;:::o;18794:261::-;18855:7;18875:11;18889:14;18896:6;18889;:14::i;:::-;18875:28;;18914:18;18935:15;:13;:15::i;:::-;18914:36;;18961:19;19013:5;18999:10;18993:3;:16;;;;:::i;:::-;18983:6;:27;;;;:::i;:::-;:35;;;;:::i;:::-;18961:57;;19036:11;19029:18;;;;;18794:261;;;:::o;19427:968::-;19491:7;19521:25;19549:22;:20;:22::i;:::-;19521:50;;19606:1;19585:17;:22;19582:35;;19616:1;19609:8;;;;;19582:35;19656:29;19712:6;19708:1;19688:17;:21;;;;:::i;:::-;:30;;;;:::i;:::-;19656:62;;19739:29;19797:6;19791:3;19771:17;:23;;;;:::i;:::-;:32;;;;:::i;:::-;19739:64;;19844:21;19825:15;:40;19822:566;;12970:3;19882:21;;;;;;;19822:566;19943:21;19924:15;:40;19921:467;;13042:4;19981:21;;;;;;;19921:467;20183:15;12970:3;20307:21;20283;:45;;;;:::i;:::-;12970:3;13042:4;20247:31;;;;:::i;:::-;20221:21;20203:15;:39;;;;:::i;:::-;20202:77;;;;:::i;:::-;:127;;;;:::i;:::-;20201:146;;;;:::i;:::-;20183:164;;20369:7;20362:14;;;;;;19427:968;;;;:::o;19063:275::-;19111:7;19131:19;19171:22;;19153:15;:40;;;;:::i;:::-;19131:62;;19221:10;19207:11;:24;19204:127;;;13124:1;19249:29;;;;;19204:127;19318:1;19311:8;;;19063:275;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:139::-;811:6;806:3;801;795:23;852:1;843:6;838:3;834:16;827:27;722:139;;;:::o;867:102::-;908:6;959:2;955:7;950:2;943:5;939:14;935:28;925:38;;867:102;;;:::o;975:377::-;1063:3;1091:39;1124:5;1091:39;:::i;:::-;1146:71;1210:6;1205:3;1146:71;:::i;:::-;1139:78;;1226:65;1284:6;1279:3;1272:4;1265:5;1261:16;1226:65;:::i;:::-;1316:29;1338:6;1316:29;:::i;:::-;1311:3;1307:39;1300:46;;1067:285;975:377;;;;:::o;1358:313::-;1471:4;1509:2;1498:9;1494:18;1486:26;;1558:9;1552:4;1548:20;1544:1;1533:9;1529:17;1522:47;1586:78;1659:4;1650:6;1586:78;:::i;:::-;1578:86;;1358:313;;;;:::o;1758:117::-;1867:1;1864;1857:12;2004:126;2041:7;2081:42;2074:5;2070:54;2059:65;;2004:126;;;:::o;2136:96::-;2173:7;2202:24;2220:5;2202:24;:::i;:::-;2191:35;;2136:96;;;:::o;2238:122::-;2311:24;2329:5;2311:24;:::i;:::-;2304:5;2301:35;2291:63;;2350:1;2347;2340:12;2291:63;2238:122;:::o;2366:139::-;2412:5;2450:6;2437:20;2428:29;;2466:33;2493:5;2466:33;:::i;:::-;2366:139;;;;:::o;2511:122::-;2584:24;2602:5;2584:24;:::i;:::-;2577:5;2574:35;2564:63;;2623:1;2620;2613:12;2564:63;2511:122;:::o;2639:139::-;2685:5;2723:6;2710:20;2701:29;;2739:33;2766:5;2739:33;:::i;:::-;2639:139;;;;:::o;2784:474::-;2852:6;2860;2909:2;2897:9;2888:7;2884:23;2880:32;2877:119;;;2915:79;;:::i;:::-;2877:119;3035:1;3060:53;3105:7;3096:6;3085:9;3081:22;3060:53;:::i;:::-;3050:63;;3006:117;3162:2;3188:53;3233:7;3224:6;3213:9;3209:22;3188:53;:::i;:::-;3178:63;;3133:118;2784:474;;;;;:::o;3264:90::-;3298:7;3341:5;3334:13;3327:21;3316:32;;3264:90;;;:::o;3360:109::-;3441:21;3456:5;3441:21;:::i;:::-;3436:3;3429:34;3360:109;;:::o;3475:210::-;3562:4;3600:2;3589:9;3585:18;3577:26;;3613:65;3675:1;3664:9;3660:17;3651:6;3613:65;:::i;:::-;3475:210;;;;:::o;3691:60::-;3719:3;3740:5;3733:12;;3691:60;;;:::o;3757:142::-;3807:9;3840:53;3858:34;3867:24;3885:5;3867:24;:::i;:::-;3858:34;:::i;:::-;3840:53;:::i;:::-;3827:66;;3757:142;;;:::o;3905:126::-;3955:9;3988:37;4019:5;3988:37;:::i;:::-;3975:50;;3905:126;;;:::o;4037:152::-;4113:9;4146:37;4177:5;4146:37;:::i;:::-;4133:50;;4037:152;;;:::o;4195:183::-;4308:63;4365:5;4308:63;:::i;:::-;4303:3;4296:76;4195:183;;:::o;4384:274::-;4503:4;4541:2;4530:9;4526:18;4518:26;;4554:97;4648:1;4637:9;4633:17;4624:6;4554:97;:::i;:::-;4384:274;;;;:::o;4664:619::-;4741:6;4749;4757;4806:2;4794:9;4785:7;4781:23;4777:32;4774:119;;;4812:79;;:::i;:::-;4774:119;4932:1;4957:53;5002:7;4993:6;4982:9;4978:22;4957:53;:::i;:::-;4947:63;;4903:117;5059:2;5085:53;5130:7;5121:6;5110:9;5106:22;5085:53;:::i;:::-;5075:63;;5030:118;5187:2;5213:53;5258:7;5249:6;5238:9;5234:22;5213:53;:::i;:::-;5203:63;;5158:118;4664:619;;;;;:::o;5289:86::-;5324:7;5364:4;5357:5;5353:16;5342:27;;5289:86;;;:::o;5381:112::-;5464:22;5480:5;5464:22;:::i;:::-;5459:3;5452:35;5381:112;;:::o;5499:214::-;5588:4;5626:2;5615:9;5611:18;5603:26;;5639:67;5703:1;5692:9;5688:17;5679:6;5639:67;:::i;:::-;5499:214;;;;:::o;5719:118::-;5806:24;5824:5;5806:24;:::i;:::-;5801:3;5794:37;5719:118;;:::o;5843:222::-;5936:4;5974:2;5963:9;5959:18;5951:26;;5987:71;6055:1;6044:9;6040:17;6031:6;5987:71;:::i;:::-;5843:222;;;;:::o;6071:329::-;6130:6;6179:2;6167:9;6158:7;6154:23;6150:32;6147:119;;;6185:79;;:::i;:::-;6147:119;6305:1;6330:53;6375:7;6366:6;6355:9;6351:22;6330:53;:::i;:::-;6320:63;;6276:117;6071:329;;;;:::o;6406:474::-;6474:6;6482;6531:2;6519:9;6510:7;6506:23;6502:32;6499:119;;;6537:79;;:::i;:::-;6499:119;6657:1;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6628:117;6784:2;6810:53;6855:7;6846:6;6835:9;6831:22;6810:53;:::i;:::-;6800:63;;6755:118;6406:474;;;;;:::o;6886:169::-;7026:21;7022:1;7014:6;7010:14;7003:45;6886:169;:::o;7061:366::-;7203:3;7224:67;7288:2;7283:3;7224:67;:::i;:::-;7217:74;;7300:93;7389:3;7300:93;:::i;:::-;7418:2;7413:3;7409:12;7402:19;;7061:366;;;:::o;7433:419::-;7599:4;7637:2;7626:9;7622:18;7614:26;;7686:9;7680:4;7676:20;7672:1;7661:9;7657:17;7650:47;7714:131;7840:4;7714:131;:::i;:::-;7706:139;;7433:419;;;:::o;7858:180::-;7906:77;7903:1;7896:88;8003:4;8000:1;7993:15;8027:4;8024:1;8017:15;8044:320;8088:6;8125:1;8119:4;8115:12;8105:22;;8172:1;8166:4;8162:12;8193:18;8183:81;;8249:4;8241:6;8237:17;8227:27;;8183:81;8311:2;8303:6;8300:14;8280:18;8277:38;8274:84;;8330:18;;:::i;:::-;8274:84;8095:269;8044:320;;;:::o;8370:172::-;8510:24;8506:1;8498:6;8494:14;8487:48;8370:172;:::o;8548:366::-;8690:3;8711:67;8775:2;8770:3;8711:67;:::i;:::-;8704:74;;8787:93;8876:3;8787:93;:::i;:::-;8905:2;8900:3;8896:12;8889:19;;8548:366;;;:::o;8920:419::-;9086:4;9124:2;9113:9;9109:18;9101:26;;9173:9;9167:4;9163:20;9159:1;9148:9;9144:17;9137:47;9201:131;9327:4;9201:131;:::i;:::-;9193:139;;8920:419;;;:::o;9345:180::-;9393:77;9390:1;9383:88;9490:4;9487:1;9480:15;9514:4;9511:1;9504:15;9531:194;9571:4;9591:20;9609:1;9591:20;:::i;:::-;9586:25;;9625:20;9643:1;9625:20;:::i;:::-;9620:25;;9669:1;9666;9662:9;9654:17;;9693:1;9687:4;9684:11;9681:37;;;9698:18;;:::i;:::-;9681:37;9531:194;;;;:::o;9731:170::-;9871:22;9867:1;9859:6;9855:14;9848:46;9731:170;:::o;9907:366::-;10049:3;10070:67;10134:2;10129:3;10070:67;:::i;:::-;10063:74;;10146:93;10235:3;10146:93;:::i;:::-;10264:2;10259:3;10255:12;10248:19;;9907:366;;;:::o;10279:419::-;10445:4;10483:2;10472:9;10468:18;10460:26;;10532:9;10526:4;10522:20;10518:1;10507:9;10503:17;10496:47;10560:131;10686:4;10560:131;:::i;:::-;10552:139;;10279:419;;;:::o;10704:191::-;10744:3;10763:20;10781:1;10763:20;:::i;:::-;10758:25;;10797:20;10815:1;10797:20;:::i;:::-;10792:25;;10840:1;10837;10833:9;10826:16;;10861:3;10858:1;10855:10;10852:36;;;10868:18;;:::i;:::-;10852:36;10704:191;;;;:::o;10901:442::-;11050:4;11088:2;11077:9;11073:18;11065:26;;11101:71;11169:1;11158:9;11154:17;11145:6;11101:71;:::i;:::-;11182:72;11250:2;11239:9;11235:18;11226:6;11182:72;:::i;:::-;11264;11332:2;11321:9;11317:18;11308:6;11264:72;:::i;:::-;10901:442;;;;;;:::o;11349:180::-;11397:77;11394:1;11387:88;11494:4;11491:1;11484:15;11518:4;11515:1;11508:15;11535:180;11583:77;11580:1;11573:88;11680:4;11677:1;11670:15;11704:4;11701:1;11694:15;11721:85;11766:7;11795:5;11784:16;;11721:85;;;:::o;11812:158::-;11870:9;11903:61;11921:42;11930:32;11956:5;11930:32;:::i;:::-;11921:42;:::i;:::-;11903:61;:::i;:::-;11890:74;;11812:158;;;:::o;11976:147::-;12071:45;12110:5;12071:45;:::i;:::-;12066:3;12059:58;11976:147;;:::o;12129:114::-;12196:6;12230:5;12224:12;12214:22;;12129:114;;;:::o;12249:184::-;12348:11;12382:6;12377:3;12370:19;12422:4;12417:3;12413:14;12398:29;;12249:184;;;;:::o;12439:132::-;12506:4;12529:3;12521:11;;12559:4;12554:3;12550:14;12542:22;;12439:132;;;:::o;12577:108::-;12654:24;12672:5;12654:24;:::i;:::-;12649:3;12642:37;12577:108;;:::o;12691:179::-;12760:10;12781:46;12823:3;12815:6;12781:46;:::i;:::-;12859:4;12854:3;12850:14;12836:28;;12691:179;;;;:::o;12876:113::-;12946:4;12978;12973:3;12969:14;12961:22;;12876:113;;;:::o;13025:732::-;13144:3;13173:54;13221:5;13173:54;:::i;:::-;13243:86;13322:6;13317:3;13243:86;:::i;:::-;13236:93;;13353:56;13403:5;13353:56;:::i;:::-;13432:7;13463:1;13448:284;13473:6;13470:1;13467:13;13448:284;;;13549:6;13543:13;13576:63;13635:3;13620:13;13576:63;:::i;:::-;13569:70;;13662:60;13715:6;13662:60;:::i;:::-;13652:70;;13508:224;13495:1;13492;13488:9;13483:14;;13448:284;;;13452:14;13748:3;13741:10;;13149:608;;;13025:732;;;;:::o;13763:831::-;14026:4;14064:3;14053:9;14049:19;14041:27;;14078:71;14146:1;14135:9;14131:17;14122:6;14078:71;:::i;:::-;14159:80;14235:2;14224:9;14220:18;14211:6;14159:80;:::i;:::-;14286:9;14280:4;14276:20;14271:2;14260:9;14256:18;14249:48;14314:108;14417:4;14408:6;14314:108;:::i;:::-;14306:116;;14432:72;14500:2;14489:9;14485:18;14476:6;14432:72;:::i;:::-;14514:73;14582:3;14571:9;14567:19;14558:6;14514:73;:::i;:::-;13763:831;;;;;;;;:::o;14600:332::-;14721:4;14759:2;14748:9;14744:18;14736:26;;14772:71;14840:1;14829:9;14825:17;14816:6;14772:71;:::i;:::-;14853:72;14921:2;14910:9;14906:18;14897:6;14853:72;:::i;:::-;14600:332;;;;;:::o;14938:180::-;14986:77;14983:1;14976:88;15083:4;15080:1;15073:15;15107:4;15104:1;15097:15;15124:185;15164:1;15181:20;15199:1;15181:20;:::i;:::-;15176:25;;15215:20;15233:1;15215:20;:::i;:::-;15210:25;;15254:1;15244:35;;15259:18;;:::i;:::-;15244:35;15301:1;15298;15294:9;15289:14;;15124:185;;;;:::o;15315:410::-;15355:7;15378:20;15396:1;15378:20;:::i;:::-;15373:25;;15412:20;15430:1;15412:20;:::i;:::-;15407:25;;15467:1;15464;15460:9;15489:30;15507:11;15489:30;:::i;:::-;15478:41;;15668:1;15659:7;15655:15;15652:1;15649:22;15629:1;15622:9;15602:83;15579:139;;15698:18;;:::i;:::-;15579:139;15363:362;15315:410;;;;:::o;15731:79::-;15770:7;15799:5;15788:16;;15731:79;;;:::o;15816:157::-;15921:45;15941:24;15959:5;15941:24;:::i;:::-;15921:45;:::i;:::-;15916:3;15909:58;15816:157;;:::o;15979:397::-;16119:3;16134:75;16205:3;16196:6;16134:75;:::i;:::-;16234:2;16229:3;16225:12;16218:19;;16247:75;16318:3;16309:6;16247:75;:::i;:::-;16347:2;16342:3;16338:12;16331:19;;16367:3;16360:10;;15979:397;;;;;:::o;16382:176::-;16414:1;16431:20;16449:1;16431:20;:::i;:::-;16426:25;;16465:20;16483:1;16465:20;:::i;:::-;16460:25;;16504:1;16494:35;;16509:18;;:::i;:::-;16494:35;16550:1;16547;16543:9;16538:14;;16382:176;;;;:::o;16564:720::-;16799:4;16837:3;16826:9;16822:19;16814:27;;16851:79;16927:1;16916:9;16912:17;16903:6;16851:79;:::i;:::-;16977:9;16971:4;16967:20;16962:2;16951:9;16947:18;16940:48;17005:108;17108:4;17099:6;17005:108;:::i;:::-;16997:116;;17123:72;17191:2;17180:9;17176:18;17167:6;17123:72;:::i;:::-;17205;17273:2;17262:9;17258:18;17249:6;17205:72;:::i;:::-;16564:720;;;;;;;:::o

Swarm Source

ipfs://45834ee78a54f31c3a3abbd9aab1f8912413f6a591c409535f2bd5fb75a80564

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.