ETH Price: $2,638.89 (+2.39%)

Token

GayCoin (GAY)
 

Overview

Max Total Supply

696,969,696 GAY

Holders

400

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000001693934 GAY

Value
$0.00
0x749Ee915d025157b6B13b632be936f35A4C75810
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GayCoin

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-18
*/

/*
       https://haycoin.gay/
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

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

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

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata{
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 internal _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount 
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount,
                "BEP20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue,
                "BEP20: decreased allowance below zero"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "BEP20: transfer from the zero address");
        require(recipient != address(0), "BEP20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount,"BEP20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "BEP20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "BEP20: approve from the zero address");
        require(spender != address(0), "BEP20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

abstract contract Ownable is Context {

    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 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 (uint256);

    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r,
                    bytes32 s) external;

    event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out,
               uint256 amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    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 (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);

    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;

    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired,
                          uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline)
                          external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin,
                             uint256 amountETHMin, address to, uint256 deadline)
                             external payable returns (uint256 amountToken, uint256 amountETH,
                             uint256 liquidity);

    function removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin,
                             uint256 amountBMin, address to, uint256 deadline) 
                             external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(address token, uint256 liquidity, uint256 amountTokenMin,
                                uint256 amountETHMin, address to, uint256 deadline) 
                                external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(address tokenA, address tokenB, uint256 liquidity,
                                       uint256 amountAMin, uint256 amountBMin, address to,
                                       uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) 
                                       external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(address token, uint256 liquidity, uint256 amountTokenMin,
                                          uint256 amountETHMin, address to, uint256 deadline,
                                          bool approveMax, uint8 v, bytes32 r, bytes32 s) 
                                          external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path,
                                      address to, uint256 deadline) 
                                      external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] calldata path,
                                      address to, uint256 deadline) 
                                      external returns (uint256[] memory amounts);

    function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to,
                                   uint256 deadline) 
                                   external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] calldata path,
                                   address to, uint256 deadline) 
                                   external returns (uint256[] memory amounts);

    function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] calldata path,
                                   address to, uint256 deadline) 
                                   external returns (uint256[] memory amounts);

    function swapETHForExactTokens(uint256 amountOut, address[] calldata path, address to,
                                   uint256 deadline) 
                                   external payable returns (uint256[] memory amounts);

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

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) 
                          external pure returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) 
                         external pure returns (uint256 amountIn);

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

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(address token, uint256 liquidity,
        uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) 
        external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint256 liquidity,
        uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax,
        uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin,
        address[] calldata path, address to, uint256 deadline) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin,
        address[] calldata path, address to, uint256 deadline) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin,
        address[] calldata path, address to, uint256 deadline) external;
}

contract GayCoin is ERC20, Ownable { 
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    bool private swapping;
    bool public tradingEnabled = false;

    uint256 internal sellAmount = 1;
    uint256 internal buyAmount = 1;

    uint256 private totalSellFees;
    uint256 private totalBuyFees;

    address payable public marketingWallet; 



    uint256 public maxWallet;
    uint256 public maxTX;
    uint256 public swapTokensAtAmount;
    uint256 public sellMarketingFees;
    uint256 public sellBurnFee;
    uint256 public buyMarketingFees;
    uint256 public buyBurnFee;
    uint256 public transferFee;




    bool public swapAndLiquifyEnabled = false;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) private canTransferBeforeTradingIsEnabled;

    bool public limitsInEffect = true; 
    uint256 private gasPriceLimit; // MAX GWEI
    mapping(address => uint256) private _holderLastTransferBlock; // FOR 1TX PER BLOCK
    mapping(address => uint256) private _holderLastTransferTimestamp; // FOR COOLDOWN
    uint256 public launchblock; // FOR DEADBLOCKS
    uint256 public delay;
    uint256 private deadblocks;
    uint256 public launchtimestamp; 
    uint256 public cooldowntimer = 30; // DEFAULT COOLDOWN TIMER

    event EnableSwapAndLiquify(bool enabled);
    event SetPreSaleWallet(address wallet);
    event updateMarketingWallet(address wallet);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event TradingEnabled();

    event UpdateFees(uint256 sellMarketingFees, uint256 sellBurnFee, uint256 buyMarketingFees,
                     uint256 buyBurnFee);

    event UpdateTransferFee(uint256 transferFee);
    event Airdrop(address holder, uint256 amount);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event SendDividends(uint256 opAmount, bool success);

    constructor() ERC20("GayCoin", "GAY") { 
        marketingWallet = payable(0xd33F8a43088f4fF302dd6763AD0511148a97eC92); 
        address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

        
        buyMarketingFees = 30;
        sellMarketingFees = 30;
        buyBurnFee = 0;
        sellBurnFee = 0;
        transferFee = 0;

        totalBuyFees = buyMarketingFees;
        totalSellFees = sellMarketingFees;

        uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
                address(this), uniswapV2Router.WETH());

        _setAutomatedMarketMakerPair(uniswapV2Pair, true);

        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[msg.sender] = true;
        _isExcludedFromFees[marketingWallet] = true;

        uint256 totalSupply = (696_969_696) * (10**18); // TOTAL SUPPLY IS SET HERE
        _mint(owner(), totalSupply); // only time internal mint function is ever called is to create supply
        swapTokensAtAmount = _totalSupply / 1000;
        canTransferBeforeTradingIsEnabled[owner()] = true;
        canTransferBeforeTradingIsEnabled[address(this)] = true;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    receive() external payable {}

    function Antibot(uint256 initialMaxGwei, uint256 initialMaxWallet, uint256 initialMaxTX,
                           uint256 setDelay) external onlyOwner {
        initialMaxWallet = initialMaxWallet * (10**18);
        initialMaxTX = initialMaxTX * (10**18);
        require(!tradingEnabled);
        require(initialMaxWallet >= _totalSupply / 1000,"cannot set below 0.1%");
        require(initialMaxTX >= _totalSupply / 1000,"cannot set below 0.1%");
        maxWallet = initialMaxWallet;
        maxTX = initialMaxTX;
        gasPriceLimit = initialMaxGwei * 1 gwei;
        tradingEnabled = true;
        launchblock = block.number;
        launchtimestamp = block.timestamp;
        delay = setDelay;
        emit TradingEnabled();
    }
    
    function setMarketingWallet(address wallet) external onlyOwner {
        _isExcludedFromFees[wallet] = true;
        marketingWallet = payable(wallet);
        emit updateMarketingWallet(wallet);
    }


    
    function setExcludeFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setCanTransferBefore(address wallet, bool enable) external onlyOwner {
        canTransferBeforeTradingIsEnabled[wallet] = enable;
    }

    function setLimitsInEffect(bool value) external onlyOwner {
        limitsInEffect = value;
    }

      function setmaxWallet(uint256 value) external onlyOwner {
        value = value * (10**18);
        require(value >= _totalSupply / 1000, "max wallet cannot be set to less than 0.1%");
        maxWallet = value;
    }

        function setmaxTX(uint256 value) external onlyOwner {
        value = value * (10**18);
        require(value >= _totalSupply / 1000, "max tx cannot be set to less than 0.1%");
        maxTX = value;
    }

    function setGasPriceLimit(uint256 GWEI) external onlyOwner {
        require(GWEI >= 50, "can never be set below 50");
        gasPriceLimit = GWEI * 1 gwei;
    }

    function setcooldowntimer(uint256 value) external onlyOwner {
        require(value <= 300, "cooldown timer cannot exceed 5 minutes");
        cooldowntimer = value;
    }

    

    function Sweep() external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer(amountETH);
    }

    function setSwapTriggerAmount(uint256 amount) public onlyOwner {
        swapTokensAtAmount = amount * (10**18);
    }

    function enableSwapAndLiquify(bool enabled) public onlyOwner {
        require(swapAndLiquifyEnabled != enabled);
        swapAndLiquifyEnabled = enabled;
        emit EnableSwapAndLiquify(enabled);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function transferAdmin(address newOwner) public onlyOwner {
        _isExcludedFromFees[newOwner] = true;
        canTransferBeforeTradingIsEnabled[newOwner] = true;
        transferOwnership(newOwner);
    }

    function updateTransferFee(uint256 newTransferFee) public onlyOwner {
        require (newTransferFee <= 5, "transfer fee cannot exceed 5%");
        transferFee = newTransferFee;
        emit UpdateTransferFee(transferFee);
    }

    function updateFees(uint256 marketingBuy, uint256 marketingSell, uint256 burnBuy,
                        uint256 burnSell) public onlyOwner {

        buyMarketingFees = marketingBuy;
        buyBurnFee = burnBuy;
        sellMarketingFees = marketingSell;
        sellBurnFee = burnSell;

        totalSellFees = sellMarketingFees;
        totalBuyFees = buyMarketingFees;


        require(burnBuy <= 1 && burnSell <= 1, "Burn Fees cannot exceed 1%");
        require(totalSellFees <= 30 && totalBuyFees <= 30, "total fees cannot be higher than 30%");

        emit UpdateFees(sellMarketingFees, sellBurnFee, buyMarketingFees,
                        buyBurnFee);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(address from, address to, uint256 amount) internal override {

        
        require(from != address(0), "IBEP20: transfer from the zero address");
        require(to != address(0), "IBEP20: transfer to the zero address");

        uint256 marketingFees;
        uint256 burnFee;

 

        if (!canTransferBeforeTradingIsEnabled[from]) {
            require(tradingEnabled, "Trading has not yet been enabled");          
        }

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        } 

        if (to == DEAD) {
            super._transfer(from, to, amount);
            _totalSupply = _totalSupply.sub(amount);
            return;
        }
        
        else if (
            !swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            bool isSelling = automatedMarketMakerPairs[to];
            bool isBuying = automatedMarketMakerPairs[from];
            
            if (!isBuying && !isSelling) {
                uint256 tFees = amount.mul(transferFee).div(100);
                amount = amount.sub(tFees);
                super._transfer(from, address(this), tFees);
                super._transfer(from, to, amount);
                return;
            } else  if (isSelling) {
                marketingFees = sellMarketingFees;
                burnFee = sellBurnFee;
 

                 if (limitsInEffect) {
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                require(amount <= maxTX,"above max transaction limit");
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;

                }
            } 
            
            else {
                marketingFees = buyMarketingFees;
                burnFee = buyBurnFee;
 

               if (limitsInEffect) {
                require(block.timestamp > launchtimestamp + delay,"you shall not pass");
                require(tx.gasprice <= gasPriceLimit,"Gas price exceeds limit.");
                require(_holderLastTransferBlock[tx.origin] != block.number,"Too many TX in block");
                require(amount <= maxTX,"above max transaction limit");
                _holderLastTransferBlock[tx.origin] = block.number;
            }

           
                uint256 contractBalanceRecipient = balanceOf(to);
                require(contractBalanceRecipient + amount <= maxWallet,"Exceeds maximum wallet token amount." );
            
            }

            uint256 totalFees = marketingFees;

            uint256 contractTokenBalance = balanceOf(address(this));

            bool canSwap = contractTokenBalance >= swapTokensAtAmount;

            if (canSwap && isSelling) {
                swapping = true;
             
                uint256 swapBalance = balanceOf(address(this));
                swapAndSendDividends(swapBalance);
                buyAmount = 1;
                sellAmount = 1;
                swapping = false;
            }

            uint256 fees = amount.mul(totalFees).div(100);
            uint256 burntokens = amount.mul(burnFee).div(100);


            amount = amount.sub(fees + burntokens) ;

            if (isSelling) {
                sellAmount = sellAmount.add(fees);
            } else {
                buyAmount = buyAmount.add(fees);
            }

            super._transfer(from, address(this), fees);

            if (burntokens > 0) {
                super._transfer(from, DEAD, burntokens);
                _totalSupply = _totalSupply.sub(burntokens);
            }


           
        }

        super._transfer(from, to, amount);
        
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
        uint256 newBalance = address(this).balance.sub(initialBalance);
        addLiquidity(otherHalf, newBalance);
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function forceSwapAndSendDividends(uint256 tokens) public onlyOwner {
        tokens = tokens * (10**18);
        uint256 totalAmount = buyAmount.add(sellAmount);
        uint256 fromBuy = tokens.mul(buyAmount).div(totalAmount);
        uint256 fromSell = tokens.mul(sellAmount).div(totalAmount);

        swapAndSendDividends(tokens);

        buyAmount = buyAmount.sub(fromBuy);
        sellAmount = sellAmount.sub(fromSell);
    }

    // TAX PAYOUT CODE 
    function swapAndSendDividends(uint256 tokens) private {
        if (tokens == 0) {
            return;
        }
        swapTokensForEth(tokens);

        bool success = true;
        bool successOp1 = true;
        
        uint256 _completeFees = sellMarketingFees + buyMarketingFees;

        uint256 feePortions;
        if (_completeFees > 0) {
            feePortions = address(this).balance.div(_completeFees);
        }
        uint256 marketingPayout = buyMarketingFees.add(sellMarketingFees) * feePortions;
        
        if (marketingPayout > 0) {
            (success, ) = address(marketingWallet).call{value: marketingPayout}("");
        }

        emit SendDividends(
            marketingPayout,
            success && successOp1
        );
    }

    function airdropToWallets(
        address[] memory airdropWallets,
        uint256[] memory amount
    ) external onlyOwner {
        require(airdropWallets.length == amount.length, "Arrays must be the same length");
        require(airdropWallets.length <= 200, "Wallets list length must be <= 200");
        for (uint256 i = 0; i < airdropWallets.length; i++) {
            address wallet = airdropWallets[i];
            uint256 airdropAmount = amount[i] * (10**18);
            super._transfer(msg.sender, wallet, airdropAmount);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdrop","type":"event"},{"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":"bool","name":"enabled","type":"bool"}],"name":"EnableSwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"opAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"SetPreSaleWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellBurnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyBurnFee","type":"uint256"}],"name":"UpdateFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"transferFee","type":"uint256"}],"name":"UpdateTransferFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateMarketingWallet","type":"event"},{"inputs":[{"internalType":"uint256","name":"initialMaxGwei","type":"uint256"},{"internalType":"uint256","name":"initialMaxWallet","type":"uint256"},{"internalType":"uint256","name":"initialMaxTX","type":"uint256"},{"internalType":"uint256","name":"setDelay","type":"uint256"}],"name":"Antibot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldowntimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"forceSwapAndSendDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchtimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setCanTransferBefore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"GWEI","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLimitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTriggerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setcooldowntimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxTX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"newOwner","type":"address"}],"name":"transferAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"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"},{"inputs":[{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"burnBuy","type":"uint256"},{"internalType":"uint256","name":"burnSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTransferFee","type":"uint256"}],"name":"updateTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260088054600161ff0160a01b03191661dead17905560016009819055600a8190556016805460ff19908116909155601a80549091169091179055601e6022553480156200005057600080fd5b506040518060400160405280600781526020016623b0bca1b7b4b760c91b8152506040518060400160405280600381526020016247415960e81b81525081600390816200009e91906200065f565b506004620000ad82826200065f565b5050506000620000c2620003f260201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d805473d33f8a43088f4ff302dd6763ad0511148a97ec926001600160a01b031991821617909155601e60138190556011819055600060148190556012819055601555600c819055600b5560068054737a250d5630b4cf539739df2c5dacb4c659f2488d9216821790556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa158015620001b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001de91906200072b565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000241573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026791906200072b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002db91906200072b565b600780546001600160a01b0319166001600160a01b0392909216918217905562000307906001620003f6565b306000908152601760205260408082208054600160ff1991821681179092553384528284208054821683179055600d546001600160a01b0316845291909220805490911690911790556b02408512ed90a0747b8000006200037b620003746005546001600160a01b031690565b826200044a565b6103e86002546200038d919062000756565b601055600160196000620003a96005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526019909252902080549091166001179055506200079b9050565b3390565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038216620004a65760405162461bcd60e51b815260206004820152601f60248201527f42455032303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b620004c2816002546200054f60201b6200188a1790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620004f59183906200188a6200054f821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b6000806200055e838562000779565b905083811015620005b25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200049d565b90505b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005e657607f821691505b6020821081036200060757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200054a57600081815260208120601f850160051c81016020861015620006365750805b601f850160051c820191505b81811015620006575782815560010162000642565b505050505050565b81516001600160401b038111156200067b576200067b620005bb565b62000693816200068c8454620005d1565b846200060d565b602080601f831160018114620006cb5760008415620006b25750858301515b600019600386901b1c1916600185901b17855562000657565b600085815260208120601f198616915b82811015620006fc57888601518255948401946001909101908401620006db565b50858210156200071b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200073e57600080fd5b81516001600160a01b0381168114620005b257600080fd5b6000826200077457634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620005b557634e487b7160e01b600052601160045260246000fd5b612bfd80620007ab6000396000f3fe60806040526004361061031e5760003560e01c8063715018a6116101ab578063adb873bd116100f7578063dd62ed3e11610095578063ebae7c1c1161006f578063ebae7c1c14610949578063f2fde38b1461095f578063f8b45b051461097f578063fc6b151c1461099557600080fd5b8063dd62ed3e146108d7578063e2f456051461091d578063e71dc3f51461093357600080fd5b8063b62496f5116100d1578063b62496f514610847578063b74e3b1114610877578063c6616ba114610897578063d5e37251146108b757600080fd5b8063adb873bd146107fb578063b494298814610811578063b53158ee1461082757600080fd5b80638da5cb5b116101645780639a7a23d61161013e5780639a7a23d614610785578063a457c2d7146107a5578063a9059cbb146107c5578063acb2ad6f146107e557600080fd5b80638da5cb5b1461073c57806395451c291461075a57806395d89b411461077057600080fd5b8063715018a61461069157806375829def146106a657806375f0a874146106c65780637fdde05c146106e65780638577a6d5146107065780638c3c82b21461072657600080fd5b806349bd5a5e1161026a5780635d098b3811610223578063679ca6e9116101fd578063679ca6e9146106105780636a42b8f8146106305780637088fb7f1461064657806370a082311461065b57600080fd5b80635d098b38146105b05780635eee4bae146105d057806366236b4a146105f057600080fd5b806349bd5a5e146104ec5780634a62bb651461050c5780634a74bb02146105265780634ada218b146105405780634fbee193146105615780635124f8741461059a57600080fd5b80631694505e116102d75780632307b441116102b15780632307b4411461047057806323b872dd14610490578063313ce567146104b057806339509351146104cc57600080fd5b80631694505e1461041b57806318160ddd1461043b5780631d7b1fb41461045a57600080fd5b806303fd2a451461032a57806305ca5f081461036757806306fdde031461038957806308dfe8a5146103ab57806309231602146103cb578063095ea7b3146103eb57600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5060085461034a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561037357600080fd5b50610387610382366004612645565b6109b5565b005b34801561039557600080fd5b5061039e610a86565b60405161035e919061265e565b3480156103b757600080fd5b506103876103c63660046126d6565b610b18565b3480156103d757600080fd5b506103876103e6366004612645565b610ba1565b3480156103f757600080fd5b5061040b61040636600461270b565b610c30565b604051901515815260200161035e565b34801561042757600080fd5b5060065461034a906001600160a01b031681565b34801561044757600080fd5b506002545b60405190815260200161035e565b34801561046657600080fd5b5061044c60225481565b34801561047c57600080fd5b5061038761048b36600461280d565b610c47565b34801561049c57600080fd5b5061040b6104ab3660046128cf565b610d9f565b3480156104bc57600080fd5b506040516012815260200161035e565b3480156104d857600080fd5b5061040b6104e736600461270b565b610e08565b3480156104f857600080fd5b5060075461034a906001600160a01b031681565b34801561051857600080fd5b50601a5461040b9060ff1681565b34801561053257600080fd5b5060165461040b9060ff1681565b34801561054c57600080fd5b5060085461040b90600160a81b900460ff1681565b34801561056d57600080fd5b5061040b61057c366004612910565b6001600160a01b031660009081526017602052604090205460ff1690565b3480156105a657600080fd5b5061044c60135481565b3480156105bc57600080fd5b506103876105cb366004612910565b610e3e565b3480156105dc57600080fd5b506103876105eb366004612645565b610ed5565b3480156105fc57600080fd5b5061038761060b366004612645565b610f17565b34801561061c57600080fd5b5061038761062b36600461292d565b610fc8565b34801561063c57600080fd5b5061044c601f5481565b34801561065257600080fd5b50610387611005565b34801561066757600080fd5b5061044c610676366004612910565b6001600160a01b031660009081526020819052604090205490565b34801561069d57600080fd5b50610387611062565b3480156106b257600080fd5b506103876106c1366004612910565b6110d6565b3480156106d257600080fd5b50600d5461034a906001600160a01b031681565b3480156106f257600080fd5b506103876107013660046126d6565b611147565b34801561071257600080fd5b50610387610721366004612645565b61119c565b34801561073257600080fd5b5061044c60215481565b34801561074857600080fd5b506005546001600160a01b031661034a565b34801561076657600080fd5b5061044c60115481565b34801561077c57600080fd5b5061039e61124c565b34801561079157600080fd5b506103876107a03660046126d6565b61125b565b3480156107b157600080fd5b5061040b6107c036600461270b565b61128f565b3480156107d157600080fd5b5061040b6107e036600461270b565b6112de565b3480156107f157600080fd5b5061044c60155481565b34801561080757600080fd5b5061044c60125481565b34801561081d57600080fd5b5061044c601e5481565b34801561083357600080fd5b50610387610842366004612948565b6112eb565b34801561085357600080fd5b5061040b610862366004612910565b60186020526000908152604090205460ff1681565b34801561088357600080fd5b50610387610892366004612645565b61146d565b3480156108a357600080fd5b506103876108b2366004612948565b6114fd565b3480156108c357600080fd5b506103876108d236600461292d565b611668565b3480156108e357600080fd5b5061044c6108f236600461297a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561092957600080fd5b5061044c60105481565b34801561093f57600080fd5b5061044c60145481565b34801561095557600080fd5b5061044c600f5481565b34801561096b57600080fd5b5061038761097a366004612910565b6116ea565b34801561098b57600080fd5b5061044c600e5481565b3480156109a157600080fd5b506103876109b0366004612645565b6117d5565b6005546001600160a01b031633146109e85760405162461bcd60e51b81526004016109df906129b3565b60405180910390fd5b6109fa81670de0b6b3a76400006129fe565b90506000610a15600954600a5461188a90919063ffffffff16565b90506000610a3882610a32600a54866118f090919063ffffffff16565b90611972565b90506000610a5583610a32600954876118f090919063ffffffff16565b9050610a60846119b4565b600a54610a6d9083611ac6565b600a55600954610a7d9082611ac6565b60095550505050565b606060038054610a9590612a15565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac190612a15565b8015610b0e5780601f10610ae357610100808354040283529160200191610b0e565b820191906000526020600020905b815481529060010190602001808311610af157829003601f168201915b5050505050905090565b6005546001600160a01b03163314610b425760405162461bcd60e51b81526004016109df906129b3565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610bcb5760405162461bcd60e51b81526004016109df906129b3565b6032811015610c1c5760405162461bcd60e51b815260206004820152601960248201527f63616e206e65766572206265207365742062656c6f772035300000000000000060448201526064016109df565b610c2a81633b9aca006129fe565b601b5550565b6000610c3d338484611b08565b5060015b92915050565b6005546001600160a01b03163314610c715760405162461bcd60e51b81526004016109df906129b3565b8051825114610cc25760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e677468000060448201526064016109df565b60c882511115610d1f5760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b60648201526084016109df565b60005b8251811015610d9a576000838281518110610d3f57610d3f612a4f565b602002602001015190506000838381518110610d5d57610d5d612a4f565b6020026020010151670de0b6b3a7640000610d7891906129fe565b9050610d85338383611c2d565b50508080610d9290612a65565b915050610d22565b505050565b6000610dac848484611db0565b610dfe8433610df985604051806060016040528060288152602001612b55602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061242f565b611b08565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c3d918590610df9908661188a565b6005546001600160a01b03163314610e685760405162461bcd60e51b81526004016109df906129b3565b6001600160a01b038116600081815260176020908152604091829020805460ff19166001179055600d80546001600160a01b0319168417905590519182527faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c22443391015b60405180910390a150565b6005546001600160a01b03163314610eff5760405162461bcd60e51b81526004016109df906129b3565b610f1181670de0b6b3a76400006129fe565b60105550565b6005546001600160a01b03163314610f415760405162461bcd60e51b81526004016109df906129b3565b610f5381670de0b6b3a76400006129fe565b90506103e8600254610f659190612a7e565b811015610fc35760405162461bcd60e51b815260206004820152602660248201527f6d61782074782063616e6e6f742062652073657420746f206c657373207468616044820152656e20302e312560d01b60648201526084016109df565b600f55565b6005546001600160a01b03163314610ff25760405162461bcd60e51b81526004016109df906129b3565b601a805460ff1916911515919091179055565b6005546001600160a01b0316331461102f5760405162461bcd60e51b81526004016109df906129b3565b6040514790339082156108fc029083906000818181858888f1935050505015801561105e573d6000803e3d6000fd5b5050565b6005546001600160a01b0316331461108c5760405162461bcd60e51b81526004016109df906129b3565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111005760405162461bcd60e51b81526004016109df906129b3565b6001600160a01b03811660009081526017602090815260408083208054600160ff1991821681179092556019909352922080549091169091179055611144816116ea565b50565b6005546001600160a01b031633146111715760405162461bcd60e51b81526004016109df906129b3565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111c65760405162461bcd60e51b81526004016109df906129b3565b60058111156112175760405162461bcd60e51b815260206004820152601d60248201527f7472616e73666572206665652063616e6e6f742065786365656420352500000060448201526064016109df565b60158190556040518181527f6fbeac6c79c640ca4f5f47271bd7a36c7eb83076224c65a3b3378c884472034390602001610eca565b606060048054610a9590612a15565b6005546001600160a01b031633146112855760405162461bcd60e51b81526004016109df906129b3565b61105e8282612469565b6000610c3d3384610df985604051806060016040528060258152602001612ba3602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061242f565b6000610c3d338484611db0565b6005546001600160a01b031633146113155760405162461bcd60e51b81526004016109df906129b3565b61132783670de0b6b3a76400006129fe565b925061133b82670de0b6b3a76400006129fe565b600854909250600160a81b900460ff161561135557600080fd5b6103e86002546113659190612a7e565b8310156113ac5760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b60448201526064016109df565b6103e86002546113bc9190612a7e565b8210156114035760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b60448201526064016109df565b600e839055600f82905561141b84633b9aca006129fe565b601b556008805460ff60a81b1916600160a81b17905543601e5542602155601f8190556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150505050565b6005546001600160a01b031633146114975760405162461bcd60e51b81526004016109df906129b3565b61012c8111156114f85760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b60648201526084016109df565b602255565b6005546001600160a01b031633146115275760405162461bcd60e51b81526004016109df906129b3565b6013849055601482905560118390556012819055600b839055600c84905560018211801590611557575060018111155b6115a35760405162461bcd60e51b815260206004820152601a60248201527f4275726e20466565732063616e6e6f742065786365656420312500000000000060448201526064016109df565b601e600b54111580156115b95750601e600c5411155b6116115760405162461bcd60e51b8152602060048201526024808201527f746f74616c20666565732063616e6e6f7420626520686967686572207468616e6044820152632033302560e01b60648201526084016109df565b6011546012546013546014546040805194855260208501939093529183015260608201527f5c3aee3d65f7eb02cded951435d06b06ef307bc7f57b98975c4a41dc116e711c9060800160405180910390a150505050565b6005546001600160a01b031633146116925760405162461bcd60e51b81526004016109df906129b3565b60165481151560ff9091161515036116a957600080fd5b6016805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001610eca565b6005546001600160a01b031633146117145760405162461bcd60e51b81526004016109df906129b3565b6001600160a01b0381166117795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109df565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146117ff5760405162461bcd60e51b81526004016109df906129b3565b61181181670de0b6b3a76400006129fe565b90506103e86002546118239190612a7e565b8110156118855760405162461bcd60e51b815260206004820152602a60248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015269207468616e20302e312560b01b60648201526084016109df565b600e55565b6000806118978385612aa0565b9050838110156118e95760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109df565b9392505050565b60008260000361190257506000610c41565b600061190e83856129fe565b90508261191b8583612a7e565b146118e95760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109df565b60006118e983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124bd565b806000036119bf5750565b6119c8816124eb565b60135460115460019182916000916119df91612aa0565b9050600081156119f6576119f34783611972565b90505b600081611a1060115460135461188a90919063ffffffff16565b611a1a91906129fe565b90508015611a7a57600d546040516001600160a01b03909116908290600081818185875af1925050503d8060008114611a6f576040519150601f19603f3d011682016040523d82523d6000602084013e611a74565b606091505b50909550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea981868015611aa65750855b6040805192835290151560208301520160405180910390a1505050505050565b60006118e983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061242f565b6001600160a01b038316611b6a5760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109df565b6001600160a01b038216611bcb5760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109df565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611c915760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109df565b6001600160a01b038216611cf35760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109df565b611d3081604051806060016040528060268152602001612b7d602691396001600160a01b038616600090815260208190526040902054919061242f565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611d5f908261188a565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c20565b6001600160a01b038316611e155760405162461bcd60e51b815260206004820152602660248201527f4942455032303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016109df565b6001600160a01b038216611e775760405162461bcd60e51b8152602060048201526024808201527f4942455032303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109df565b6001600160a01b038316600090815260196020526040812054819060ff16611ef257600854600160a81b900460ff16611ef25760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c656460448201526064016109df565b82600003611f0d57611f0685856000611c2d565b5050505050565b6008546001600160a01b0390811690851603611f4557611f2e858585611c2d565b600254611f3b9084611ac6565b6002555050505050565b600854600160a01b900460ff16158015611f7857506001600160a01b03851660009081526017602052604090205460ff16155b8015611f9d57506001600160a01b03841660009081526017602052604090205460ff16155b15612424576001600160a01b0380851660009081526018602052604080822054928816825290205460ff918216911680158015611fd8575081155b15612027576000611ff96064610a32601554896118f090919063ffffffff16565b90506120058682611ac6565b9550612012883083611c2d565b61201d888888611c2d565b5050505050505050565b811561211257601154601254601a54919550935060ff161561210d57602254326000908152601d60205260409020546120609190612aa0565b4210156120a85760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b60448201526064016109df565b600f548511156120fa5760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d6974000000000060448201526064016109df565b326000908152601d602052604090204290555b61230a565b601354601454601a54919550935060ff161561228857601f546021546121389190612aa0565b421161217b5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b60448201526064016109df565b601b543a11156121cd5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e000000000000000060448201526064016109df565b326000908152601c60205260409020544390036122235760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b60448201526064016109df565b600f548511156122755760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d6974000000000060448201526064016109df565b326000908152601c602052604090204390555b6001600160a01b038616600090815260208190526040902054600e546122ae8783612aa0565b11156123085760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b60648201526084016109df565b505b306000908152602081905260409020546010548591908110801590819061232e5750845b1561237a576008805460ff60a01b1916600160a01b179055306000908152602081905260408120549050612361816119b4565b506001600a8190556009556008805460ff60a01b191690555b600061238b6064610a328b876118f0565b9050600061239e6064610a328c8b6118f0565b90506123b46123ad8284612aa0565b8b90611ac6565b995086156123d1576009546123c9908361188a565b6009556123e2565b600a546123de908361188a565b600a555b6123ed8c3084611c2d565b801561241c5760085461240b908d906001600160a01b031683611c2d565b6002546124189082611ac6565b6002555b505050505050505b611f06858585611c2d565b600081848411156124535760405162461bcd60e51b81526004016109df919061265e565b5060006124608486612ab3565b95945050505050565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600081836124de5760405162461bcd60e51b81526004016109df919061265e565b5060006124608486612a7e565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061252057612520612a4f565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259d9190612ac6565b816001815181106125b0576125b0612a4f565b6001600160a01b0392831660209182029290920101526006546125d69130911684611b08565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061260f908590600090869030904290600401612ae3565b600060405180830381600087803b15801561262957600080fd5b505af115801561263d573d6000803e3d6000fd5b505050505050565b60006020828403121561265757600080fd5b5035919050565b600060208083528351808285015260005b8181101561268b5785810183015185820160400152820161266f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461114457600080fd5b803580151581146126d157600080fd5b919050565b600080604083850312156126e957600080fd5b82356126f4816126ac565b9150612702602084016126c1565b90509250929050565b6000806040838503121561271e57600080fd5b8235612729816126ac565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561277657612776612737565b604052919050565b600067ffffffffffffffff82111561279857612798612737565b5060051b60200190565b600082601f8301126127b357600080fd5b813560206127c86127c38361277e565b61274d565b82815260059290921b840181019181810190868411156127e757600080fd5b8286015b8481101561280257803583529183019183016127eb565b509695505050505050565b6000806040838503121561282057600080fd5b823567ffffffffffffffff8082111561283857600080fd5b818501915085601f83011261284c57600080fd5b8135602061285c6127c38361277e565b82815260059290921b8401810191818101908984111561287b57600080fd5b948201945b838610156128a2578535612893816126ac565b82529482019490820190612880565b965050860135925050808211156128b857600080fd5b506128c5858286016127a2565b9150509250929050565b6000806000606084860312156128e457600080fd5b83356128ef816126ac565b925060208401356128ff816126ac565b929592945050506040919091013590565b60006020828403121561292257600080fd5b81356118e9816126ac565b60006020828403121561293f57600080fd5b6118e9826126c1565b6000806000806080858703121561295e57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561298d57600080fd5b8235612998816126ac565b915060208301356129a8816126ac565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c4157610c416129e8565b600181811c90821680612a2957607f821691505b602082108103612a4957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201612a7757612a776129e8565b5060010190565b600082612a9b57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c4157610c416129e8565b81810381811115610c4157610c416129e8565b600060208284031215612ad857600080fd5b81516118e9816126ac565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b335784516001600160a01b031683529383019391830191600101612b0e565b50506001600160a01b0396909616606085015250505060800152939250505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209881833c681768102aad1df87c8b000cdf779dab4fbc3fbf54b2c48bdbc5af1764736f6c63430008110033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c8063715018a6116101ab578063adb873bd116100f7578063dd62ed3e11610095578063ebae7c1c1161006f578063ebae7c1c14610949578063f2fde38b1461095f578063f8b45b051461097f578063fc6b151c1461099557600080fd5b8063dd62ed3e146108d7578063e2f456051461091d578063e71dc3f51461093357600080fd5b8063b62496f5116100d1578063b62496f514610847578063b74e3b1114610877578063c6616ba114610897578063d5e37251146108b757600080fd5b8063adb873bd146107fb578063b494298814610811578063b53158ee1461082757600080fd5b80638da5cb5b116101645780639a7a23d61161013e5780639a7a23d614610785578063a457c2d7146107a5578063a9059cbb146107c5578063acb2ad6f146107e557600080fd5b80638da5cb5b1461073c57806395451c291461075a57806395d89b411461077057600080fd5b8063715018a61461069157806375829def146106a657806375f0a874146106c65780637fdde05c146106e65780638577a6d5146107065780638c3c82b21461072657600080fd5b806349bd5a5e1161026a5780635d098b3811610223578063679ca6e9116101fd578063679ca6e9146106105780636a42b8f8146106305780637088fb7f1461064657806370a082311461065b57600080fd5b80635d098b38146105b05780635eee4bae146105d057806366236b4a146105f057600080fd5b806349bd5a5e146104ec5780634a62bb651461050c5780634a74bb02146105265780634ada218b146105405780634fbee193146105615780635124f8741461059a57600080fd5b80631694505e116102d75780632307b441116102b15780632307b4411461047057806323b872dd14610490578063313ce567146104b057806339509351146104cc57600080fd5b80631694505e1461041b57806318160ddd1461043b5780631d7b1fb41461045a57600080fd5b806303fd2a451461032a57806305ca5f081461036757806306fdde031461038957806308dfe8a5146103ab57806309231602146103cb578063095ea7b3146103eb57600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5060085461034a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561037357600080fd5b50610387610382366004612645565b6109b5565b005b34801561039557600080fd5b5061039e610a86565b60405161035e919061265e565b3480156103b757600080fd5b506103876103c63660046126d6565b610b18565b3480156103d757600080fd5b506103876103e6366004612645565b610ba1565b3480156103f757600080fd5b5061040b61040636600461270b565b610c30565b604051901515815260200161035e565b34801561042757600080fd5b5060065461034a906001600160a01b031681565b34801561044757600080fd5b506002545b60405190815260200161035e565b34801561046657600080fd5b5061044c60225481565b34801561047c57600080fd5b5061038761048b36600461280d565b610c47565b34801561049c57600080fd5b5061040b6104ab3660046128cf565b610d9f565b3480156104bc57600080fd5b506040516012815260200161035e565b3480156104d857600080fd5b5061040b6104e736600461270b565b610e08565b3480156104f857600080fd5b5060075461034a906001600160a01b031681565b34801561051857600080fd5b50601a5461040b9060ff1681565b34801561053257600080fd5b5060165461040b9060ff1681565b34801561054c57600080fd5b5060085461040b90600160a81b900460ff1681565b34801561056d57600080fd5b5061040b61057c366004612910565b6001600160a01b031660009081526017602052604090205460ff1690565b3480156105a657600080fd5b5061044c60135481565b3480156105bc57600080fd5b506103876105cb366004612910565b610e3e565b3480156105dc57600080fd5b506103876105eb366004612645565b610ed5565b3480156105fc57600080fd5b5061038761060b366004612645565b610f17565b34801561061c57600080fd5b5061038761062b36600461292d565b610fc8565b34801561063c57600080fd5b5061044c601f5481565b34801561065257600080fd5b50610387611005565b34801561066757600080fd5b5061044c610676366004612910565b6001600160a01b031660009081526020819052604090205490565b34801561069d57600080fd5b50610387611062565b3480156106b257600080fd5b506103876106c1366004612910565b6110d6565b3480156106d257600080fd5b50600d5461034a906001600160a01b031681565b3480156106f257600080fd5b506103876107013660046126d6565b611147565b34801561071257600080fd5b50610387610721366004612645565b61119c565b34801561073257600080fd5b5061044c60215481565b34801561074857600080fd5b506005546001600160a01b031661034a565b34801561076657600080fd5b5061044c60115481565b34801561077c57600080fd5b5061039e61124c565b34801561079157600080fd5b506103876107a03660046126d6565b61125b565b3480156107b157600080fd5b5061040b6107c036600461270b565b61128f565b3480156107d157600080fd5b5061040b6107e036600461270b565b6112de565b3480156107f157600080fd5b5061044c60155481565b34801561080757600080fd5b5061044c60125481565b34801561081d57600080fd5b5061044c601e5481565b34801561083357600080fd5b50610387610842366004612948565b6112eb565b34801561085357600080fd5b5061040b610862366004612910565b60186020526000908152604090205460ff1681565b34801561088357600080fd5b50610387610892366004612645565b61146d565b3480156108a357600080fd5b506103876108b2366004612948565b6114fd565b3480156108c357600080fd5b506103876108d236600461292d565b611668565b3480156108e357600080fd5b5061044c6108f236600461297a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561092957600080fd5b5061044c60105481565b34801561093f57600080fd5b5061044c60145481565b34801561095557600080fd5b5061044c600f5481565b34801561096b57600080fd5b5061038761097a366004612910565b6116ea565b34801561098b57600080fd5b5061044c600e5481565b3480156109a157600080fd5b506103876109b0366004612645565b6117d5565b6005546001600160a01b031633146109e85760405162461bcd60e51b81526004016109df906129b3565b60405180910390fd5b6109fa81670de0b6b3a76400006129fe565b90506000610a15600954600a5461188a90919063ffffffff16565b90506000610a3882610a32600a54866118f090919063ffffffff16565b90611972565b90506000610a5583610a32600954876118f090919063ffffffff16565b9050610a60846119b4565b600a54610a6d9083611ac6565b600a55600954610a7d9082611ac6565b60095550505050565b606060038054610a9590612a15565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac190612a15565b8015610b0e5780601f10610ae357610100808354040283529160200191610b0e565b820191906000526020600020905b815481529060010190602001808311610af157829003601f168201915b5050505050905090565b6005546001600160a01b03163314610b425760405162461bcd60e51b81526004016109df906129b3565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610bcb5760405162461bcd60e51b81526004016109df906129b3565b6032811015610c1c5760405162461bcd60e51b815260206004820152601960248201527f63616e206e65766572206265207365742062656c6f772035300000000000000060448201526064016109df565b610c2a81633b9aca006129fe565b601b5550565b6000610c3d338484611b08565b5060015b92915050565b6005546001600160a01b03163314610c715760405162461bcd60e51b81526004016109df906129b3565b8051825114610cc25760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e677468000060448201526064016109df565b60c882511115610d1f5760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b60648201526084016109df565b60005b8251811015610d9a576000838281518110610d3f57610d3f612a4f565b602002602001015190506000838381518110610d5d57610d5d612a4f565b6020026020010151670de0b6b3a7640000610d7891906129fe565b9050610d85338383611c2d565b50508080610d9290612a65565b915050610d22565b505050565b6000610dac848484611db0565b610dfe8433610df985604051806060016040528060288152602001612b55602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061242f565b611b08565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c3d918590610df9908661188a565b6005546001600160a01b03163314610e685760405162461bcd60e51b81526004016109df906129b3565b6001600160a01b038116600081815260176020908152604091829020805460ff19166001179055600d80546001600160a01b0319168417905590519182527faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c22443391015b60405180910390a150565b6005546001600160a01b03163314610eff5760405162461bcd60e51b81526004016109df906129b3565b610f1181670de0b6b3a76400006129fe565b60105550565b6005546001600160a01b03163314610f415760405162461bcd60e51b81526004016109df906129b3565b610f5381670de0b6b3a76400006129fe565b90506103e8600254610f659190612a7e565b811015610fc35760405162461bcd60e51b815260206004820152602660248201527f6d61782074782063616e6e6f742062652073657420746f206c657373207468616044820152656e20302e312560d01b60648201526084016109df565b600f55565b6005546001600160a01b03163314610ff25760405162461bcd60e51b81526004016109df906129b3565b601a805460ff1916911515919091179055565b6005546001600160a01b0316331461102f5760405162461bcd60e51b81526004016109df906129b3565b6040514790339082156108fc029083906000818181858888f1935050505015801561105e573d6000803e3d6000fd5b5050565b6005546001600160a01b0316331461108c5760405162461bcd60e51b81526004016109df906129b3565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111005760405162461bcd60e51b81526004016109df906129b3565b6001600160a01b03811660009081526017602090815260408083208054600160ff1991821681179092556019909352922080549091169091179055611144816116ea565b50565b6005546001600160a01b031633146111715760405162461bcd60e51b81526004016109df906129b3565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111c65760405162461bcd60e51b81526004016109df906129b3565b60058111156112175760405162461bcd60e51b815260206004820152601d60248201527f7472616e73666572206665652063616e6e6f742065786365656420352500000060448201526064016109df565b60158190556040518181527f6fbeac6c79c640ca4f5f47271bd7a36c7eb83076224c65a3b3378c884472034390602001610eca565b606060048054610a9590612a15565b6005546001600160a01b031633146112855760405162461bcd60e51b81526004016109df906129b3565b61105e8282612469565b6000610c3d3384610df985604051806060016040528060258152602001612ba3602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061242f565b6000610c3d338484611db0565b6005546001600160a01b031633146113155760405162461bcd60e51b81526004016109df906129b3565b61132783670de0b6b3a76400006129fe565b925061133b82670de0b6b3a76400006129fe565b600854909250600160a81b900460ff161561135557600080fd5b6103e86002546113659190612a7e565b8310156113ac5760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b60448201526064016109df565b6103e86002546113bc9190612a7e565b8210156114035760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b60448201526064016109df565b600e839055600f82905561141b84633b9aca006129fe565b601b556008805460ff60a81b1916600160a81b17905543601e5542602155601f8190556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150505050565b6005546001600160a01b031633146114975760405162461bcd60e51b81526004016109df906129b3565b61012c8111156114f85760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b60648201526084016109df565b602255565b6005546001600160a01b031633146115275760405162461bcd60e51b81526004016109df906129b3565b6013849055601482905560118390556012819055600b839055600c84905560018211801590611557575060018111155b6115a35760405162461bcd60e51b815260206004820152601a60248201527f4275726e20466565732063616e6e6f742065786365656420312500000000000060448201526064016109df565b601e600b54111580156115b95750601e600c5411155b6116115760405162461bcd60e51b8152602060048201526024808201527f746f74616c20666565732063616e6e6f7420626520686967686572207468616e6044820152632033302560e01b60648201526084016109df565b6011546012546013546014546040805194855260208501939093529183015260608201527f5c3aee3d65f7eb02cded951435d06b06ef307bc7f57b98975c4a41dc116e711c9060800160405180910390a150505050565b6005546001600160a01b031633146116925760405162461bcd60e51b81526004016109df906129b3565b60165481151560ff9091161515036116a957600080fd5b6016805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001610eca565b6005546001600160a01b031633146117145760405162461bcd60e51b81526004016109df906129b3565b6001600160a01b0381166117795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109df565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146117ff5760405162461bcd60e51b81526004016109df906129b3565b61181181670de0b6b3a76400006129fe565b90506103e86002546118239190612a7e565b8110156118855760405162461bcd60e51b815260206004820152602a60248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015269207468616e20302e312560b01b60648201526084016109df565b600e55565b6000806118978385612aa0565b9050838110156118e95760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109df565b9392505050565b60008260000361190257506000610c41565b600061190e83856129fe565b90508261191b8583612a7e565b146118e95760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109df565b60006118e983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124bd565b806000036119bf5750565b6119c8816124eb565b60135460115460019182916000916119df91612aa0565b9050600081156119f6576119f34783611972565b90505b600081611a1060115460135461188a90919063ffffffff16565b611a1a91906129fe565b90508015611a7a57600d546040516001600160a01b03909116908290600081818185875af1925050503d8060008114611a6f576040519150601f19603f3d011682016040523d82523d6000602084013e611a74565b606091505b50909550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea981868015611aa65750855b6040805192835290151560208301520160405180910390a1505050505050565b60006118e983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061242f565b6001600160a01b038316611b6a5760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109df565b6001600160a01b038216611bcb5760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109df565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611c915760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109df565b6001600160a01b038216611cf35760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109df565b611d3081604051806060016040528060268152602001612b7d602691396001600160a01b038616600090815260208190526040902054919061242f565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611d5f908261188a565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c20565b6001600160a01b038316611e155760405162461bcd60e51b815260206004820152602660248201527f4942455032303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016109df565b6001600160a01b038216611e775760405162461bcd60e51b8152602060048201526024808201527f4942455032303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109df565b6001600160a01b038316600090815260196020526040812054819060ff16611ef257600854600160a81b900460ff16611ef25760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c656460448201526064016109df565b82600003611f0d57611f0685856000611c2d565b5050505050565b6008546001600160a01b0390811690851603611f4557611f2e858585611c2d565b600254611f3b9084611ac6565b6002555050505050565b600854600160a01b900460ff16158015611f7857506001600160a01b03851660009081526017602052604090205460ff16155b8015611f9d57506001600160a01b03841660009081526017602052604090205460ff16155b15612424576001600160a01b0380851660009081526018602052604080822054928816825290205460ff918216911680158015611fd8575081155b15612027576000611ff96064610a32601554896118f090919063ffffffff16565b90506120058682611ac6565b9550612012883083611c2d565b61201d888888611c2d565b5050505050505050565b811561211257601154601254601a54919550935060ff161561210d57602254326000908152601d60205260409020546120609190612aa0565b4210156120a85760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b60448201526064016109df565b600f548511156120fa5760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d6974000000000060448201526064016109df565b326000908152601d602052604090204290555b61230a565b601354601454601a54919550935060ff161561228857601f546021546121389190612aa0565b421161217b5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b60448201526064016109df565b601b543a11156121cd5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e000000000000000060448201526064016109df565b326000908152601c60205260409020544390036122235760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b60448201526064016109df565b600f548511156122755760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d6974000000000060448201526064016109df565b326000908152601c602052604090204390555b6001600160a01b038616600090815260208190526040902054600e546122ae8783612aa0565b11156123085760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b60648201526084016109df565b505b306000908152602081905260409020546010548591908110801590819061232e5750845b1561237a576008805460ff60a01b1916600160a01b179055306000908152602081905260408120549050612361816119b4565b506001600a8190556009556008805460ff60a01b191690555b600061238b6064610a328b876118f0565b9050600061239e6064610a328c8b6118f0565b90506123b46123ad8284612aa0565b8b90611ac6565b995086156123d1576009546123c9908361188a565b6009556123e2565b600a546123de908361188a565b600a555b6123ed8c3084611c2d565b801561241c5760085461240b908d906001600160a01b031683611c2d565b6002546124189082611ac6565b6002555b505050505050505b611f06858585611c2d565b600081848411156124535760405162461bcd60e51b81526004016109df919061265e565b5060006124608486612ab3565b95945050505050565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600081836124de5760405162461bcd60e51b81526004016109df919061265e565b5060006124608486612a7e565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061252057612520612a4f565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259d9190612ac6565b816001815181106125b0576125b0612a4f565b6001600160a01b0392831660209182029290920101526006546125d69130911684611b08565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061260f908590600090869030904290600401612ae3565b600060405180830381600087803b15801561262957600080fd5b505af115801561263d573d6000803e3d6000fd5b505050505050565b60006020828403121561265757600080fd5b5035919050565b600060208083528351808285015260005b8181101561268b5785810183015185820160400152820161266f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461114457600080fd5b803580151581146126d157600080fd5b919050565b600080604083850312156126e957600080fd5b82356126f4816126ac565b9150612702602084016126c1565b90509250929050565b6000806040838503121561271e57600080fd5b8235612729816126ac565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561277657612776612737565b604052919050565b600067ffffffffffffffff82111561279857612798612737565b5060051b60200190565b600082601f8301126127b357600080fd5b813560206127c86127c38361277e565b61274d565b82815260059290921b840181019181810190868411156127e757600080fd5b8286015b8481101561280257803583529183019183016127eb565b509695505050505050565b6000806040838503121561282057600080fd5b823567ffffffffffffffff8082111561283857600080fd5b818501915085601f83011261284c57600080fd5b8135602061285c6127c38361277e565b82815260059290921b8401810191818101908984111561287b57600080fd5b948201945b838610156128a2578535612893816126ac565b82529482019490820190612880565b965050860135925050808211156128b857600080fd5b506128c5858286016127a2565b9150509250929050565b6000806000606084860312156128e457600080fd5b83356128ef816126ac565b925060208401356128ff816126ac565b929592945050506040919091013590565b60006020828403121561292257600080fd5b81356118e9816126ac565b60006020828403121561293f57600080fd5b6118e9826126c1565b6000806000806080858703121561295e57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561298d57600080fd5b8235612998816126ac565b915060208301356129a8816126ac565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c4157610c416129e8565b600181811c90821680612a2957607f821691505b602082108103612a4957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201612a7757612a776129e8565b5060010190565b600082612a9b57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c4157610c416129e8565b81810381811115610c4157610c416129e8565b600060208284031215612ad857600080fd5b81516118e9816126ac565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b335784516001600160a01b031683529383019391830191600101612b0e565b50506001600160a01b0396909616606085015250505060800152939250505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209881833c681768102aad1df87c8b000cdf779dab4fbc3fbf54b2c48bdbc5af1764736f6c63430008110033

Deployed Bytecode Sourcemap

15390:15279:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15553:64;;;;;;;;;;-1:-1:-1;15553:64:0;;;;-1:-1:-1;;;;;15553:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;15553:64:0;;;;;;;;28831:443;;;;;;;;;;-1:-1:-1;28831:443:0;;;;;:::i;:::-;;:::i;:::-;;3273:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20089:181::-;;;;;;;;;;-1:-1:-1;20089:181:0;;;;;:::i;:::-;;:::i;20992:166::-;;;;;;;;;;-1:-1:-1;20992:166:0;;;;;:::i;:::-;;:::i;4187:169::-;;;;;;;;;;-1:-1:-1;4187:169:0;;;;;:::i;:::-;;:::i;:::-;;;2066:14:1;;2059:22;2041:41;;2029:2;2014:18;4187:169:0;1901:187:1;15468:41:0;;;;;;;;;;-1:-1:-1;15468:41:0;;;;-1:-1:-1;;;;;15468:41:0;;;3594:108;;;;;;;;;;-1:-1:-1;3682:12:0;;3594:108;;;2474:25:1;;;2462:2;2447:18;3594:108:0;2328:177:1;16839:33:0;;;;;;;;;;;;;;;;30105:561;;;;;;;;;;-1:-1:-1;30105:561:0;;;;;:::i;:::-;;:::i;4364:345::-;;;;;;;;;;-1:-1:-1;4364:345:0;;;;;:::i;:::-;;:::i;18961:93::-;;;;;;;;;;-1:-1:-1;18961:93:0;;19044:2;5600:36:1;;5588:2;5573:18;18961:93:0;5458:184:1;4717:218:0;;;;;;;;;;-1:-1:-1;4717:218:0;;;;;:::i;:::-;;:::i;15518:28::-;;;;;;;;;;-1:-1:-1;15518:28:0;;;;-1:-1:-1;;;;;15518:28:0;;;16426:33;;;;;;;;;;-1:-1:-1;16426:33:0;;;;;;;;16178:41;;;;;;;;;;-1:-1:-1;16178:41:0;;;;;;;;15652:34;;;;;;;;;;-1:-1:-1;15652:34:0;;;;-1:-1:-1;;;15652:34:0;;;;;;23357:126;;;;;;;;;;-1:-1:-1;23357:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;23447:28:0;23423:4;23447:28;;;:19;:28;;;;;;;;;23357:126;16067:31;;;;;;;;;;;;;;;;19868:205;;;;;;;;;;-1:-1:-1;19868:205:0;;;;;:::i;:::-;;:::i;21510:120::-;;;;;;;;;;-1:-1:-1;21510:120:0;;;;;:::i;:::-;;:::i;20775:209::-;;;;;;;;;;-1:-1:-1;20775:209:0;;;;;:::i;:::-;;:::i;20433:99::-;;;;;;;;;;-1:-1:-1;20433:99:0;;;;;:::i;:::-;;:::i;16741:20::-;;;;;;;;;;;;;;;;21356:146;;;;;;;;;;;;;:::i;3710:127::-;;;;;;;;;;-1:-1:-1;3710:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3811:18:0;3784:7;3811:18;;;;;;;;;;;;3710:127;7165:148;;;;;;;;;;;;;:::i;22198:212::-;;;;;;;;;;-1:-1:-1;22198:212:0;;;;;:::i;:::-;;:::i;15845:38::-;;;;;;;;;;-1:-1:-1;15845:38:0;;;;-1:-1:-1;;;;;15845:38:0;;;20278:147;;;;;;;;;;-1:-1:-1;20278:147:0;;;;;:::i;:::-;;:::i;22418:234::-;;;;;;;;;;-1:-1:-1;22418:234:0;;;;;:::i;:::-;;:::i;16801:30::-;;;;;;;;;;;;;;;;6951:79;;;;;;;;;;-1:-1:-1;7016:6:0;;-1:-1:-1;;;;;7016:6:0;6951:79;;15995:32;;;;;;;;;;;;;;;;3381:104;;;;;;;;;;;;;:::i;21854:140::-;;;;;;;;;;-1:-1:-1;21854:140:0;;;;;:::i;:::-;;:::i;4943:286::-;;;;;;;;;;-1:-1:-1;4943:286:0;;;;;:::i;:::-;;:::i;3845:175::-;;;;;;;;;;-1:-1:-1;3845:175:0;;;;;:::i;:::-;;:::i;16137:26::-;;;;;;;;;;;;;;;;16034;;;;;;;;;;;;;;;;16690;;;;;;;;;;;;;;;;19099:757;;;;;;;;;;-1:-1:-1;19099:757:0;;;;;:::i;:::-;;:::i;16287:57::-;;;;;;;;;;-1:-1:-1;16287:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21166:174;;;;;;;;;;-1:-1:-1;21166:174:0;;;;;:::i;:::-;;:::i;22660:689::-;;;;;;;;;;-1:-1:-1;22660:689:0;;;;;:::i;:::-;;:::i;21638:208::-;;;;;;;;;;-1:-1:-1;21638:208:0;;;;;:::i;:::-;;:::i;4028:151::-;;;;;;;;;;-1:-1:-1;4028:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4144:18:0;;;4117:7;4144:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4028:151;15955:33;;;;;;;;;;;;;;;;16105:25;;;;;;;;;;;;;;;;15928:20;;;;;;;;;;;;;;;;7321:244;;;;;;;;;;-1:-1:-1;7321:244:0;;;;;:::i;:::-;;:::i;15897:24::-;;;;;;;;;;;;;;;;20542:221;;;;;;;;;;-1:-1:-1;20542:221:0;;;;;:::i;:::-;;:::i;28831:443::-;7078:6;;-1:-1:-1;;;;;7078:6:0;212:10;7078:22;7070:67;;;;-1:-1:-1;;;7070:67:0;;;;;;;:::i;:::-;;;;;;;;;28919:17:::1;:6:::0;28929::::1;28919:17;:::i;:::-;28910:26;;28947:19;28969:25;28983:10;;28969:9;;:13;;:25;;;;:::i;:::-;28947:47;;29005:15;29023:38;29049:11;29023:21;29034:9;;29023:6;:10;;:21;;;;:::i;:::-;:25:::0;::::1;:38::i;:::-;29005:56;;29072:16;29091:39;29118:11;29091:22;29102:10;;29091:6;:10;;:22;;;;:::i;:39::-;29072:58;;29143:28;29164:6;29143:20;:28::i;:::-;29196:9;::::0;:22:::1;::::0;29210:7;29196:13:::1;:22::i;:::-;29184:9;:34:::0;29242:10:::1;::::0;:24:::1;::::0;29257:8;29242:14:::1;:24::i;:::-;29229:10;:37:::0;-1:-1:-1;;;;28831:443:0:o;3273:100::-;3327:13;3360:5;3353:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3273:100;:::o;20089:181::-;7078:6;;-1:-1:-1;;;;;7078:6:0;212:10;7078:22;7070:67;;;;-1:-1:-1;;;7070:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20173:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20173:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20228:34;;2041:41:1;;;20228:34:0::1;::::0;2014:18:1;20228:34:0::1;;;;;;;20089:181:::0;;:::o;20992:166::-;7078:6;;-1:-1:-1;;;;;7078:6:0;212:10;7078:22;7070:67;;;;-1:-1:-1;;;7070:67:0;;;;;;;:::i;:::-;21078:2:::1;21070:4;:10;;21062:48;;;::::0;-1:-1:-1;;;21062:48:0;;8344:2:1;21062:48:0::1;::::0;::::1;8326:21:1::0;8383:2;8363:18;;;8356:30;8422:27;8402:18;;;8395:55;8467:18;;21062:48:0::1;8142:349:1::0;21062:48:0::1;21137:13;:4:::0;21144:6:::1;21137:13;:::i;:::-;21121;:29:::0;-1:-1:-1;20992:166:0:o;4187:169::-;4270:4;4287:39;212:10;4310:7;4319:6;4287:8;:39::i;:::-;-1:-1:-1;4344:4:0;4187:169;;;;;:::o;30105:561::-;7078:6;;-1:-1:-1;;;;;7078:6:0;212:10;7078:22;7070:67;;;;-1:-1:-1;;;7070:67:0;;;;;;;:::i;:::-;30277:6:::1;:13;30252:14;:21;:38;30244:81;;;::::0;-1:-1:-1;;;30244:81:0;;8698:2:1;30244:81:0::1;::::0;::::1;8680:21:1::0;8737:2;8717:18;;;8710:30;8776:32;8756:18;;;8749:60;8826:18;;30244:81:0::1;8496:354:1::0;30244:81:0::1;30369:3;30344:14;:21;:28;;30336:75;;;::::0;-1:-1:-1;;;30336:75:0;;9057:2:1;30336:75:0::1;::::0;::::1;9039:21:1::0;9096:2;9076:18;;;9069:30;9135:34;9115:18;;;9108:62;-1:-1:-1;;;9186:18:1;;;9179:32;9228:19;;30336:75:0::1;8855:398:1::0;30336:75:0::1;30427:9;30422:237;30446:14;:21;30442:1;:25;30422:237;;;30489:14;30506;30521:1;30506:17;;;;;;;;:::i;:::-;;;;;;;30489:34;;30538:21;30562:6;30569:1;30562:9;;;;;;;;:::i;:::-;;;;;;;30575:6;30562:20;;;;:::i;:::-;30538:44;;30597:50;30613:10;30625:6;30633:13;30597:15;:50::i;:::-;30474:185;;30469:3;;;;;:::i;:::-;;;;30422:237;;;;30105:561:::0;;:::o;4364:345::-;4477:4;4494:36;4504:6;4512:9;4523:6;4494:9;:36::i;:::-;4541:138;4550:6;212:10;4572:106;4610:6;4572:106;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4572:19:0;;;;;;:11;:19;;;;;;;;212:10;4572:33;;;;;;;;;;:37;:106::i;:::-;4541:8;:138::i;:::-;-1:-1:-1;4697:4:0;4364:345;;;;;:::o;4717:218::-;212:10;4805:4;4854:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4854:34:0;;;;;;;;;;4805:4;;4822:83;;4845:7;;4854:50;;4893:10;4854:38;:50::i;19868:205::-;7078:6;;-1:-1:-1;;;;;7078:6:0;212:10;7078:22;7070:67;;;;-1:-1:-1;;;7070:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19942:27:0;::::1;;::::0;;;:19:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;19942:34:0::1;19972:4;19942:34;::::0;;19987:15:::1;:33:::0;;-1:-1:-1;;;;;;19987:33:0::1;::::0;::::1;::::0;;20036:29;;160:51:1;;;20036:29:0::1;::::0;133:18:1;20036:29:0::1;;;;;;;;19868:205:::0;:::o;21510:120::-;7078:6;;-1:-1:-1;;;;;7078:6:0;212:10;7078:22;7070:67;;;;-1:-1:-1;;;7070:67:0;;;;;;;:::i;:::-;21605:17:::1;:6:::0;21615::::1;21605:17;:::i;:::-;21584:18;:38:::0;-1:-1:-1;21510:120:0:o;20775:209::-;7078:6;;-1:-1:-1;;;;;7078:6:0;212:10;7078:22;7070:67;;;;-1:-1:-1;;;7070:67:0;;;;;;;:::i;:::-;20846:16:::1;:5:::0;20855:6:::1;20846:16;:::i;:::-;20838:24;;20905:4;20890:12;;:19;;;;:::i;:::-;20881:5;:28;;20873:79;;;::::0;-1:-1:-1;;;20873:79:0;;9954:2:1;20873:79:0::1;::::0;::::1;9936:21:1::0;9993:2;9973:18;;;9966:30;10032:34;10012:18;;;10005:62;-1:-1:-1;;;10083:18:1;;;10076:36;10129:19;;20873:79:0::1;9752:402:1::0;20873:79:0::1;20963:5;:13:::0;20775:209::o;20433:99::-;7078:6;;-1:-1:-1;;;;;7078:6:0;212:10;7078:22;7070:67;;;;-1:-1:-1;;;7070:67:0;;;;;;;:::i;:::-;20502:14:::1;:22:::0;;-1:-1:-1;;20502:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20433:99::o;21356:146::-;7078:6;;-1:-1:-1;;;;;7078:6:0;212:10;7078:22;7070:67;;;;-1:-1:-1;;;7070:67:0;;;;;;;:::i;:::-;21455:39:::1;::::0;21423:21:::1;::::0;21463:10:::1;::::0;21455:39;::::1;;;::::0;21423:21;;21403:17:::1;21455:39:::0;21403:17;21455:39;21423:21;21463:10;21455:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21392:110;21356:146::o:0;7165:148::-;7078:6;;-1:-1:-1;;;;;7078:6:0;212:10;7078:22;7070:67;;;;-1:-1:-1;;;7070:67:0;;;;;;;:::i;:::-;7256:6:::1;::::0;7235:40:::1;::::0;7272:1:::1;::::0;-1:-1:-1;;;;;7256:6:0::1;::::0;7235:40:::1;::::0;7272:1;;7235:40:::1;7286:6;:19:::0;;-1:-1:-1;;;;;;7286:19:0::1;::::0;;7165:148::o;22198:212::-;7078:6;;-1:-1:-1;;;;;7078:6:0;212:10;7078:22;7070:67;;;;-1:-1:-1;;;7070:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22267:29:0;::::1;;::::0;;;:19:::1;:29;::::0;;;;;;;:36;;22299:4:::1;-1:-1:-1::0;;22267:36:0;;::::1;::::0;::::1;::::0;;;22314:33:::1;:43:::0;;;;;:50;;;;::::1;::::0;;::::1;::::0;;22375:27:::1;22267:29:::0;22375:17:::1;:27::i;:::-;22198:212:::0;:::o;20278:147::-;7078:6;;-1:-1:-1;;;;;7078:6:0;212:10;7078:22;7070:67;;;;-1:-1:-1;;;7070:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20367:41:0;;;::::1;;::::0;;;:33:::1;:41;::::0;;;;:50;;-1:-1:-1;;20367:50:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20278:147::o;22418:234::-;7078:6;;-1:-1:-1;;;;;7078:6:0;212:10;7078:22;7070:67;;;;-1:-1:-1;;;7070:67:0;;;;;;;:::i;:::-;22524:1:::1;22506:14;:19;;22497:62;;;::::0;-1:-1:-1;;;22497:62:0;;10361:2:1;22497:62:0::1;::::0;::::1;10343:21:1::0;10400:2;10380:18;;;10373:30;10439:31;10419:18;;;10412:59;10488:18;;22497:62:0::1;10159:353:1::0;22497:62:0::1;22570:11;:28:::0;;;22614:30:::1;::::0;2474:25:1;;;22614:30:0::1;::::0;2462:2:1;2447:18;22614:30:0::1;2328:177:1::0;3381:104:0;3437:13;3470:7;3463:14;;;;;:::i;21854:140::-;7078:6;;-1:-1:-1;;;;;7078:6:0;212:10;7078:22;7070:67;;;;-1:-1:-1;;;7070:67:0;;;;;;;:::i;:::-;21945:41:::1;21974:4;21980:5;21945:28;:41::i;4943:286::-:0;5036:4;5053:146;212:10;5076:7;5085:113;5124:15;5085:113;;;;;;;;;;;;;;;;;212:10;5085:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5085:34:0;;;;;;;;;;;;:38;:113::i;3845:175::-;3931:4;3948:42;212:10;3972:9;3983:6;3948:9;:42::i;19099:757::-;7078:6;;-1:-1:-1;;;;;7078:6:0;212:10;7078:22;7070:67;;;;-1:-1:-1;;;7070:67:0;;;;;;;:::i;:::-;19283:27:::1;:16:::0;19303:6:::1;19283:27;:::i;:::-;19264:46:::0;-1:-1:-1;19336:23:0::1;:12:::0;19352:6:::1;19336:23;:::i;:::-;19379:14;::::0;19321:38;;-1:-1:-1;;;;19379:14:0;::::1;;;19378:15;19370:24;;;::::0;::::1;;19448:4;19433:12;;:19;;;;:::i;:::-;19413:16;:39;;19405:72;;;::::0;-1:-1:-1;;;19405:72:0;;10719:2:1;19405:72:0::1;::::0;::::1;10701:21:1::0;10758:2;10738:18;;;10731:30;-1:-1:-1;;;10777:18:1;;;10770:51;10838:18;;19405:72:0::1;10517:345:1::0;19405:72:0::1;19527:4;19512:12;;:19;;;;:::i;:::-;19496:12;:35;;19488:68;;;::::0;-1:-1:-1;;;19488:68:0;;10719:2:1;19488:68:0::1;::::0;::::1;10701:21:1::0;10758:2;10738:18;;;10731:30;-1:-1:-1;;;10777:18:1;;;10770:51;10838:18;;19488:68:0::1;10517:345:1::0;19488:68:0::1;19567:9;:28:::0;;;19606:5:::1;:20:::0;;;19653:23:::1;:14:::0;19670:6:::1;19653:23;:::i;:::-;19637:13;:39:::0;19687:14:::1;:21:::0;;-1:-1:-1;;;;19687:21:0::1;-1:-1:-1::0;;;19687:21:0::1;::::0;;19733:12:::1;19719:11;:26:::0;19774:15:::1;19756;:33:::0;19800:5:::1;:16:::0;;;19832::::1;::::0;::::1;::::0;19687:21;;19832:16:::1;19099:757:::0;;;;:::o;21166:174::-;7078:6;;-1:-1:-1;;;;;7078:6:0;212:10;7078:22;7070:67;;;;-1:-1:-1;;;7070:67:0;;;;;;;:::i;:::-;21254:3:::1;21245:5;:12;;21237:63;;;::::0;-1:-1:-1;;;21237:63:0;;11069:2:1;21237:63:0::1;::::0;::::1;11051:21:1::0;11108:2;11088:18;;;11081:30;11147:34;11127:18;;;11120:62;-1:-1:-1;;;11198:18:1;;;11191:36;11244:19;;21237:63:0::1;10867:402:1::0;21237:63:0::1;21311:13;:21:::0;21166:174::o;22660:689::-;7078:6;;-1:-1:-1;;;;;7078:6:0;212:10;7078:22;7070:67;;;;-1:-1:-1;;;7070:67:0;;;;;;;:::i;:::-;22815:16:::1;:31:::0;;;22857:10:::1;:20:::0;;;22888:17:::1;:33:::0;;;22932:11:::1;:22:::0;;;22967:13:::1;:33:::0;;;23011:12:::1;:31:::0;;;-1:-1:-1;23065:12:0;::::1;::::0;::::1;::::0;:29:::1;;;23093:1;23081:8;:13;;23065:29;23057:68;;;::::0;-1:-1:-1;;;23057:68:0;;11476:2:1;23057:68:0::1;::::0;::::1;11458:21:1::0;11515:2;11495:18;;;11488:30;11554:28;11534:18;;;11527:56;11600:18;;23057:68:0::1;11274:350:1::0;23057:68:0::1;23161:2;23144:13;;:19;;:41;;;;;23183:2;23167:12;;:18;;23144:41;23136:90;;;::::0;-1:-1:-1;;;23136:90:0;;11831:2:1;23136:90:0::1;::::0;::::1;11813:21:1::0;11870:2;11850:18;;;11843:30;11909:34;11889:18;;;11882:62;-1:-1:-1;;;11960:18:1;;;11953:34;12004:19;;23136:90:0::1;11629:400:1::0;23136:90:0::1;23255:17;::::0;23274:11:::1;::::0;23287:16:::1;::::0;23330:10:::1;::::0;23244:97:::1;::::0;;12265:25:1;;;12321:2;12306:18;;12299:34;;;;12349:18;;;12342:34;12407:2;12392:18;;12385:34;23244:97:0::1;::::0;12252:3:1;12237:19;23244:97:0::1;;;;;;;22660:689:::0;;;;:::o;21638:208::-;7078:6;;-1:-1:-1;;;;;7078:6:0;212:10;7078:22;7070:67;;;;-1:-1:-1;;;7070:67:0;;;;;;;:::i;:::-;21718:21:::1;::::0;:32;::::1;;:21;::::0;;::::1;:32;;::::0;21710:41:::1;;;::::0;::::1;;21762:21;:31:::0;;-1:-1:-1;;21762:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21809:29:::1;::::0;2041:41:1;;;21809:29:0::1;::::0;2029:2:1;2014:18;21809:29:0::1;1901:187:1::0;7321:244:0;7078:6;;-1:-1:-1;;;;;7078:6:0;212:10;7078:22;7070:67;;;;-1:-1:-1;;;7070:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7410:22:0;::::1;7402:73;;;::::0;-1:-1:-1;;;7402:73:0;;12632:2:1;7402:73:0::1;::::0;::::1;12614:21:1::0;12671:2;12651:18;;;12644:30;12710:34;12690:18;;;12683:62;-1:-1:-1;;;12761:18:1;;;12754:36;12807:19;;7402:73:0::1;12430:402:1::0;7402:73:0::1;7512:6;::::0;7491:38:::1;::::0;-1:-1:-1;;;;;7491:38:0;;::::1;::::0;7512:6:::1;::::0;7491:38:::1;::::0;7512:6:::1;::::0;7491:38:::1;7540:6;:17:::0;;-1:-1:-1;;;;;;7540:17:0::1;-1:-1:-1::0;;;;;7540:17:0;;;::::1;::::0;;;::::1;::::0;;7321:244::o;20542:221::-;7078:6;;-1:-1:-1;;;;;7078:6:0;212:10;7078:22;7070:67;;;;-1:-1:-1;;;7070:67:0;;;;;;;:::i;:::-;20617:16:::1;:5:::0;20626:6:::1;20617:16;:::i;:::-;20609:24;;20676:4;20661:12;;:19;;;;:::i;:::-;20652:5;:28;;20644:83;;;::::0;-1:-1:-1;;;20644:83:0;;13039:2:1;20644:83:0::1;::::0;::::1;13021:21:1::0;13078:2;13058:18;;;13051:30;13117:34;13097:18;;;13090:62;-1:-1:-1;;;13168:18:1;;;13161:40;13218:19;;20644:83:0::1;12837:406:1::0;20644:83:0::1;20738:9;:17:::0;20542:221::o;508:179::-;566:7;;598:5;602:1;598;:5;:::i;:::-;586:17;;627:1;622;:6;;614:46;;;;-1:-1:-1;;;614:46:0;;13580:2:1;614:46:0;;;13562:21:1;13619:2;13599:18;;;13592:30;13658:29;13638:18;;;13631:57;13705:18;;614:46:0;13378:351:1;614:46:0;678:1;508:179;-1:-1:-1;;;508:179:0:o;1037:248::-;1095:7;1119:1;1124;1119:6;1115:47;;-1:-1:-1;1149:1:0;1142:8;;1115:47;1174:9;1186:5;1190:1;1186;:5;:::i;:::-;1174:17;-1:-1:-1;1219:1:0;1210:5;1214:1;1174:17;1210:5;:::i;:::-;:10;1202:56;;;;-1:-1:-1;;;1202:56:0;;13936:2:1;1202:56:0;;;13918:21:1;13975:2;13955:18;;;13948:30;14014:34;13994:18;;;13987:62;-1:-1:-1;;;14065:18:1;;;14058:31;14106:19;;1202:56:0;13734:397:1;1293:132:0;1351:7;1378:39;1382:1;1385;1378:39;;;;;;;;;;;;;;;;;:3;:39::i;29307:790::-;29376:6;29386:1;29376:11;29372:50;;29307:790;:::o;29372:50::-;29432:24;29449:6;29432:16;:24::i;:::-;29586:16;;29566:17;;29484:4;;;;29469:12;;29566:36;;;:::i;:::-;29542:60;-1:-1:-1;29615:19:0;29649:17;;29645:104;;29697:40;:21;29723:13;29697:25;:40::i;:::-;29683:54;;29645:104;29759:23;29827:11;29785:39;29806:17;;29785:16;;:20;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;29759:79;-1:-1:-1;29863:19:0;;29859:123;;29921:15;;29913:57;;-1:-1:-1;;;;;29921:15:0;;;;29950;;29913:57;;;;29950:15;29921;29913:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29899:71:0;;-1:-1:-1;;29859:123:0;29999:90;30027:15;30057:7;:21;;;;;30068:10;30057:21;29999:90;;;14514:25:1;;;14582:14;;14575:22;14570:2;14555:18;;14548:50;14487:18;29999:90:0;;;;;;;29361:736;;;;;29307:790;:::o;695:136::-;753:7;780:43;784:1;787;780:43;;;;;;;;;;;;;;;;;:3;:43::i;6169:346::-;-1:-1:-1;;;;;6271:19:0;;6263:68;;;;-1:-1:-1;;;6263:68:0;;14811:2:1;6263:68:0;;;14793:21:1;14850:2;14830:18;;;14823:30;14889:34;14869:18;;;14862:62;-1:-1:-1;;;14940:18:1;;;14933:34;14984:19;;6263:68:0;14609:400:1;6263:68:0;-1:-1:-1;;;;;6350:21:0;;6342:68;;;;-1:-1:-1;;;6342:68:0;;15216:2:1;6342:68:0;;;15198:21:1;15255:2;15235:18;;;15228:30;15294:34;15274:18;;;15267:62;-1:-1:-1;;;15345:18:1;;;15338:32;15387:19;;6342:68:0;15014:398:1;6342:68:0;-1:-1:-1;;;;;6423:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6475:32;;2474:25:1;;;6475:32:0;;2447:18:1;6475:32:0;;;;;;;;6169:346;;;:::o;5237:538::-;-1:-1:-1;;;;;5343:20:0;;5335:70;;;;-1:-1:-1;;;5335:70:0;;15619:2:1;5335:70:0;;;15601:21:1;15658:2;15638:18;;;15631:30;15697:34;15677:18;;;15670:62;-1:-1:-1;;;15748:18:1;;;15741:35;15793:19;;5335:70:0;15417:401:1;5335:70:0;-1:-1:-1;;;;;5424:23:0;;5416:71;;;;-1:-1:-1;;;5416:71:0;;16025:2:1;5416:71:0;;;16007:21:1;16064:2;16044:18;;;16037:30;16103:34;16083:18;;;16076:62;-1:-1:-1;;;16154:18:1;;;16147:33;16197:19;;5416:71:0;15823:399:1;5416:71:0;5580:70;5602:6;5580:70;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5580:17:0;;:9;:17;;;;;;;;;;;;:70;:21;:70::i;:::-;-1:-1:-1;;;;;5560:17:0;;;:9;:17;;;;;;;;;;;:90;;;;5684:20;;;;;;;:32;;5709:6;5684:24;:32::i;:::-;-1:-1:-1;;;;;5661:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;5732:35;2474:25:1;;;5661:20:0;;5732:35;;;;;;2447:18:1;5732:35:0;2328:177:1;23491:3816:0;-1:-1:-1;;;;;23601:18:0;;23593:69;;;;-1:-1:-1;;;23593:69:0;;16429:2:1;23593:69:0;;;16411:21:1;16468:2;16448:18;;;16441:30;16507:34;16487:18;;;16480:62;-1:-1:-1;;;16558:18:1;;;16551:36;16604:19;;23593:69:0;16227:402:1;23593:69:0;-1:-1:-1;;;;;23681:16:0;;23673:65;;;;-1:-1:-1;;;23673:65:0;;16836:2:1;23673:65:0;;;16818:21:1;16875:2;16855:18;;;16848:30;16914:34;16894:18;;;16887:62;-1:-1:-1;;;16965:18:1;;;16958:34;17009:19;;23673:65:0;16634:400:1;23673:65:0;-1:-1:-1;;;;;23821:39:0;;23751:21;23821:39;;;:33;:39;;;;;;23751:21;;23821:39;;23816:142;;23885:14;;-1:-1:-1;;;23885:14:0;;;;23877:59;;;;-1:-1:-1;;;23877:59:0;;17241:2:1;23877:59:0;;;17223:21:1;;;17260:18;;;17253:30;17319:34;17299:18;;;17292:62;17371:18;;23877:59:0;17039:356:1;23877:59:0;23974:6;23984:1;23974:11;23970:93;;24002:28;24018:4;24024:2;24028:1;24002:15;:28::i;:::-;24045:7;;23491:3816;;;:::o;23970:93::-;24086:4;;-1:-1:-1;;;;;24086:4:0;;;24080:10;;;;24076:3168;;24107:33;24123:4;24129:2;24133:6;24107:15;:33::i;:::-;24170:12;;:24;;24187:6;24170:16;:24::i;:::-;24155:12;:39;-1:-1:-1;;;;;23491:3816:0:o;24076:3168::-;24271:8;;-1:-1:-1;;;24271:8:0;;;;24270:9;:39;;;;-1:-1:-1;;;;;;24284:25:0;;;;;;:19;:25;;;;;;;;24283:26;24270:39;:67;;;;-1:-1:-1;;;;;;24314:23:0;;;;;;:19;:23;;;;;;;;24313:24;24270:67;24252:2992;;;-1:-1:-1;;;;;24371:29:0;;;24354:14;24371:29;;;:25;:29;;;;;;;24431:31;;;;;;;;24371:29;;;;;24431:31;24495:9;;:23;;;;;24509:9;24508:10;24495:23;24491:1619;;;24539:13;24555:32;24583:3;24555:23;24566:11;;24555:6;:10;;:23;;;;:::i;:32::-;24539:48;-1:-1:-1;24615:17:0;:6;24539:48;24615:10;:17::i;:::-;24606:26;;24651:43;24667:4;24681;24688:5;24651:15;:43::i;:::-;24713:33;24729:4;24735:2;24739:6;24713:15;:33::i;:::-;24765:7;;;;;23491:3816;;;:::o;24491:1619::-;24798:9;24794:1316;;;24844:17;;24890:11;;24930:14;;24844:17;;-1:-1:-1;24890:11:0;-1:-1:-1;24930:14:0;;24926:344;;;25034:13;;25021:9;24992:39;;;;:28;:39;;;;;;:55;;25034:13;24992:55;:::i;:::-;24973:15;:74;;24965:134;;;;-1:-1:-1;;;24965:134:0;;17602:2:1;24965:134:0;;;17584:21:1;17641:2;17621:18;;;17614:30;-1:-1:-1;;;17660:18:1;;;17653:52;17722:18;;24965:134:0;17400:346:1;24965:134:0;25136:5;;25126:6;:15;;25118:54;;;;-1:-1:-1;;;25118:54:0;;17953:2:1;25118:54:0;;;17935:21:1;17992:2;17972:18;;;17965:30;18031:29;18011:18;;;18004:57;18078:18;;25118:54:0;17751:351:1;25118:54:0;25220:9;25191:39;;;;:28;:39;;;;;25233:15;25191:57;;24926:344;24794:1316;;;25354:16;;25399:10;;25436:14;;25354:16;;-1:-1:-1;25399:10:0;-1:-1:-1;25436:14:0;;25432:453;;;25515:5;;25497:15;;:23;;;;:::i;:::-;25479:15;:41;25471:71;;;;-1:-1:-1;;;25471:71:0;;18309:2:1;25471:71:0;;;18291:21:1;18348:2;18328:18;;;18321:30;-1:-1:-1;;;18367:18:1;;;18360:48;18425:18;;25471:71:0;18107:342:1;25471:71:0;25584:13;;25569:11;:28;;25561:64;;;;-1:-1:-1;;;25561:64:0;;18656:2:1;25561:64:0;;;18638:21:1;18695:2;18675:18;;;18668:30;18734:26;18714:18;;;18707:54;18778:18;;25561:64:0;18454:348:1;25561:64:0;25677:9;25652:35;;;;:24;:35;;;;;;25691:12;25652:51;;25644:83;;;;-1:-1:-1;;;25644:83:0;;19009:2:1;25644:83:0;;;18991:21:1;19048:2;19028:18;;;19021:30;-1:-1:-1;;;19067:18:1;;;19060:50;19127:18;;25644:83:0;18807:344:1;25644:83:0;25764:5;;25754:6;:15;;25746:54;;;;-1:-1:-1;;;25746:54:0;;17953:2:1;25746:54:0;;;17935:21:1;17992:2;17972:18;;;17965:30;18031:29;18011:18;;;18004:57;18078:18;;25746:54:0;17751:351:1;25746:54:0;25844:9;25819:35;;;;:24;:35;;;;;25857:12;25819:50;;25432:453;-1:-1:-1;;;;;3811:18:0;;25918:32;3811:18;;;;;;;;;;;26030:9;;25993:33;26020:6;3811:18;25993:33;:::i;:::-;:46;;25985:95;;;;-1:-1:-1;;;25985:95:0;;19358:2:1;25985:95:0;;;19340:21:1;19397:2;19377:18;;;19370:30;19436:34;19416:18;;;19409:62;-1:-1:-1;;;19487:18:1;;;19480:34;19531:19;;25985:95:0;19156:400:1;25985:95:0;25319:791;24794:1316;26225:4;26126:17;3811:18;;;;;;;;;;;26287;;26146:13;;3811:18;26263:42;;;;;;;26326:20;;;26337:9;26326:20;26322:308;;;26367:8;:15;;-1:-1:-1;;;;26367:15:0;-1:-1:-1;;;26367:15:0;;;26456:4;-1:-1:-1;3811:18:0;;;;;;;;;;;26416:46;;26481:33;26502:11;26481:20;:33::i;:::-;-1:-1:-1;26545:1:0;26533:9;:13;;;26565:10;:14;26598:8;:16;;-1:-1:-1;;;;26598:16:0;;;26322:308;26646:12;26661:30;26687:3;26661:21;:6;26672:9;26661:10;:21::i;:30::-;26646:45;-1:-1:-1;26706:18:0;26727:28;26751:3;26727:19;:6;26738:7;26727:10;:19::i;:28::-;26706:49;-1:-1:-1;26783:29:0;26794:17;26706:49;26794:4;:17;:::i;:::-;26783:6;;:10;:29::i;:::-;26774:38;;26834:9;26830:155;;;26877:10;;:20;;26892:4;26877:14;:20::i;:::-;26864:10;:33;26830:155;;;26950:9;;:19;;26964:4;26950:13;:19::i;:::-;26938:9;:31;26830:155;27001:42;27017:4;27031;27038;27001:15;:42::i;:::-;27064:14;;27060:156;;27121:4;;27099:39;;27115:4;;-1:-1:-1;;;;;27121:4:0;27127:10;27099:15;:39::i;:::-;27172:12;;:28;;27189:10;27172:16;:28::i;:::-;27157:12;:43;27060:156;24339:2905;;;;;;;24252:2992;27256:33;27272:4;27278:2;27282:6;27256:15;:33::i;839:190::-;925:7;961:12;953:6;;;;945:29;;;;-1:-1:-1;;;945:29:0;;;;;;;;:::i;:::-;-1:-1:-1;985:9:0;997:5;1001:1;997;:5;:::i;:::-;985:17;839:190;-1:-1:-1;;;;;839:190:0:o;22002:188::-;-1:-1:-1;;;;;22085:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;22085:39:0;;;;;;;;;;22142:40;;22085:39;;:31;22142:40;;;22002:188;;:::o;1433:189::-;1519:7;1554:12;1547:5;1539:28;;;;-1:-1:-1;;;1539:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1578:9:0;1590:5;1594:1;1590;:5;:::i;27803:499::-;27893:16;;;27907:1;27893:16;;;;;;;;27869:21;;27893:16;;;;;;;;;;-1:-1:-1;27893:16:0;27869:40;;27938:4;27920;27925:1;27920:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27920:23:0;;;:7;;;;;;;;;;:23;;;;27964:15;;:22;;;-1:-1:-1;;;27964:22:0;;;;:15;;;;;:20;;:22;;;;;27920:7;;27964:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27954:4;27959:1;27954:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27954:32:0;;;:7;;;;;;;;;:32;28029:15;;27997:62;;28014:4;;28029:15;28047:11;27997:8;:62::i;:::-;28070:15;;:224;;-1:-1:-1;;;28070:224:0;;-1:-1:-1;;;;;28070:15:0;;;;:66;;:224;;28151:11;;28070:15;;28221:4;;28248;;28268:15;;28070:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27858:444;27803:499;:::o;222:180:1:-;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;-1:-1:-1;373:23:1;;222:180;-1:-1:-1;222:180:1:o;407:548::-;519:4;548:2;577;566:9;559:21;609:6;603:13;652:6;647:2;636:9;632:18;625:34;677:1;687:140;701:6;698:1;695:13;687:140;;;796:14;;;792:23;;786:30;762:17;;;781:2;758:26;751:66;716:10;;687:140;;;691:3;876:1;871:2;862:6;851:9;847:22;843:31;836:42;946:2;939;935:7;930:2;922:6;918:15;914:29;903:9;899:45;895:54;887:62;;;;407:548;;;;:::o;960:131::-;-1:-1:-1;;;;;1035:31:1;;1025:42;;1015:70;;1081:1;1078;1071:12;1096:160;1161:20;;1217:13;;1210:21;1200:32;;1190:60;;1246:1;1243;1236:12;1190:60;1096:160;;;:::o;1261:315::-;1326:6;1334;1387:2;1375:9;1366:7;1362:23;1358:32;1355:52;;;1403:1;1400;1393:12;1355:52;1442:9;1429:23;1461:31;1486:5;1461:31;:::i;:::-;1511:5;-1:-1:-1;1535:35:1;1566:2;1551:18;;1535:35;:::i;:::-;1525:45;;1261:315;;;;;:::o;1581:::-;1649:6;1657;1710:2;1698:9;1689:7;1685:23;1681:32;1678:52;;;1726:1;1723;1716:12;1678:52;1765:9;1752:23;1784:31;1809:5;1784:31;:::i;:::-;1834:5;1886:2;1871:18;;;;1858:32;;-1:-1:-1;;;1581:315:1:o;2510:127::-;2571:10;2566:3;2562:20;2559:1;2552:31;2602:4;2599:1;2592:15;2626:4;2623:1;2616:15;2642:275;2713:2;2707:9;2778:2;2759:13;;-1:-1:-1;;2755:27:1;2743:40;;2813:18;2798:34;;2834:22;;;2795:62;2792:88;;;2860:18;;:::i;:::-;2896:2;2889:22;2642:275;;-1:-1:-1;2642:275:1:o;2922:183::-;2982:4;3015:18;3007:6;3004:30;3001:56;;;3037:18;;:::i;:::-;-1:-1:-1;3082:1:1;3078:14;3094:4;3074:25;;2922:183::o;3110:662::-;3164:5;3217:3;3210:4;3202:6;3198:17;3194:27;3184:55;;3235:1;3232;3225:12;3184:55;3271:6;3258:20;3297:4;3321:60;3337:43;3377:2;3337:43;:::i;:::-;3321:60;:::i;:::-;3415:15;;;3501:1;3497:10;;;;3485:23;;3481:32;;;3446:12;;;;3525:15;;;3522:35;;;3553:1;3550;3543:12;3522:35;3589:2;3581:6;3577:15;3601:142;3617:6;3612:3;3609:15;3601:142;;;3683:17;;3671:30;;3721:12;;;;3634;;3601:142;;;-1:-1:-1;3761:5:1;3110:662;-1:-1:-1;;;;;;3110:662:1:o;3777:1215::-;3895:6;3903;3956:2;3944:9;3935:7;3931:23;3927:32;3924:52;;;3972:1;3969;3962:12;3924:52;4012:9;3999:23;4041:18;4082:2;4074:6;4071:14;4068:34;;;4098:1;4095;4088:12;4068:34;4136:6;4125:9;4121:22;4111:32;;4181:7;4174:4;4170:2;4166:13;4162:27;4152:55;;4203:1;4200;4193:12;4152:55;4239:2;4226:16;4261:4;4285:60;4301:43;4341:2;4301:43;:::i;4285:60::-;4379:15;;;4461:1;4457:10;;;;4449:19;;4445:28;;;4410:12;;;;4485:19;;;4482:39;;;4517:1;4514;4507:12;4482:39;4541:11;;;;4561:217;4577:6;4572:3;4569:15;4561:217;;;4657:3;4644:17;4674:31;4699:5;4674:31;:::i;:::-;4718:18;;4594:12;;;;4756;;;;4561:217;;;4797:5;-1:-1:-1;;4840:18:1;;4827:32;;-1:-1:-1;;4871:16:1;;;4868:36;;;4900:1;4897;4890:12;4868:36;;4923:63;4978:7;4967:8;4956:9;4952:24;4923:63;:::i;:::-;4913:73;;;3777:1215;;;;;:::o;4997:456::-;5074:6;5082;5090;5143:2;5131:9;5122:7;5118:23;5114:32;5111:52;;;5159:1;5156;5149:12;5111:52;5198:9;5185:23;5217:31;5242:5;5217:31;:::i;:::-;5267:5;-1:-1:-1;5324:2:1;5309:18;;5296:32;5337:33;5296:32;5337:33;:::i;:::-;4997:456;;5389:7;;-1:-1:-1;;;5443:2:1;5428:18;;;;5415:32;;4997:456::o;5647:247::-;5706:6;5759:2;5747:9;5738:7;5734:23;5730:32;5727:52;;;5775:1;5772;5765:12;5727:52;5814:9;5801:23;5833:31;5858:5;5833:31;:::i;5899:180::-;5955:6;6008:2;5996:9;5987:7;5983:23;5979:32;5976:52;;;6024:1;6021;6014:12;5976:52;6047:26;6063:9;6047:26;:::i;6308:385::-;6394:6;6402;6410;6418;6471:3;6459:9;6450:7;6446:23;6442:33;6439:53;;;6488:1;6485;6478:12;6439:53;-1:-1:-1;;6511:23:1;;;6581:2;6566:18;;6553:32;;-1:-1:-1;6632:2:1;6617:18;;6604:32;;6683:2;6668:18;6655:32;;-1:-1:-1;6308:385:1;-1:-1:-1;6308:385:1:o;6698:388::-;6766:6;6774;6827:2;6815:9;6806:7;6802:23;6798:32;6795:52;;;6843:1;6840;6833:12;6795:52;6882:9;6869:23;6901:31;6926:5;6901:31;:::i;:::-;6951:5;-1:-1:-1;7008:2:1;6993:18;;6980:32;7021:33;6980:32;7021:33;:::i;:::-;7073:7;7063:17;;;6698:388;;;;;:::o;7091:356::-;7293:2;7275:21;;;7312:18;;;7305:30;7371:34;7366:2;7351:18;;7344:62;7438:2;7423:18;;7091:356::o;7452:127::-;7513:10;7508:3;7504:20;7501:1;7494:31;7544:4;7541:1;7534:15;7568:4;7565:1;7558:15;7584:168;7657:9;;;7688;;7705:15;;;7699:22;;7685:37;7675:71;;7726:18;;:::i;7757:380::-;7836:1;7832:12;;;;7879;;;7900:61;;7954:4;7946:6;7942:17;7932:27;;7900:61;8007:2;7999:6;7996:14;7976:18;7973:38;7970:161;;8053:10;8048:3;8044:20;8041:1;8034:31;8088:4;8085:1;8078:15;8116:4;8113:1;8106:15;7970:161;;7757:380;;;:::o;9258:127::-;9319:10;9314:3;9310:20;9307:1;9300:31;9350:4;9347:1;9340:15;9374:4;9371:1;9364:15;9390:135;9429:3;9450:17;;;9447:43;;9470:18;;:::i;:::-;-1:-1:-1;9517:1:1;9506:13;;9390:135::o;9530:217::-;9570:1;9596;9586:132;;9640:10;9635:3;9631:20;9628:1;9621:31;9675:4;9672:1;9665:15;9703:4;9700:1;9693:15;9586:132;-1:-1:-1;9732:9:1;;9530:217::o;13248:125::-;13313:9;;;13334:10;;;13331:36;;;13347:18;;:::i;19561:128::-;19628:9;;;19649:11;;;19646:37;;;19663:18;;:::i;19694:251::-;19764:6;19817:2;19805:9;19796:7;19792:23;19788:32;19785:52;;;19833:1;19830;19823:12;19785:52;19865:9;19859:16;19884:31;19909:5;19884:31;:::i;19950:980::-;20212:4;20260:3;20249:9;20245:19;20291:6;20280:9;20273:25;20317:2;20355:6;20350:2;20339:9;20335:18;20328:34;20398:3;20393:2;20382:9;20378:18;20371:31;20422:6;20457;20451:13;20488:6;20480;20473:22;20526:3;20515:9;20511:19;20504:26;;20565:2;20557:6;20553:15;20539:29;;20586:1;20596:195;20610:6;20607:1;20604:13;20596:195;;;20675:13;;-1:-1:-1;;;;;20671:39:1;20659:52;;20766:15;;;;20731:12;;;;20707:1;20625:9;20596:195;;;-1:-1:-1;;;;;;;20847:32:1;;;;20842:2;20827:18;;20820:60;-1:-1:-1;;;20911:3:1;20896:19;20889:35;20808:3;19950:980;-1:-1:-1;;;19950:980:1:o

Swarm Source

ipfs://9881833c681768102aad1df87c8b000cdf779dab4fbc3fbf54b2c48bdbc5af17
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.