ETH Price: $2,151.36 (+1.35%)

Contract

0x3BC4E151775a7b0E89dA2946FF04a10457Cb82eB
 

Overview

ETH Balance

0.005902782317910487 ETH

Eth Value

$12.70 (@ $2,151.36/ETH)

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve246790312026-03-17 18:34:593 days ago1773772499IN
0x3BC4E151...457Cb82eB
0 ETH0.000003260.07
Approve244604872026-02-15 6:43:4734 days ago1771137827IN
0x3BC4E151...457Cb82eB
0 ETH0.000001870.07
Approve244166972026-02-09 4:03:1140 days ago1770609791IN
0x3BC4E151...457Cb82eB
0 ETH0.000003260.07
Approve239984962025-12-12 19:02:3598 days ago1765566155IN
0x3BC4E151...457Cb82eB
0 ETH0.00000420.09
Approve239209912025-12-01 20:23:23109 days ago1764620603IN
0x3BC4E151...457Cb82eB
0 ETH0.0000070.15
Approve230735122025-08-05 7:56:59228 days ago1754380619IN
0x3BC4E151...457Cb82eB
0 ETH0.000012320.46
Approve222432382025-04-11 4:14:47344 days ago1744344887IN
0x3BC4E151...457Cb82eB
0 ETH0.000018480.69
Approve220388052025-03-13 15:20:47373 days ago1741879247IN
0x3BC4E151...457Cb82eB
0 ETH0.000044930.96229308
Transfer220387592025-03-13 15:11:35373 days ago1741878695IN
0x3BC4E151...457Cb82eB
0 ETH0.000091871.13282208
Approve159030032022-11-05 9:44:591232 days ago1667641499IN
0x3BC4E151...457Cb82eB
0 ETH0.0006577414.08681532
Approve158031742022-10-22 10:53:111246 days ago1666435991IN
0x3BC4E151...457Cb82eB
0 ETH0.0007327315.69297291
Approve157397652022-10-13 14:22:591255 days ago1665670979IN
0x3BC4E151...457Cb82eB
0 ETH0.00474997101.73000518
Transfer157391432022-10-13 12:17:351255 days ago1665663455IN
0x3BC4E151...457Cb82eB
0 ETH0.0007499913.68897144
Approve157311192022-10-12 9:24:591256 days ago1665566699IN
0x3BC4E151...457Cb82eB
0 ETH0.0006890414.75717412
Approve157274832022-10-11 21:14:111256 days ago1665522851IN
0x3BC4E151...457Cb82eB
0 ETH0.0012139926
Approve157272312022-10-11 20:23:351256 days ago1665519815IN
0x3BC4E151...457Cb82eB
0 ETH0.001394229.8596429
Approve157261542022-10-11 16:46:471257 days ago1665506807IN
0x3BC4E151...457Cb82eB
0 ETH0.0014941432
Approve157260022022-10-11 16:16:111257 days ago1665504971IN
0x3BC4E151...457Cb82eB
0 ETH0.0015101332.34254546
Approve157258042022-10-11 15:36:231257 days ago1665502583IN
0x3BC4E151...457Cb82eB
0 ETH0.0012191526.11066572
Approve157253852022-10-11 14:12:231257 days ago1665497543IN
0x3BC4E151...457Cb82eB
0 ETH0.0010818723.17038913
Approve157247382022-10-11 12:02:351257 days ago1665489755IN
0x3BC4E151...457Cb82eB
0 ETH0.0011434224.48872198
Transfer157247152022-10-11 11:57:591257 days ago1665489479IN
0x3BC4E151...457Cb82eB
0 ETH0.0011783822.43169143
Approve157246252022-10-11 11:39:111257 days ago1665488351IN
0x3BC4E151...457Cb82eB
0 ETH0.0009503420.35338296
Approve157246232022-10-11 11:38:471257 days ago1665488327IN
0x3BC4E151...457Cb82eB
0 ETH0.0009535120.42135109
Transfer157246172022-10-11 11:37:351257 days ago1665488255IN
0x3BC4E151...457Cb82eB
0 ETH0.0016371420.18620775
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Swap Exact ETH F...202600042024-07-08 6:28:11621 days ago1720420091
0x3BC4E151...457Cb82eB
0.00647342 ETH
Swap Exact ETH F...202600042024-07-08 6:28:11621 days ago1720420091
0x3BC4E151...457Cb82eB
0.00646834 ETH
Swap Exact ETH F...202600042024-07-08 6:28:11621 days ago1720420091
0x3BC4E151...457Cb82eB
0.00646591 ETH
Swap Exact ETH F...202600042024-07-08 6:28:11621 days ago1720420091
0x3BC4E151...457Cb82eB
0.00646525 ETH
Transfer202600042024-07-08 6:28:11621 days ago1720420091
0x3BC4E151...457Cb82eB
0.00646525 ETH
Swap Exact ETH F...202600042024-07-08 6:28:11621 days ago1720420091
0x3BC4E151...457Cb82eB
0.00646525 ETH
Transfer157248122022-10-11 12:17:231257 days ago1665490643
0x3BC4E151...457Cb82eB
0.00590835 ETH
Swap Exact ETH F...157248122022-10-11 12:17:231257 days ago1665490643
0x3BC4E151...457Cb82eB
0.00647114 ETH
Transfer157248032022-10-11 12:15:351257 days ago1665490535
0x3BC4E151...457Cb82eB
0.00590801 ETH
Swap Exact ETH F...157248032022-10-11 12:15:351257 days ago1665490535
0x3BC4E151...457Cb82eB
0.00647113 ETH
Transfer157246922022-10-11 11:53:111257 days ago1665489191
0x3BC4E151...457Cb82eB
0.00582857 ETH
Swap Exact ETH F...157246922022-10-11 11:53:111257 days ago1665489191
0x3BC4E151...457Cb82eB
0.00647106 ETH
Transfer157246812022-10-11 11:50:591257 days ago1665489059
0x3BC4E151...457Cb82eB
0.00582857 ETH
Swap Exact ETH F...157246812022-10-11 11:50:591257 days ago1665489059
0x3BC4E151...457Cb82eB
0.00647106 ETH
Transfer157246142022-10-11 11:36:591257 days ago1665488219
0x3BC4E151...457Cb82eB
0.00569483 ETH
Swap Exact ETH F...157246142022-10-11 11:36:591257 days ago1665488219
0x3BC4E151...457Cb82eB
0.00647092 ETH
Transfer157246122022-10-11 11:36:351257 days ago1665488195
0x3BC4E151...457Cb82eB
0.00569483 ETH
Swap Exact ETH F...157246122022-10-11 11:36:351257 days ago1665488195
0x3BC4E151...457Cb82eB
0.00647092 ETH
Transfer157246102022-10-11 11:36:111257 days ago1665488171
0x3BC4E151...457Cb82eB
0.00569483 ETH
Swap Exact ETH F...157246102022-10-11 11:36:111257 days ago1665488171
0x3BC4E151...457Cb82eB
0.00647092 ETH
Transfer157246092022-10-11 11:35:591257 days ago1665488159
0x3BC4E151...457Cb82eB
0.00569483 ETH
Swap Exact ETH F...157246092022-10-11 11:35:591257 days ago1665488159
0x3BC4E151...457Cb82eB
0.00647092 ETH
Transfer157245912022-10-11 11:32:231257 days ago1665487943
0x3BC4E151...457Cb82eB
0.00562855 ETH
Swap Exact ETH F...157245912022-10-11 11:32:231257 days ago1665487943
0x3BC4E151...457Cb82eB
0.00647086 ETH
Transfer157245782022-10-11 11:29:471257 days ago1665487787
0x3BC4E151...457Cb82eB
0.00562855 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Xenomorph

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2022-10-11
*/

// Xenomorph 
// 
// Xenomorph is completely self-sufficient as all taxes are assigned to directly Buy and Burn the Native Token
// Self-Sufficient - Community Oriented - Simple Tokenomics - A new type of ERC20 Contract - 
// The first rule of any technology is that automation applied to an efficient operation will magnify the efficiency.
// Tax: 2% Automated Tax allocated to Buyback and Burn 
// SPDX-License-Identifier: MIT
pragma solidity 0.8.12;

interface IERC20 {
  function totalSupply() external view returns (uint256);
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);
  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 IFactoryV2 {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IV2Pair {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function sync() external;
}

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}


contract Xenomorph is IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 constant private startingSupply = 1_000_000_000;

    string constant private _name = "XENOMORPH";
    string constant private _symbol = "XENOMORPH";
    uint8 constant private _decimals = 18;

    uint256 constant private _tTotal = startingSupply * 10**_decimals;

    struct Fees {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
    }

    struct Ratios {
        
        uint16 tokens;
        uint16 swap;
        uint16 burn;
        uint16 total;
    }

    Fees public _taxRates = Fees({
        buyFee: 200,
        sellFee: 200,
        transferFee: 0
        });

    Ratios public _ratios = Ratios({
        tokens: 0,
        swap: 0,
        burn: 10,
        total: 10
        });

    uint256 constant public maxBuyTaxes = 2000;
    uint256 constant public maxSellTaxes = 2000;
    uint256 constant public maxTransferTaxes = 2000;
    uint256 constant masterTaxDivisor = 10000;

    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address tokens;
        address payable swap;
    }

    TaxWallets public _taxWallets = TaxWallets({
        tokens: 0xdb809F4a17E59B05d7AB707aF49b518F1A684903,
        swap: payable(0xdb809F4a17E59B05d7AB707aF49b518F1A684903)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 0 seconds;
    uint256 private lastSwap;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    
    uint256 public _amountTokensLastSold;
    uint256 public _percentLastSoldToBuyBackTimesTen = 10;
    uint256 private _buyBackAmount;
    

    uint256 private _maxTxAmount = _tTotal;
    uint256 private _maxWalletSize = _tTotal;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    bool public buyBackEnabled = false;
    

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);
    event SwapETHForTokens(uint256 amountIn, address[] path);
      
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        _tOwned[msg.sender] = _tTotal;
        emit Transfer(address(0), msg.sender, _tTotal);

        // Set the owner.
        _owner = msg.sender;

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3);
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } else if (block.chainid == 43114) {
            dexRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } else if (block.chainid == 250) {
            dexRouter = IRouter02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        } else {
            revert();
        }

        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;

        _approve(_owner, address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);

        _isExcludedFromFees[_owner] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[_owner] = true;
        _isExcludedFromLimits[address(this)] = true;
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    function transferOwner(address newOwner) external onlyOwner {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

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

    function totalSupply() external pure override returns (uint256) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return _owner; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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



    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] -= amount;
        }

        return _transfer(sender, recipient, amount);
    }

    function setNewRouter(address newRouter) public onlyOwner {
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 3 days, "3 Day cooldown.!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
        }
    }

    
    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }
    
    function setRatios(uint16 tokens, uint16 swap, uint16 burn) external onlyOwner {
        
        _ratios.tokens = tokens;
        _ratios.swap = swap;
        _ratios.burn = burn;
        _ratios.total =  swap + burn;
    }

    
    function setExcludedFromLimits(address account, bool enabled) external onlyOwner {
        _isExcludedFromLimits[account] = enabled;
    }

    function isExcludedFromLimits(address account) public view returns (bool) {
        return _isExcludedFromLimits[account];
    }

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

    function setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }

    function getMaxTX() public view returns (uint256) {
        return _maxTxAmount / (10**_decimals);
    }

    function getMaxWallet() public view returns (uint256) {
        return _maxWalletSize / (10**_decimals);
    }


    function getAmountTokensLastSold() public view returns (uint256) {
        return _amountTokensLastSold;
    }

    function percentLastSoldToBuyBackTimesTen() public view returns (uint256) {
        return _percentLastSoldToBuyBackTimesTen;
    }

    
    function setBuyBackEnabled(bool _enabled) public onlyOwner {
        buyBackEnabled = _enabled;
        
    }

    function setPercentLastSoldToBuyBackTimesTen(uint256 percentLastSoldToBuyBackTimesTenNew) public onlyOwner {
        _percentLastSoldToBuyBackTimesTen = percentLastSoldToBuyBackTimesTenNew;
    }

     function _getSellBnBAmount(uint256 tokenAmount) private view returns(uint256) {
        address[] memory path = new address[](2);

        path[0] = address(this);
        path[1] = dexRouter.WETH();

        uint[] memory amounts = dexRouter.getAmountsOut(tokenAmount, path);

        return amounts[1];
        
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor, uint256 time) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        contractSwapTimer = time;
    }

    function setWallets(address tokens, address payable swap) external onlyOwner {
        _taxWallets.tokens = tokens;
        _taxWallets.swap = payable(swap);
    }

    function setContractSwapEnabled(bool enabled) external onlyOwner {
        contractSwapEnabled = enabled;
        emit ContractSwapEnabledUpdated(enabled);
    }

    function _hasLimits(address from, address to) internal view returns (bool) {
        return from != _owner
            && to != _owner
            && tx.origin != _owner
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        bool buy = false;
        bool sell = false;
        bool other = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
        } else {
            other = true;
        }
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(buy || sell){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            if(to != address(dexRouter) && !sell) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
                }
            }
        }

        bool takeFee = true;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        if (sell) 
        {
            if (!inSwap
                && contractSwapEnabled
            ) {
                if (lastSwap + contractSwapTimer < block.timestamp) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                        contractSwap();
                        lastSwap = block.timestamp;
                    }
                }

            }
            
            uint256 balance = address(this).balance;
            if (buyBackEnabled && contractSwapEnabled) {
                        _amountTokensLastSold += _getSellBnBAmount(amount);
                        uint256 buyBackAmount = _amountTokensLastSold / (1000) * (_percentLastSoldToBuyBackTimesTen);
                        if(buyBackAmount < balance){
                            buyBackTokens(buyBackAmount);
			                _amountTokensLastSold;
                        }else{
			                _amountTokensLastSold = 0;
                        }
                    }
                

            
               
            
            
        }
        return _finalizeTransfer(from, to, amount, takeFee, buy, sell, other);
        
    }

    function contractSwap() internal lockTheSwap {
        uint256 amountToSwap = swapAmount;
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        uint256 balanceBefore = address(this).balance;

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

        );
        uint256 amountBNB = address(this).balance - (balanceBefore);
        uint256 amountBNBMarketing = amountBNB * (_ratios.swap) / (_ratios.total);
        
        (bool MarketingSuccess, /* bytes memory data */) = payable(_taxWallets.swap).call{value: amountBNBMarketing, gas: 30000}("");
        require(MarketingSuccess, "receiver rejected ETH transfer");

    }
    
  function buyBackTokens(uint256 amount) private lockTheSwap {
    	if (amount > 0) {
    	    swapETHForTokens(amount);
	    }
    }

    //swapExactETHForTokens
    function swapETHForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

      // make the swap
        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            DEAD, // Burn address
            block.timestamp 
        );

        emit SwapETHForTokens(amount, path);
    }
    
    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        
        tradingEnabled = true;
        swapThreshold = (balanceOf(lpPair) * 5) / 10000;
        swapAmount = (balanceOf(lpPair) * 5) / 10000;
    }

    function sweepContingency() external onlyOwner {
        payable(_owner).transfer(address(this).balance);
    }


    function transferContractToken(address _token, address _to, uint256 _quant) public onlyOwner returns(bool _sent){
        _sent = IERC20(_token).transfer(_to, _quant);
    }

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]);
            _finalizeTransfer(msg.sender, accounts[i], amounts[i]*10**_decimals, false, false, false, true);
        }
    }

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee, bool buy, bool sell, bool other) internal returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                revert("Only owner can transfer at this time.");
            }
        }

        

        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, buy, sell, amount) : amount;
        _tOwned[to] += amountReceived;

        emit Transfer(from, to, amountReceived);
        return true;
    }

    function takeTaxes(address from, bool buy, bool sell, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (buy) {
            currentFee = _taxRates.buyFee;
        } else if (sell) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }

        uint256 feeAmount = amount * currentFee / masterTaxDivisor;
        uint256 tokenAmount = (feeAmount * _ratios.tokens) / (_ratios.total);
        if (tokenAmount > 0) {
            feeAmount -= tokenAmount;
            address destination = _taxWallets.tokens;
            _tOwned[destination] += tokenAmount;
            emit Transfer(from, destination, tokenAmount);
        }
        _tOwned[address(this)] += feeAmount;
        emit Transfer(from, address(this), feeAmount);

        return amount - (feeAmount + tokenAmount);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","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":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_amountTokensLastSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_percentLastSoldToBuyBackTimesTen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"tokens","type":"uint16"},{"internalType":"uint16","name":"swap","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address","name":"tokens","type":"address"},{"internalType":"address payable","name":"swap","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAmountTokensLastSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"percentLastSoldToBuyBackTimesTen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentLastSoldToBuyBackTimesTenNew","type":"uint256"}],"name":"setPercentLastSoldToBuyBackTimesTen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"tokens","type":"uint16"},{"internalType":"uint16","name":"swap","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokens","type":"address"},{"internalType":"address payable","name":"swap","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_quant","type":"uint256"}],"name":"transferContractToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600381905560c8608081905260a05260c08190526008805465ffffffffffff191662c800c817905560e0819052610100819052600a61012081905261014081905260098054660a000a000000006001600160401b03199091161790556101a060405273db809f4a17e59b05d7ab707af49b518f1a684903610160819052610180819052600c80546001600160a01b03199081168317909155600d80549091169091179055600e805461ff0019169055600f919091556014819055620000c99060129062000754565b620000d990633b9aca006200076c565b601655620000ea6012600a62000754565b620000fa90633b9aca006200076c565b6017556018805462ffffff19169055620001176012600a62000754565b6200012790633b9aca006200076c565b33600081815260016020526040812092909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200016a6012600a62000754565b6200017a90633b9aca006200076c565b60405190815260200160405180910390a3600080546001600160a01b031916331790556038461415620001d357600a80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620002c9565b46606114156200020957600a80546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c3179055620002c9565b4660011480620002195750466004145b80620002255750466003145b156200025757600a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620002c9565b4661a86a14156200028e57600a80546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d4179055620002c9565b4660fa1415620002c457600a80546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c29179055620002c9565b600080fd5b600a60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200031d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034391906200078e565b6001600160a01b031663c9c65396600a60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cb91906200078e565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000418573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043e91906200078e565b600b80546001600160a01b0319166001600160a01b039283169081179091556000908152600260205260408120805460ff1916600117905554600a546200048d9291821691166000196200053e565b600a54620004a99030906001600160a01b03166000196200053e565b600080546001600160a01b0390811682526005602090815260408084208054600160ff1991821681179092553080875283872080548316841790557f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba805483168417905586549095168652600784528286208054821683179055938552600690925290922080549091169091179055620007b9565b6001600160a01b038316620005905760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620005de5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640162000587565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006965781600019048211156200067a576200067a6200063f565b808516156200068857918102915b93841c93908002906200065a565b509250929050565b600082620006af575060016200074e565b81620006be575060006200074e565b8160018114620006d75760028114620006e25762000702565b60019150506200074e565b60ff841115620006f657620006f66200063f565b50506001821b6200074e565b5060208310610133831016604e8410600b841016171562000727575081810a6200074e565b62000733838362000655565b80600019048211156200074a576200074a6200063f565b0290505b92915050565b60006200076560ff8416836200069e565b9392505050565b60008160001904831182151516156200078957620007896200063f565b500290565b600060208284031215620007a157600080fd5b81516001600160a01b03811681146200076557600080fd5b612fd680620007c96000396000f3fe6080604052600436106102e85760003560e01c8063590ffdce11610190578063b1b08f71116100dc578063dd62ed3e11610095578063ee5d9c2d1161006f578063ee5d9c2d14610909578063f94aa1b41461091e578063fcbab4ab14610965578063fdb78c0e1461097b57600080fd5b8063dd62ed3e1461088d578063e4fcfd18146108d3578063eafb5a3c146108e957600080fd5b8063b1b08f71146104ca578063b3d514fb146104ca578063b74f7eb5146107c5578063cab5ebea146107e5578063cf84770614610805578063d3f6a1571461086d57600080fd5b806380c581d11161014957806395d89b411161012357806395d89b41146103a157806398077fa114610765578063a9059cbb14610785578063aa22b172146107a557600080fd5b806380c581d114610712578063893d20e8146107325780638a8c523c1461075057600080fd5b8063590ffdce1461064f5780635cce86cd1461066f5780636053a0e3146106a85780636ebd0078146106c857806370a08231146106dd578063715018a6146106fd57600080fd5b80632b28fc7a1161024f57806336fddb04116102085780634ada218b116101e25780634ada218b146105bd5780634fb2e45d146105d75780634fbee193146105f757806350a8e0161461063057600080fd5b806336fddb04146105685780633bb8ef6814610588578063452ed4f11461059d57600080fd5b80632b28fc7a146104ca5780632e8fa821146104e05780632f83f7bf146104f6578063313ce5671461050c57806332cde6641461052857806334cd82601461054857600080fd5b80630fa604e4116102a15780630fa604e414610429578063163140a61461043e57806318160ddd1461045357806323b872dd146104685780632610eaca1461048857806329370cc6146104aa57600080fd5b806303fd2a45146102f45780630445b66714610327578063069d955f1461034b57806306fdde03146103a15780630758d924146103d9578063095ea7b3146103f957600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061030a61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561033357600080fd5b5061033d60115481565b60405190815260200161031e565b34801561035757600080fd5b5060085461037c9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161031e565b3480156103ad57600080fd5b5060408051808201825260098152680b08a9c9e9a9ea4a0960bb1b6020820152905161031e91906127de565b3480156103e557600080fd5b50600a5461030a906001600160a01b031681565b34801561040557600080fd5b50610419610414366004612848565b61099a565b604051901515815260200161031e565b34801561043557600080fd5b5061033d6109b1565b34801561044a57600080fd5b5060135461033d565b34801561045f57600080fd5b5061033d6109d1565b34801561047457600080fd5b50610419610483366004612874565b610a10565b34801561049457600080fd5b506104a86104a336600461298b565b610a88565b005b3480156104b657600080fd5b506104a86104c5366004612a5b565b610b90565b3480156104d657600080fd5b5061033d6107d081565b3480156104ec57600080fd5b5061033d60125481565b34801561050257600080fd5b5061033d60135481565b34801561051857600080fd5b506040516012815260200161031e565b34801561053457600080fd5b506104a8610543366004612a8f565b610bd6565b34801561055457600080fd5b506104a8610563366004612ad2565b610cb9565b34801561057457600080fd5b506104a8610583366004612b0d565b610d52565b34801561059457600080fd5b5060145461033d565b3480156105a957600080fd5b50600b5461030a906001600160a01b031681565b3480156105c957600080fd5b506018546104199060ff1681565b3480156105e357600080fd5b506104a86105f2366004612b46565b610da7565b34801561060357600080fd5b50610419610612366004612b46565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561063c57600080fd5b5060185461041990610100900460ff1681565b34801561065b57600080fd5b506104a861066a366004612b0d565b610ece565b34801561067b57600080fd5b5061041961068a366004612b46565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106b457600080fd5b506018546104199062010000900460ff1681565b3480156106d457600080fd5b5061033d610f23565b3480156106e957600080fd5b5061033d6106f8366004612b46565b610f3e565b34801561070957600080fd5b506104a8610f59565b34801561071e57600080fd5b506104a861072d366004612b0d565b610fd8565b34801561073e57600080fd5b506000546001600160a01b031661030a565b34801561075c57600080fd5b506104a86110af565b34801561077157600080fd5b50610419610780366004612874565b6111f4565b34801561079157600080fd5b506104196107a0366004612848565b611292565b3480156107b157600080fd5b506104a86107c0366004612a8f565b6112a9565b3480156107d157600080fd5b506104a86107e0366004612b63565b61133f565b3480156107f157600080fd5b506104a8610800366004612a5b565b61136e565b34801561081157600080fd5b5060095461083f9061ffff808216916201000081048216916401000000008204811691600160301b90041684565b6040805161ffff9586168152938516602085015291841691830191909152909116606082015260800161031e565b34801561087957600080fd5b506104a8610888366004612b7c565b6113ec565b34801561089957600080fd5b5061033d6108a8366004612b7c565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156108df57600080fd5b5061033d600f5481565b3480156108f557600080fd5b506104a8610904366004612b46565b611444565b34801561091557600080fd5b506104a8611778565b34801561092a57600080fd5b50600c54600d54610945916001600160a01b03908116911682565b604080516001600160a01b0393841681529290911660208301520161031e565b34801561097157600080fd5b5061033d60145481565b34801561098757600080fd5b50600e5461041990610100900460ff1681565b60006109a73384846117df565b5060015b92915050565b60006109bf6012600a612ca4565b6017546109cc9190612cb3565b905090565b60006109df6012600a612ca4565b6109ed90633b9aca00612cd5565b6109f657600080fd5b610a026012600a612ca4565b6109cc90633b9aca00612cd5565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610a75576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610a6f908490612cf4565b90915550505b610a808484846118d8565b949350505050565b8051825114610ad65760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b60448201526064015b60405180910390fd5b60005b82518160ff161015610b8b57818160ff1681518110610afa57610afa612d0b565b6020026020010151610b0b33610f3e565b1015610b1657600080fd5b610b7833848360ff1681518110610b2f57610b2f612d0b565b60200260200101516012600a610b459190612ca4565b858560ff1681518110610b5a57610b5a612d0b565b6020026020010151610b6c9190612cd5565b60008060006001611d8d565b5080610b8381612d21565b915050610ad9565b505050565b6000546001600160a01b03163314610bba5760405162461bcd60e51b8152600401610acd90612d41565b60188054911515620100000262ff000019909216919091179055565b6000546001600160a01b03163314610c005760405162461bcd60e51b8152600401610acd90612d41565b6107d08361ffff1611158015610c1c57506107d08261ffff1611155b8015610c2e57506107d08161ffff1611155b610c7a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610acd565b6008805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6000546001600160a01b03163314610ce35760405162461bcd60e51b8152600401610acd90612d41565b8385610cf16012600a612ca4565b610cff90633b9aca00612cd5565b610d099190612cd5565b610d139190612cb3565b6011558183610d246012600a612ca4565b610d3290633b9aca00612cd5565b610d3c9190612cd5565b610d469190612cb3565b601255600f5550505050565b6000546001600160a01b03163314610d7c5760405162461bcd60e51b8152600401610acd90612d41565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610dd15760405162461bcd60e51b8152600401610acd90612d41565b6001600160a01b038116610df75760405162461bcd60e51b8152600401610acd90612d6c565b6001600160a01b03811661dead1415610e225760405162461bcd60e51b8152600401610acd90612d6c565b60008054610e3b916001600160a01b0390911690610ece565b610e46816001610ece565b60008054610e5c906001600160a01b0316610f3e565b1115610e8357600054610e81906001600160a01b031682610e7c82610f3e565b6118d8565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314610ef85760405162461bcd60e51b8152600401610acd90612d41565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000610f316012600a612ca4565b6016546109cc9190612cb3565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314610f835760405162461bcd60e51b8152600401610acd90612d41565b60008054610f9c916001600160a01b0390911690610ece565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146110025760405162461bcd60e51b8152600401610acd90612d41565b8061102957506001600160a01b03166000908152600260205260409020805460ff19169055565b60035415611083576203f480600354426110439190612cf4565b116110835760405162461bcd60e51b815260206004820152601060248201526f332044617920636f6f6c646f776e2e2160801b6044820152606401610acd565b6001600160a01b0382166000908152600260205260409020805460ff19166001179055426003555b5050565b6000546001600160a01b031633146110d95760405162461bcd60e51b8152600401610acd90612d41565b60185460ff161561112c5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610acd565b601854610100900460ff166111835760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610acd565b6018805460ff19166001179055600b54612710906111a9906001600160a01b0316610f3e565b6111b4906005612cd5565b6111be9190612cb3565b601155600b54612710906111da906001600160a01b0316610f3e565b6111e5906005612cd5565b6111ef9190612cb3565b601255565b600080546001600160a01b0316331461121f5760405162461bcd60e51b8152600401610acd90612d41565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af115801561126e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a809190612dc9565b600061129f3384846118d8565b5060019392505050565b6000546001600160a01b031633146112d35760405162461bcd60e51b8152600401610acd90612d41565b6009805461ffff8381166401000000000265ffff0000000019868316620100000263ffffffff199094169288169290921792909217161790556113168183612de6565b6009805461ffff92909216600160301b0267ffff00000000000019909216919091179055505050565b6000546001600160a01b031633146113695760405162461bcd60e51b8152600401610acd90612d41565b601455565b6000546001600160a01b031633146113985760405162461bcd60e51b8152600401610acd90612d41565b600e80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906113e190831515815260200190565b60405180910390a150565b6000546001600160a01b031633146114165760405162461bcd60e51b8152600401610acd90612d41565b600c80546001600160a01b039384166001600160a01b031991821617909155600d8054929093169116179055565b6000546001600160a01b0316331461146e5760405162461bcd60e51b8152600401610acd90612d41565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d79190612e0c565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611524573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115489190612e0c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b79190612e0c565b90506001600160a01b03811661173057816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611605573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116299190612e0c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169a9190612e0c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156116e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170b9190612e0c565b600b80546001600160a01b0319166001600160a01b039290921691909117905561174c565b600b80546001600160a01b0319166001600160a01b0383161790555b600a80546001600160a01b0319166001600160a01b038416908117909155610b8b9030906000196117df565b6000546001600160a01b031633146117a25760405162461bcd60e51b8152600401610acd90612d41565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156117dc573d6000803e3d6000fd5b50565b6001600160a01b03831661182b5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610acd565b6001600160a01b0382166118775760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610acd565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661193e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610acd565b6001600160a01b0383166119a05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610acd565b60008211611a025760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610acd565b6001600160a01b0384166000908152600260205260408120548190819060ff1615611a305760019250611a5e565b6001600160a01b03861660009081526002602052604090205460ff1615611a5a5760019150611a5e565b5060015b611a688787611ef8565b15611c305760185460ff16611abf5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610acd565b8280611ac85750815b15611b77576001600160a01b03871660009081526006602052604090205460ff16158015611b0f57506001600160a01b03861660009081526006602052604090205460ff16155b15611b7757601654851115611b775760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610acd565b600a546001600160a01b03878116911614801590611b93575081155b15611c30576001600160a01b03861660009081526006602052604090205460ff16611c305760175485611bc588610f3e565b611bcf9190612e29565b1115611c305760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610acd565b6001600160a01b03871660009081526005602052604090205460019060ff1680611c7257506001600160a01b03871660009081526005602052604090205460ff165b15611c7b575060005b8215611d7257600e5460ff16158015611c9b5750600e54610100900460ff165b15611cea5742600f54601054611cb19190612e29565b1015611cea576000611cc230610f3e565b90506011548110611ce8576012548110611cdb57506012545b611ce3611fcd565b426010555b505b601854479062010000900460ff168015611d0b5750600e54610100900460ff165b15611d7057611d198761221d565b60136000828254611d2a9190612e29565b9250508190555060006014546103e8601354611d469190612cb3565b611d509190612cd5565b905081811015611d6857611d6381612395565b611d6e565b60006013555b505b505b611d8188888884888888611d8d565b98975050505050505050565b601854600090610100900460ff16611e2157611da988886123be565b601854610100900460ff16158015611dc65750611dc68888611ef8565b15611e215760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610acd565b6001600160a01b03881660009081526001602052604081208054889290611e49908490612cf4565b909155506000905085611e5c5786611e68565b611e688986868a6124ca565b6001600160a01b038916600090815260016020526040812080549293508392909190611e95908490612e29565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ee191815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b03848116911614801590611f2557506000546001600160a01b03838116911614155b8015611f3c57506000546001600160a01b03163214155b8015611f6157506001600160a01b03821660009081526007602052604090205460ff16155b8015611f8657506001600160a01b03831660009081526007602052604090205460ff16155b8015611f9d57506001600160a01b03821661dead14155b8015611fb157506001600160a01b03821615155b8015611fc657506001600160a01b0383163014155b9392505050565b600e805460ff19166001179055601254604080516002808252606082018352600092602083019080368337019050509050308160008151811061201257612012612d0b565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561206b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208f9190612e0c565b816001815181106120a2576120a2612d0b565b6001600160a01b039283166020918202929092010152600a5460405163791ac94760e01b81524792919091169063791ac947906120ec908690600090879030904290600401612e85565b600060405180830381600087803b15801561210657600080fd5b505af115801561211a573d6000803e3d6000fd5b505050506000814761212c9190612cf4565b60095490915060009061ffff600160301b820481169161215491620100009091041684612cd5565b61215e9190612cb3565b600d546040519192506000916001600160a01b039091169061753090849084818181858888f193505050503d80600081146121b5576040519150601f19603f3d011682016040523d82523d6000602084013e6121ba565b606091505b505090508061220b5760405162461bcd60e51b815260206004820152601e60248201527f72656365697665722072656a656374656420455448207472616e7366657200006044820152606401610acd565b5050600e805460ff1916905550505050565b60408051600280825260608201835260009283929190602083019080368337019050509050308160008151811061225657612256612d0b565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156122af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d39190612e0c565b816001815181106122e6576122e6612d0b565b6001600160a01b039283166020918202929092010152600a5460405163d06ca61f60e01b8152600092919091169063d06ca61f9061232a9087908690600401612ec1565b600060405180830381865afa158015612347573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261236f9190810190612eda565b90508060018151811061238457612384612d0b565b602002602001015192505050919050565b600e805460ff1916600117905580156123b1576123b18161265e565b50600e805460ff19169055565b601854610100900460ff16156124225760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610acd565b61242c8282611ef8565b1580156124465750600b546001600160a01b038281169116145b156110ab576001600160a01b0382166000908152600760209081526040918290208054600160ff1990911681179091556018805461010061ff00199182168117909255600e8054909116909117905591519182527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325791015b60405180910390a15050565b60008084156124e0575060085461ffff1661250a565b83156124f9575060085462010000900461ffff1661250a565b50600854640100000000900461ffff165b60006127106125198386612cd5565b6125239190612cb3565b60095490915060009061ffff600160301b8204811691612544911684612cd5565b61254e9190612cb3565b905080156125e6576125608183612cf4565b600c546001600160a01b031660008181526001602052604081208054939550919284929190612590908490612e29565b92505081905550806001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125dc91815260200190565b60405180910390a3505b3060009081526001602052604081208054849290612605908490612e29565b909155505060405182815230906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36126548183612e29565b611d819086612cf4565b6040805160028082526060820183526000926020830190803683375050600a54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156126c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ec9190612e0c565b816000815181106126ff576126ff612d0b565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061273357612733612d0b565b6001600160a01b039283166020918202929092010152600a5460405163b6f9de9560e01b815291169063b6f9de9590849061277b90600090869061dead904290600401612f6b565b6000604051808303818588803b15801561279457600080fd5b505af11580156127a8573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516124be929190612ec1565b600060208083528351808285015260005b8181101561280b578581018301518582016040015282016127ef565b8181111561281d576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146117dc57600080fd5b6000806040838503121561285b57600080fd5b823561286681612833565b946020939093013593505050565b60008060006060848603121561288957600080fd5b833561289481612833565b925060208401356128a481612833565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128f4576128f46128b5565b604052919050565b600067ffffffffffffffff821115612916576129166128b5565b5060051b60200190565b600082601f83011261293157600080fd5b81356020612946612941836128fc565b6128cb565b82815260059290921b8401810191818101908684111561296557600080fd5b8286015b848110156129805780358352918301918301612969565b509695505050505050565b6000806040838503121561299e57600080fd5b823567ffffffffffffffff808211156129b657600080fd5b818501915085601f8301126129ca57600080fd5b813560206129da612941836128fc565b82815260059290921b840181019181810190898411156129f957600080fd5b948201945b83861015612a20578535612a1181612833565b825294820194908201906129fe565b96505086013592505080821115612a3657600080fd5b50612a4385828601612920565b9150509250929050565b80151581146117dc57600080fd5b600060208284031215612a6d57600080fd5b8135611fc681612a4d565b803561ffff81168114612a8a57600080fd5b919050565b600080600060608486031215612aa457600080fd5b612aad84612a78565b9250612abb60208501612a78565b9150612ac960408501612a78565b90509250925092565b600080600080600060a08688031215612aea57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215612b2057600080fd5b8235612b2b81612833565b91506020830135612b3b81612a4d565b809150509250929050565b600060208284031215612b5857600080fd5b8135611fc681612833565b600060208284031215612b7557600080fd5b5035919050565b60008060408385031215612b8f57600080fd5b8235612b9a81612833565b91506020830135612b3b81612833565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612bfb578160001904821115612be157612be1612baa565b80851615612bee57918102915b93841c9390800290612bc5565b509250929050565b600082612c12575060016109ab565b81612c1f575060006109ab565b8160018114612c355760028114612c3f57612c5b565b60019150506109ab565b60ff841115612c5057612c50612baa565b50506001821b6109ab565b5060208310610133831016604e8410600b8410161715612c7e575081810a6109ab565b612c888383612bc0565b8060001904821115612c9c57612c9c612baa565b029392505050565b6000611fc660ff841683612c03565b600082612cd057634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612cef57612cef612baa565b500290565b600082821015612d0657612d06612baa565b500390565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff811415612d3857612d38612baa565b60010192915050565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600060208284031215612ddb57600080fd5b8151611fc681612a4d565b600061ffff808316818516808303821115612e0357612e03612baa565b01949350505050565b600060208284031215612e1e57600080fd5b8151611fc681612833565b60008219821115612e3c57612e3c612baa565b500190565b600081518084526020808501945080840160005b83811015612e7a5781516001600160a01b031687529582019590820190600101612e55565b509495945050505050565b85815284602082015260a060408201526000612ea460a0830186612e41565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000610a806040830184612e41565b60006020808385031215612eed57600080fd5b825167ffffffffffffffff811115612f0457600080fd5b8301601f81018513612f1557600080fd5b8051612f23612941826128fc565b81815260059190911b82018301908381019087831115612f4257600080fd5b928401925b82841015612f6057835182529284019290840190612f47565b979650505050505050565b848152608060208201526000612f846080830186612e41565b6001600160a01b0394909416604083015250606001529291505056fea26469706673582212206f2a8af208c49e544f32926ac9bf59ea92f4917973b896b649eafbd9c8e04d8f64736f6c634300080c0033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c8063590ffdce11610190578063b1b08f71116100dc578063dd62ed3e11610095578063ee5d9c2d1161006f578063ee5d9c2d14610909578063f94aa1b41461091e578063fcbab4ab14610965578063fdb78c0e1461097b57600080fd5b8063dd62ed3e1461088d578063e4fcfd18146108d3578063eafb5a3c146108e957600080fd5b8063b1b08f71146104ca578063b3d514fb146104ca578063b74f7eb5146107c5578063cab5ebea146107e5578063cf84770614610805578063d3f6a1571461086d57600080fd5b806380c581d11161014957806395d89b411161012357806395d89b41146103a157806398077fa114610765578063a9059cbb14610785578063aa22b172146107a557600080fd5b806380c581d114610712578063893d20e8146107325780638a8c523c1461075057600080fd5b8063590ffdce1461064f5780635cce86cd1461066f5780636053a0e3146106a85780636ebd0078146106c857806370a08231146106dd578063715018a6146106fd57600080fd5b80632b28fc7a1161024f57806336fddb04116102085780634ada218b116101e25780634ada218b146105bd5780634fb2e45d146105d75780634fbee193146105f757806350a8e0161461063057600080fd5b806336fddb04146105685780633bb8ef6814610588578063452ed4f11461059d57600080fd5b80632b28fc7a146104ca5780632e8fa821146104e05780632f83f7bf146104f6578063313ce5671461050c57806332cde6641461052857806334cd82601461054857600080fd5b80630fa604e4116102a15780630fa604e414610429578063163140a61461043e57806318160ddd1461045357806323b872dd146104685780632610eaca1461048857806329370cc6146104aa57600080fd5b806303fd2a45146102f45780630445b66714610327578063069d955f1461034b57806306fdde03146103a15780630758d924146103d9578063095ea7b3146103f957600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061030a61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561033357600080fd5b5061033d60115481565b60405190815260200161031e565b34801561035757600080fd5b5060085461037c9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161031e565b3480156103ad57600080fd5b5060408051808201825260098152680b08a9c9e9a9ea4a0960bb1b6020820152905161031e91906127de565b3480156103e557600080fd5b50600a5461030a906001600160a01b031681565b34801561040557600080fd5b50610419610414366004612848565b61099a565b604051901515815260200161031e565b34801561043557600080fd5b5061033d6109b1565b34801561044a57600080fd5b5060135461033d565b34801561045f57600080fd5b5061033d6109d1565b34801561047457600080fd5b50610419610483366004612874565b610a10565b34801561049457600080fd5b506104a86104a336600461298b565b610a88565b005b3480156104b657600080fd5b506104a86104c5366004612a5b565b610b90565b3480156104d657600080fd5b5061033d6107d081565b3480156104ec57600080fd5b5061033d60125481565b34801561050257600080fd5b5061033d60135481565b34801561051857600080fd5b506040516012815260200161031e565b34801561053457600080fd5b506104a8610543366004612a8f565b610bd6565b34801561055457600080fd5b506104a8610563366004612ad2565b610cb9565b34801561057457600080fd5b506104a8610583366004612b0d565b610d52565b34801561059457600080fd5b5060145461033d565b3480156105a957600080fd5b50600b5461030a906001600160a01b031681565b3480156105c957600080fd5b506018546104199060ff1681565b3480156105e357600080fd5b506104a86105f2366004612b46565b610da7565b34801561060357600080fd5b50610419610612366004612b46565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561063c57600080fd5b5060185461041990610100900460ff1681565b34801561065b57600080fd5b506104a861066a366004612b0d565b610ece565b34801561067b57600080fd5b5061041961068a366004612b46565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106b457600080fd5b506018546104199062010000900460ff1681565b3480156106d457600080fd5b5061033d610f23565b3480156106e957600080fd5b5061033d6106f8366004612b46565b610f3e565b34801561070957600080fd5b506104a8610f59565b34801561071e57600080fd5b506104a861072d366004612b0d565b610fd8565b34801561073e57600080fd5b506000546001600160a01b031661030a565b34801561075c57600080fd5b506104a86110af565b34801561077157600080fd5b50610419610780366004612874565b6111f4565b34801561079157600080fd5b506104196107a0366004612848565b611292565b3480156107b157600080fd5b506104a86107c0366004612a8f565b6112a9565b3480156107d157600080fd5b506104a86107e0366004612b63565b61133f565b3480156107f157600080fd5b506104a8610800366004612a5b565b61136e565b34801561081157600080fd5b5060095461083f9061ffff808216916201000081048216916401000000008204811691600160301b90041684565b6040805161ffff9586168152938516602085015291841691830191909152909116606082015260800161031e565b34801561087957600080fd5b506104a8610888366004612b7c565b6113ec565b34801561089957600080fd5b5061033d6108a8366004612b7c565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156108df57600080fd5b5061033d600f5481565b3480156108f557600080fd5b506104a8610904366004612b46565b611444565b34801561091557600080fd5b506104a8611778565b34801561092a57600080fd5b50600c54600d54610945916001600160a01b03908116911682565b604080516001600160a01b0393841681529290911660208301520161031e565b34801561097157600080fd5b5061033d60145481565b34801561098757600080fd5b50600e5461041990610100900460ff1681565b60006109a73384846117df565b5060015b92915050565b60006109bf6012600a612ca4565b6017546109cc9190612cb3565b905090565b60006109df6012600a612ca4565b6109ed90633b9aca00612cd5565b6109f657600080fd5b610a026012600a612ca4565b6109cc90633b9aca00612cd5565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610a75576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610a6f908490612cf4565b90915550505b610a808484846118d8565b949350505050565b8051825114610ad65760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b60448201526064015b60405180910390fd5b60005b82518160ff161015610b8b57818160ff1681518110610afa57610afa612d0b565b6020026020010151610b0b33610f3e565b1015610b1657600080fd5b610b7833848360ff1681518110610b2f57610b2f612d0b565b60200260200101516012600a610b459190612ca4565b858560ff1681518110610b5a57610b5a612d0b565b6020026020010151610b6c9190612cd5565b60008060006001611d8d565b5080610b8381612d21565b915050610ad9565b505050565b6000546001600160a01b03163314610bba5760405162461bcd60e51b8152600401610acd90612d41565b60188054911515620100000262ff000019909216919091179055565b6000546001600160a01b03163314610c005760405162461bcd60e51b8152600401610acd90612d41565b6107d08361ffff1611158015610c1c57506107d08261ffff1611155b8015610c2e57506107d08161ffff1611155b610c7a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610acd565b6008805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6000546001600160a01b03163314610ce35760405162461bcd60e51b8152600401610acd90612d41565b8385610cf16012600a612ca4565b610cff90633b9aca00612cd5565b610d099190612cd5565b610d139190612cb3565b6011558183610d246012600a612ca4565b610d3290633b9aca00612cd5565b610d3c9190612cd5565b610d469190612cb3565b601255600f5550505050565b6000546001600160a01b03163314610d7c5760405162461bcd60e51b8152600401610acd90612d41565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610dd15760405162461bcd60e51b8152600401610acd90612d41565b6001600160a01b038116610df75760405162461bcd60e51b8152600401610acd90612d6c565b6001600160a01b03811661dead1415610e225760405162461bcd60e51b8152600401610acd90612d6c565b60008054610e3b916001600160a01b0390911690610ece565b610e46816001610ece565b60008054610e5c906001600160a01b0316610f3e565b1115610e8357600054610e81906001600160a01b031682610e7c82610f3e565b6118d8565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314610ef85760405162461bcd60e51b8152600401610acd90612d41565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000610f316012600a612ca4565b6016546109cc9190612cb3565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314610f835760405162461bcd60e51b8152600401610acd90612d41565b60008054610f9c916001600160a01b0390911690610ece565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146110025760405162461bcd60e51b8152600401610acd90612d41565b8061102957506001600160a01b03166000908152600260205260409020805460ff19169055565b60035415611083576203f480600354426110439190612cf4565b116110835760405162461bcd60e51b815260206004820152601060248201526f332044617920636f6f6c646f776e2e2160801b6044820152606401610acd565b6001600160a01b0382166000908152600260205260409020805460ff19166001179055426003555b5050565b6000546001600160a01b031633146110d95760405162461bcd60e51b8152600401610acd90612d41565b60185460ff161561112c5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610acd565b601854610100900460ff166111835760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610acd565b6018805460ff19166001179055600b54612710906111a9906001600160a01b0316610f3e565b6111b4906005612cd5565b6111be9190612cb3565b601155600b54612710906111da906001600160a01b0316610f3e565b6111e5906005612cd5565b6111ef9190612cb3565b601255565b600080546001600160a01b0316331461121f5760405162461bcd60e51b8152600401610acd90612d41565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af115801561126e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a809190612dc9565b600061129f3384846118d8565b5060019392505050565b6000546001600160a01b031633146112d35760405162461bcd60e51b8152600401610acd90612d41565b6009805461ffff8381166401000000000265ffff0000000019868316620100000263ffffffff199094169288169290921792909217161790556113168183612de6565b6009805461ffff92909216600160301b0267ffff00000000000019909216919091179055505050565b6000546001600160a01b031633146113695760405162461bcd60e51b8152600401610acd90612d41565b601455565b6000546001600160a01b031633146113985760405162461bcd60e51b8152600401610acd90612d41565b600e80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906113e190831515815260200190565b60405180910390a150565b6000546001600160a01b031633146114165760405162461bcd60e51b8152600401610acd90612d41565b600c80546001600160a01b039384166001600160a01b031991821617909155600d8054929093169116179055565b6000546001600160a01b0316331461146e5760405162461bcd60e51b8152600401610acd90612d41565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d79190612e0c565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611524573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115489190612e0c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b79190612e0c565b90506001600160a01b03811661173057816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611605573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116299190612e0c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169a9190612e0c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156116e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170b9190612e0c565b600b80546001600160a01b0319166001600160a01b039290921691909117905561174c565b600b80546001600160a01b0319166001600160a01b0383161790555b600a80546001600160a01b0319166001600160a01b038416908117909155610b8b9030906000196117df565b6000546001600160a01b031633146117a25760405162461bcd60e51b8152600401610acd90612d41565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156117dc573d6000803e3d6000fd5b50565b6001600160a01b03831661182b5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610acd565b6001600160a01b0382166118775760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610acd565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661193e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610acd565b6001600160a01b0383166119a05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610acd565b60008211611a025760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610acd565b6001600160a01b0384166000908152600260205260408120548190819060ff1615611a305760019250611a5e565b6001600160a01b03861660009081526002602052604090205460ff1615611a5a5760019150611a5e565b5060015b611a688787611ef8565b15611c305760185460ff16611abf5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610acd565b8280611ac85750815b15611b77576001600160a01b03871660009081526006602052604090205460ff16158015611b0f57506001600160a01b03861660009081526006602052604090205460ff16155b15611b7757601654851115611b775760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610acd565b600a546001600160a01b03878116911614801590611b93575081155b15611c30576001600160a01b03861660009081526006602052604090205460ff16611c305760175485611bc588610f3e565b611bcf9190612e29565b1115611c305760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610acd565b6001600160a01b03871660009081526005602052604090205460019060ff1680611c7257506001600160a01b03871660009081526005602052604090205460ff165b15611c7b575060005b8215611d7257600e5460ff16158015611c9b5750600e54610100900460ff165b15611cea5742600f54601054611cb19190612e29565b1015611cea576000611cc230610f3e565b90506011548110611ce8576012548110611cdb57506012545b611ce3611fcd565b426010555b505b601854479062010000900460ff168015611d0b5750600e54610100900460ff165b15611d7057611d198761221d565b60136000828254611d2a9190612e29565b9250508190555060006014546103e8601354611d469190612cb3565b611d509190612cd5565b905081811015611d6857611d6381612395565b611d6e565b60006013555b505b505b611d8188888884888888611d8d565b98975050505050505050565b601854600090610100900460ff16611e2157611da988886123be565b601854610100900460ff16158015611dc65750611dc68888611ef8565b15611e215760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610acd565b6001600160a01b03881660009081526001602052604081208054889290611e49908490612cf4565b909155506000905085611e5c5786611e68565b611e688986868a6124ca565b6001600160a01b038916600090815260016020526040812080549293508392909190611e95908490612e29565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ee191815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b03848116911614801590611f2557506000546001600160a01b03838116911614155b8015611f3c57506000546001600160a01b03163214155b8015611f6157506001600160a01b03821660009081526007602052604090205460ff16155b8015611f8657506001600160a01b03831660009081526007602052604090205460ff16155b8015611f9d57506001600160a01b03821661dead14155b8015611fb157506001600160a01b03821615155b8015611fc657506001600160a01b0383163014155b9392505050565b600e805460ff19166001179055601254604080516002808252606082018352600092602083019080368337019050509050308160008151811061201257612012612d0b565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561206b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208f9190612e0c565b816001815181106120a2576120a2612d0b565b6001600160a01b039283166020918202929092010152600a5460405163791ac94760e01b81524792919091169063791ac947906120ec908690600090879030904290600401612e85565b600060405180830381600087803b15801561210657600080fd5b505af115801561211a573d6000803e3d6000fd5b505050506000814761212c9190612cf4565b60095490915060009061ffff600160301b820481169161215491620100009091041684612cd5565b61215e9190612cb3565b600d546040519192506000916001600160a01b039091169061753090849084818181858888f193505050503d80600081146121b5576040519150601f19603f3d011682016040523d82523d6000602084013e6121ba565b606091505b505090508061220b5760405162461bcd60e51b815260206004820152601e60248201527f72656365697665722072656a656374656420455448207472616e7366657200006044820152606401610acd565b5050600e805460ff1916905550505050565b60408051600280825260608201835260009283929190602083019080368337019050509050308160008151811061225657612256612d0b565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156122af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d39190612e0c565b816001815181106122e6576122e6612d0b565b6001600160a01b039283166020918202929092010152600a5460405163d06ca61f60e01b8152600092919091169063d06ca61f9061232a9087908690600401612ec1565b600060405180830381865afa158015612347573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261236f9190810190612eda565b90508060018151811061238457612384612d0b565b602002602001015192505050919050565b600e805460ff1916600117905580156123b1576123b18161265e565b50600e805460ff19169055565b601854610100900460ff16156124225760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610acd565b61242c8282611ef8565b1580156124465750600b546001600160a01b038281169116145b156110ab576001600160a01b0382166000908152600760209081526040918290208054600160ff1990911681179091556018805461010061ff00199182168117909255600e8054909116909117905591519182527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325791015b60405180910390a15050565b60008084156124e0575060085461ffff1661250a565b83156124f9575060085462010000900461ffff1661250a565b50600854640100000000900461ffff165b60006127106125198386612cd5565b6125239190612cb3565b60095490915060009061ffff600160301b8204811691612544911684612cd5565b61254e9190612cb3565b905080156125e6576125608183612cf4565b600c546001600160a01b031660008181526001602052604081208054939550919284929190612590908490612e29565b92505081905550806001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125dc91815260200190565b60405180910390a3505b3060009081526001602052604081208054849290612605908490612e29565b909155505060405182815230906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36126548183612e29565b611d819086612cf4565b6040805160028082526060820183526000926020830190803683375050600a54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156126c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ec9190612e0c565b816000815181106126ff576126ff612d0b565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061273357612733612d0b565b6001600160a01b039283166020918202929092010152600a5460405163b6f9de9560e01b815291169063b6f9de9590849061277b90600090869061dead904290600401612f6b565b6000604051808303818588803b15801561279457600080fd5b505af11580156127a8573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516124be929190612ec1565b600060208083528351808285015260005b8181101561280b578581018301518582016040015282016127ef565b8181111561281d576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146117dc57600080fd5b6000806040838503121561285b57600080fd5b823561286681612833565b946020939093013593505050565b60008060006060848603121561288957600080fd5b833561289481612833565b925060208401356128a481612833565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128f4576128f46128b5565b604052919050565b600067ffffffffffffffff821115612916576129166128b5565b5060051b60200190565b600082601f83011261293157600080fd5b81356020612946612941836128fc565b6128cb565b82815260059290921b8401810191818101908684111561296557600080fd5b8286015b848110156129805780358352918301918301612969565b509695505050505050565b6000806040838503121561299e57600080fd5b823567ffffffffffffffff808211156129b657600080fd5b818501915085601f8301126129ca57600080fd5b813560206129da612941836128fc565b82815260059290921b840181019181810190898411156129f957600080fd5b948201945b83861015612a20578535612a1181612833565b825294820194908201906129fe565b96505086013592505080821115612a3657600080fd5b50612a4385828601612920565b9150509250929050565b80151581146117dc57600080fd5b600060208284031215612a6d57600080fd5b8135611fc681612a4d565b803561ffff81168114612a8a57600080fd5b919050565b600080600060608486031215612aa457600080fd5b612aad84612a78565b9250612abb60208501612a78565b9150612ac960408501612a78565b90509250925092565b600080600080600060a08688031215612aea57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215612b2057600080fd5b8235612b2b81612833565b91506020830135612b3b81612a4d565b809150509250929050565b600060208284031215612b5857600080fd5b8135611fc681612833565b600060208284031215612b7557600080fd5b5035919050565b60008060408385031215612b8f57600080fd5b8235612b9a81612833565b91506020830135612b3b81612833565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612bfb578160001904821115612be157612be1612baa565b80851615612bee57918102915b93841c9390800290612bc5565b509250929050565b600082612c12575060016109ab565b81612c1f575060006109ab565b8160018114612c355760028114612c3f57612c5b565b60019150506109ab565b60ff841115612c5057612c50612baa565b50506001821b6109ab565b5060208310610133831016604e8410600b8410161715612c7e575081810a6109ab565b612c888383612bc0565b8060001904821115612c9c57612c9c612baa565b029392505050565b6000611fc660ff841683612c03565b600082612cd057634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612cef57612cef612baa565b500290565b600082821015612d0657612d06612baa565b500390565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff811415612d3857612d38612baa565b60010192915050565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600060208284031215612ddb57600080fd5b8151611fc681612a4d565b600061ffff808316818516808303821115612e0357612e03612baa565b01949350505050565b600060208284031215612e1e57600080fd5b8151611fc681612833565b60008219821115612e3c57612e3c612baa565b500190565b600081518084526020808501945080840160005b83811015612e7a5781516001600160a01b031687529582019590820190600101612e55565b509495945050505050565b85815284602082015260a060408201526000612ea460a0830186612e41565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000610a806040830184612e41565b60006020808385031215612eed57600080fd5b825167ffffffffffffffff811115612f0457600080fd5b8301601f81018513612f1557600080fd5b8051612f23612941826128fc565b81815260059190911b82018301908381019087831115612f4257600080fd5b928401925b82841015612f6057835182529284019290840190612f47565b979650505050505050565b848152608060208201526000612f846080830186612e41565b6001600160a01b0394909416604083015250606001529291505056fea26469706673582212206f2a8af208c49e544f32926ac9bf59ea92f4917973b896b649eafbd9c8e04d8f64736f6c634300080c0033

Deployed Bytecode Sourcemap

3727:19623:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5286:73;;;;;;;;;;;;5317:42;5286:73;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;5286:73:0;;;;;;;;5801:28;;;;;;;;;;;;;;;;;;;368:25:1;;;356:2;341:18;5801:28:0;222:177:1;4773:111:0;;;;;;;;;;-1:-1:-1;4773:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;610:6:1;643:15;;;625:34;;695:15;;;690:2;675:18;;668:43;747:15;;727:18;;;720:43;;;;588:2;573:18;4773:111:0;404:365:1;10185:80:0;;;;;;;;;;-1:-1:-1;10257:5:0;;;;;;;;;;;-1:-1:-1;;;10257:5:0;;;;10185:80;;;;10257:5;10185:80;:::i;5225:26::-;;;;;;;;;;-1:-1:-1;5225:26:0;;;;-1:-1:-1;;;;;5225:26:0;;;10795:159;;;;;;;;;;-1:-1:-1;10795:159:0;;;;;:::i;:::-;;:::i;:::-;;;2222:14:1;;2215:22;2197:41;;2185:2;2170:18;10795:159:0;2057:187:1;13895:112:0;;;;;;;;;;;;;:::i;14017:::-;;;;;;;;;;-1:-1:-1;14100:21:0;;14017:112;;9888:115;;;;;;;;;;;;;:::i;11284:306::-;;;;;;;;;;-1:-1:-1;11284:306:0;;;;;:::i;:::-;;:::i;21389:408::-;;;;;;;;;;-1:-1:-1;21389:408:0;;;;;:::i;:::-;;:::i;:::-;;14284:113;;;;;;;;;;-1:-1:-1;14284:113:0;;;;;:::i;:::-;;:::i;5022:42::-;;;;;;;;;;;;5060:4;5022:42;;5836:25;;;;;;;;;;;;;;;;5874:36;;;;;;;;;;;;;;;;10009:80;;;;;;;;;;-1:-1:-1;10009:80:0;;4451:2;5708:36:1;;5696:2;5681:18;10009:80:0;5566:184:1;12567:397:0;;;;;;;;;;-1:-1:-1;12567:397:0;;;;;:::i;:::-;;:::i;14948:338::-;;;;;;;;;;-1:-1:-1;14948:338:0;;;;;:::i;:::-;;:::i;13220:140::-;;;;;;;;;;-1:-1:-1;13220:140:0;;;;;:::i;:::-;;:::i;14137:133::-;;;;;;;;;;-1:-1:-1;14229:33:0;;14137:133;;5258:21;;;;;;;;;;-1:-1:-1;5258:21:0;;;;-1:-1:-1;;;;;5258:21:0;;;6116:34;;;;;;;;;;-1:-1:-1;6116:34:0;;;;;;;;8746:588;;;;;;;;;;-1:-1:-1;8746:588:0;;;;;:::i;:::-;;:::i;13506:125::-;;;;;;;;;;-1:-1:-1;13506:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;13595:28:0;13571:4;13595:28;;;:19;:28;;;;;;;;;13506:125;6157:36;;;;;;;;;;-1:-1:-1;6157:36:0;;;;;;;;;;;13639:134;;;;;;;;;;-1:-1:-1;13639:134:0;;;;;:::i;:::-;;:::i;13368:130::-;;;;;;;;;;-1:-1:-1;13368:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;13460:30:0;13436:4;13460:30;;;:21;:30;;;;;;;;;13368:130;6200:34;;;;;;;;;;-1:-1:-1;6200:34:0;;;;;;;;;;;13781:106;;;;;;;;;;;;;:::i;10497:117::-;;;;;;;;;;-1:-1:-1;10497:117:0;;;;;:::i;:::-;;:::i;9342:193::-;;;;;;;;;;;;;:::i;12146:407::-;;;;;;;;;;-1:-1:-1;12146:407:0;;;;;:::i;:::-;;:::i;10271:79::-;;;;;;;;;;-1:-1:-1;10323:7:0;10341:6;-1:-1:-1;;;;;10341:6:0;10271:79;;20743:332;;;;;;;;;;;;;:::i;21206:175::-;;;;;;;;;;-1:-1:-1;21206:175:0;;;;;:::i;:::-;;:::i;10622:165::-;;;;;;;;;;-1:-1:-1;10622:165:0;;;;;:::i;:::-;;:::i;12976:230::-;;;;;;;;;;-1:-1:-1;12976:230:0;;;;;:::i;:::-;;:::i;14405:197::-;;;;;;;;;;-1:-1:-1;14405:197:0;;;;;:::i;:::-;;:::i;15468:164::-;;;;;;;;;;-1:-1:-1;15468:164:0;;;;;:::i;:::-;;:::i;4893:120::-;;;;;;;;;;-1:-1:-1;4893:120:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4893:120:0;;;;;;;;;7768:6:1;7801:15;;;7783:34;;7853:15;;;7848:2;7833:18;;7826:43;7905:15;;;7885:18;;;7878:43;;;;7957:15;;;7952:2;7937:18;;7930:43;7745:3;7730:19;4893:120:0;7535:444:1;15294:166:0;;;;;;;;;;-1:-1:-1;15294:166:0;;;;;:::i;:::-;;:::i;10356:133::-;;;;;;;;;;-1:-1:-1;10356:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;10458:19:0;;;10440:7;10458:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;10356:133;5719:44;;;;;;;;;;;;;;;;11598:540;;;;;;;;;;-1:-1:-1;11598:540:0;;;;;:::i;:::-;;:::i;21083:113::-;;;;;;;;;;;;;:::i;5458:184::-;;;;;;;;;;-1:-1:-1;5458:184:0;;;;;;-1:-1:-1;;;;;5458:184:0;;;;;;;;;;;-1:-1:-1;;;;;9024:15:1;;;9006:34;;9076:15;;;;9071:2;9056:18;;9049:43;8941:18;5458:184:0;8778:320:1;5917:53:0;;;;;;;;;;;;;;;;5673:39;;;;;;;;;;-1:-1:-1;5673:39:0;;;;;;;;;;;10795:159;10870:4;10887:37;10896:10;10908:7;10917:6;10887:8;:37::i;:::-;-1:-1:-1;10942:4:0;10795:159;;;;;:::o;13895:112::-;13940:7;13985:13;4451:2;13985;:13;:::i;:::-;13967:14;;:32;;;;:::i;:::-;13960:39;;13895:112;:::o;9888:115::-;9943:7;4514:13;4451:2;4514;:13;:::i;:::-;4497:30;;4292:13;4497:30;:::i;:::-;9954:31;;9974:8;;;9954:31;4514:13;4451:2;4514;:13;:::i;:::-;4497:30;;4292:13;4497:30;:::i;11284:306::-;-1:-1:-1;;;;;11405:19:0;;11384:4;11405:19;;;:11;:19;;;;;;;;11425:10;11405:31;;;;;;;;-1:-1:-1;;11405:52:0;11401:126;;-1:-1:-1;;;;;11474:19:0;;;;;;:11;:19;;;;;;;;11494:10;11474:31;;;;;;;:41;;11509:6;;11474:19;:41;;11509:6;;11474:41;:::i;:::-;;;;-1:-1:-1;;11401:126:0;11546:36;11556:6;11564:9;11575:6;11546:9;:36::i;:::-;11539:43;11284:306;-1:-1:-1;;;;11284:306:0:o;21389:408::-;21514:7;:14;21495:8;:15;:33;21487:67;;;;-1:-1:-1;;;21487:67:0;;11345:2:1;21487:67:0;;;11327:21:1;11384:2;11364:18;;;11357:30;-1:-1:-1;;;11403:18:1;;;11396:51;11464:18;;21487:67:0;;;;;;;;;21570:7;21565:225;21587:8;:15;21583:1;:19;;;21565:225;;;21657:7;21665:1;21657:10;;;;;;;;;;:::i;:::-;;;;;;;21632:21;21642:10;21632:9;:21::i;:::-;:35;;21624:44;;;;;;21683:95;21701:10;21713:8;21722:1;21713:11;;;;;;;;;;:::i;:::-;;;;;;;4451:2;21737;:13;;;;:::i;:::-;21726:7;21734:1;21726:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;21752:5;21759;21766;21773:4;21683:17;:95::i;:::-;-1:-1:-1;21604:3:0;;;;:::i;:::-;;;;21565:225;;;;21389:408;;:::o;14284:113::-;6677:6;;-1:-1:-1;;;;;6677:6:0;6687:10;6677:20;6669:50;;;;-1:-1:-1;;;6669:50:0;;;;;;;:::i;:::-;14354:14:::1;:25:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;14354:25:0;;::::1;::::0;;;::::1;::::0;;14284:113::o;12567:397::-;6677:6;;-1:-1:-1;;;;;6677:6:0;6687:10;6677:20;6669:50;;;;-1:-1:-1;;;6669:50:0;;;;;;;:::i;:::-;5060:4:::1;12674:6;:21;;;;:65;;;;;5110:4;12716:7;:23;;;;12674:65;:117;;;;;5164:4;12760:11;:31;;;;12674:117;12666:170;;;::::0;-1:-1:-1;;;12666:170:0;;12353:2:1;12666:170:0::1;::::0;::::1;12335:21:1::0;12392:2;12372:18;;;12365:30;12431:25;12411:18;;;12404:53;12474:18;;12666:170:0::1;12151:347:1::0;12666:170:0::1;12847:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;12883:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;12921:35:0::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;12567:397::o;14948:338::-;6677:6;;-1:-1:-1;;;;;6677:6:0;6687:10;6677:20;6669:50;;;;-1:-1:-1;;;6669:50:0;;;;;;;:::i;:::-;15162:16;15142;4514:13:::1;4451:2;4514;:13;:::i;:::-;4497:30;::::0;4292:13:::1;4497:30;:::i;:::-;15132:26;;;;:::i;:::-;15131:47;;;;:::i;:::-;15115:13;:63:::0;15230:13;15213;4514::::1;4451:2;4514;:13;:::i;:::-;4497:30;::::0;4292:13:::1;4497:30;:::i;:::-;15203:23;;;;:::i;:::-;15202:41;;;;:::i;:::-;15189:10;:54:::0;15254:17:::1;:24:::0;-1:-1:-1;;;;14948:338:0:o;13220:140::-;6677:6;;-1:-1:-1;;;;;6677:6:0;6687:10;6677:20;6669:50;;;;-1:-1:-1;;;6669:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13312:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;13312:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13220:140::o;8746:588::-;6677:6;;-1:-1:-1;;;;;6677:6:0;6687:10;6677:20;6669:50;;;;-1:-1:-1;;;6669:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8825:22:0;::::1;8817:96;;;;-1:-1:-1::0;;;8817:96:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8932:16:0;::::1;5317:42;8932:16;;8924:90;;;;-1:-1:-1::0;;;8924:90:0::1;;;;;;;:::i;:::-;9045:6;::::0;;9025:34:::1;::::0;-1:-1:-1;;;;;9045:6:0;;::::1;::::0;9025:19:::1;:34::i;:::-;9070:35;9090:8;9100:4;9070:19;:35::i;:::-;9149:1;9139:6:::0;;9129:17:::1;::::0;-1:-1:-1;;;;;9139:6:0::1;9129:9;:17::i;:::-;:21;9126:99;;;9177:6;::::0;9167:46:::1;::::0;-1:-1:-1;;;;;9177:6:0::1;9185:8:::0;9195:17:::1;9177:6:::0;9195:9:::1;:17::i;:::-;9167:9;:46::i;:::-;;9126:99;9245:6;:17:::0;;-1:-1:-1;;;;;;9245:17:0::1;-1:-1:-1::0;;;;;9245:17:0;::::1;::::0;;::::1;::::0;;9278:38:::1;::::0;9245:17;;;;9278:38:::1;::::0;9245:6;9278:38:::1;8746:588:::0;:::o;13639:134::-;6677:6;;-1:-1:-1;;;;;6677:6:0;6687:10;6677:20;6669:50;;;;-1:-1:-1;;;6669:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13727:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;13727:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13639:134::o;13781:106::-;13822:7;13865:13;4451:2;13865;:13;:::i;:::-;13849:12;;:30;;;;:::i;10497:117::-;-1:-1:-1;;;;;10590:16:0;10563:7;10590:16;;;:7;:16;;;;;;;10497:117::o;9342:193::-;6677:6;;-1:-1:-1;;;;;6677:6:0;6687:10;6677:20;6669:50;;;;-1:-1:-1;;;6669:50:0;;;;;;;:::i;:::-;9427:6:::1;::::0;;9407:34:::1;::::0;-1:-1:-1;;;;;9427:6:0;;::::1;::::0;9407:19:::1;:34::i;:::-;9469:1;9452:19:::0;;-1:-1:-1;;;;;;9452:19:0::1;::::0;;9487:40:::1;::::0;9469:1;;9487:40:::1;::::0;9469:1;;9487:40:::1;9342:193::o:0;12146:407::-;6677:6;;-1:-1:-1;;;;;6677:6:0;6687:10;6677:20;6669:50;;;;-1:-1:-1;;;6669:50:0;;;;;;;:::i;:::-;12227:16;12223:323:::1;;-1:-1:-1::0;;;;;;12260:13:0::1;12276:5;12260:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;12260:21:0::1;::::0;;12146:407::o;12223:323::-:1;12318:17;::::0;:22;12314:136:::1;;12407:6;12387:17;;12369:15;:35;;;;:::i;:::-;:44;12361:73;;;::::0;-1:-1:-1;;;12361:73:0;;13135:2:1;12361:73:0::1;::::0;::::1;13117:21:1::0;13174:2;13154:18;;;13147:30;-1:-1:-1;;;13193:18:1;;;13186:46;13249:18;;12361:73:0::1;12933:340:1::0;12361:73:0::1;-1:-1:-1::0;;;;;12464:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;12464:20:0::1;12480:4;12464:20;::::0;;12519:15:::1;12499:17;:35:::0;12223:323:::1;12146:407:::0;;:::o;20743:332::-;6677:6;;-1:-1:-1;;;;;6677:6:0;6687:10;6677:20;6669:50;;;;-1:-1:-1;;;6669:50:0;;;;;;;:::i;:::-;20805:14:::1;::::0;::::1;;20804:15;20796:52;;;::::0;-1:-1:-1;;;20796:52:0;;13480:2:1;20796:52:0::1;::::0;::::1;13462:21:1::0;13519:2;13499:18;;;13492:30;13558:26;13538:18;;;13531:54;13602:18;;20796:52:0::1;13278:348:1::0;20796:52:0::1;20867:16;::::0;::::1;::::0;::::1;;;20859:53;;;::::0;-1:-1:-1;;;20859:53:0;;13833:2:1;20859:53:0::1;::::0;::::1;13815:21:1::0;13872:2;13852:18;;;13845:30;13911:26;13891:18;;;13884:54;13955:18;;20859:53:0::1;13631:348:1::0;20859:53:0::1;20933:14;:21:::0;;-1:-1:-1;;20933:21:0::1;20950:4;20933:21;::::0;;20992:6:::1;::::0;21007:5:::1;::::0;20982:17:::1;::::0;-1:-1:-1;;;;;20992:6:0::1;20982:9;:17::i;:::-;:21;::::0;21002:1:::1;20982:21;:::i;:::-;20981:31;;;;:::i;:::-;20965:13;:47:::0;21047:6:::1;::::0;21062:5:::1;::::0;21037:17:::1;::::0;-1:-1:-1;;;;;21047:6:0::1;21037:9;:17::i;:::-;:21;::::0;21057:1:::1;21037:21;:::i;:::-;21036:31;;;;:::i;:::-;21023:10;:44:::0;20743:332::o;21206:175::-;21307:10;6677:6;;-1:-1:-1;;;;;6677:6:0;6687:10;6677:20;6669:50;;;;-1:-1:-1;;;6669:50:0;;;;;;;:::i;:::-;21337:36:::1;::::0;-1:-1:-1;;;21337:36:0;;-1:-1:-1;;;;;14176:32:1;;;21337:36:0::1;::::0;::::1;14158:51:1::0;14225:18;;;14218:34;;;21337:23:0;::::1;::::0;::::1;::::0;14131:18:1;;21337:36:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10622:165::-:0;10700:4;10717:40;10727:10;10739:9;10750:6;10717:9;:40::i;:::-;-1:-1:-1;10775:4:0;;10622:165;-1:-1:-1;;;10622:165:0:o;12976:230::-;6677:6;;-1:-1:-1;;;;;6677:6:0;6687:10;6677:20;6669:50;;;;-1:-1:-1;;;6669:50:0;;;;;;;:::i;:::-;13076:7:::1;:23:::0;;::::1;13140:19:::0;;::::1;::::0;::::1;-1:-1:-1::0;;13110:19:0;;::::1;::::0;::::1;-1:-1:-1::0;;13110:19:0;;;13076:23;;::::1;13110:19:::0;;;;;;;::::1;13140;;::::0;;13187:11:::1;13155:4:::0;13125;13187:11:::1;:::i;:::-;13170:7;:28:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;13170:28:0::1;-1:-1:-1::0;;13170:28:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;12976:230:0:o;14405:197::-;6677:6;;-1:-1:-1;;;;;6677:6:0;6687:10;6677:20;6669:50;;;;-1:-1:-1;;;6669:50:0;;;;;;;:::i;:::-;14523:33:::1;:71:::0;14405:197::o;15468:164::-;6677:6;;-1:-1:-1;;;;;6677:6:0;6687:10;6677:20;6669:50;;;;-1:-1:-1;;;6669:50:0;;;;;;;:::i;:::-;15544:19:::1;:29:::0;;;::::1;;;;-1:-1:-1::0;;15544:29:0;;::::1;;::::0;;15589:35:::1;::::0;::::1;::::0;::::1;::::0;15566:7;2222:14:1;2215:22;2197:41;;2185:2;2170:18;;2057:187;15589:35:0::1;;;;;;;;15468:164:::0;:::o;15294:166::-;6677:6;;-1:-1:-1;;;;;6677:6:0;6687:10;6677:20;6669:50;;;;-1:-1:-1;;;6669:50:0;;;;;;;:::i;:::-;15382:11:::1;:27:::0;;-1:-1:-1;;;;;15382:27:0;;::::1;-1:-1:-1::0;;;;;;15382:27:0;;::::1;;::::0;;;15420:16;:32;;;;;::::1;::::0;::::1;;::::0;;15294:166::o;11598:540::-;6677:6;;-1:-1:-1;;;;;6677:6:0;6687:10;6677:20;6669:50;;;;-1:-1:-1;;;6669:50:0;;;;;;;:::i;:::-;11667:20:::1;11700:9;11667:43;;11721:16;11751:10;-1:-1:-1::0;;;;;11751:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11740:40:0::1;;11789:4;11796:10;-1:-1:-1::0;;;;;11796:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11740:74;::::0;-1:-1:-1;;;;;;11740:74:0::1;::::0;;;;;;-1:-1:-1;;;;;9024:15:1;;;11740:74:0::1;::::0;::::1;9006:34:1::0;9076:15;;9056:18;;;9049:43;8941:18;;11740:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11721:93:::0;-1:-1:-1;;;;;;11829:22:0;::::1;11825:200;;11888:10;-1:-1:-1::0;;;;;11888:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11877:43:0::1;;11929:4;11936:10;-1:-1:-1::0;;;;;11936:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11877:77;::::0;-1:-1:-1;;;;;;11877:77:0::1;::::0;;;;;;-1:-1:-1;;;;;9024:15:1;;;11877:77:0::1;::::0;::::1;9006:34:1::0;9076:15;;9056:18;;;9049:43;8941:18;;11877:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11868:6;:86:::0;;-1:-1:-1;;;;;;11868:86:0::1;-1:-1:-1::0;;;;;11868:86:0;;;::::1;::::0;;;::::1;::::0;;11825:200:::1;;;11996:6;:17:::0;;-1:-1:-1;;;;;;11996:17:0::1;-1:-1:-1::0;;;;;11996:17:0;::::1;;::::0;;11825:200:::1;12035:9;:22:::0;;-1:-1:-1;;;;;;12035:22:0::1;-1:-1:-1::0;;;;;12035:22:0;::::1;::::0;;::::1;::::0;;;12068:62:::1;::::0;12085:4:::1;::::0;-1:-1:-1;;12068:8:0::1;:62::i;21083:113::-:0;6677:6;;-1:-1:-1;;;;;6677:6:0;6687:10;6677:20;6669:50;;;;-1:-1:-1;;;6669:50:0;;;;;;;:::i;:::-;21149:6:::1;::::0;;21141:47:::1;::::0;-1:-1:-1;;;;;21149:6:0;;::::1;::::0;21166:21:::1;21141:47:::0;::::1;;;::::0;21166:21;;21141:47;21149:6;21141:47;21166:21;21149:6;21141:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21083:113::o:0;10962:310::-;-1:-1:-1;;;;;11057:20:0;;11049:52;;;;-1:-1:-1;;;11049:52:0;;15509:2:1;11049:52:0;;;15491:21:1;15548:2;15528:18;;;15521:30;-1:-1:-1;;;15567:18:1;;;15560:49;15626:18;;11049:52:0;15307:343:1;11049:52:0;-1:-1:-1;;;;;11120:21:0;;11112:53;;;;-1:-1:-1;;;11112:53:0;;15509:2:1;11112:53:0;;;15491:21:1;15548:2;15528:18;;;15521:30;-1:-1:-1;;;15567:18:1;;;15560:49;15626:18;;11112:53:0;15307:343:1;11112:53:0;-1:-1:-1;;;;;11178:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;11231:33;;368:25:1;;;11231:33:0;;341:18:1;11231:33:0;;;;;;;10962:310;;;:::o;16006:2742::-;16085:4;-1:-1:-1;;;;;16110:18:0;;16102:68;;;;-1:-1:-1;;;16102:68:0;;15857:2:1;16102:68:0;;;15839:21:1;15896:2;15876:18;;;15869:30;15935:34;15915:18;;;15908:62;-1:-1:-1;;;15986:18:1;;;15979:35;16031:19;;16102:68:0;15655:401:1;16102:68:0;-1:-1:-1;;;;;16189:16:0;;16181:64;;;;-1:-1:-1;;;16181:64:0;;16263:2:1;16181:64:0;;;16245:21:1;16302:2;16282:18;;;16275:30;16341:34;16321:18;;;16314:62;-1:-1:-1;;;16392:18:1;;;16385:33;16435:19;;16181:64:0;16061:399:1;16181:64:0;16273:1;16264:6;:10;16256:64;;;;-1:-1:-1;;;16256:64:0;;16667:2:1;16256:64:0;;;16649:21:1;16706:2;16686:18;;;16679:30;16745:34;16725:18;;;16718:62;-1:-1:-1;;;16796:18:1;;;16789:39;16845:19;;16256:64:0;16465:405:1;16256:64:0;-1:-1:-1;;;;;16419:13:0;;16331:8;16419:13;;;:7;:13;;;;;;16331:8;;;;16419:13;;16415:162;;;16455:4;16449:10;;16415:162;;;-1:-1:-1;;;;;16481:11:0;;;;;;:7;:11;;;;;;;;16477:100;;;16516:4;16509:11;;16477:100;;;-1:-1:-1;16561:4:0;16477:100;16590:20;16601:4;16607:2;16590:10;:20::i;:::-;16587:641;;;16631:14;;;;16627:89;;16666:34;;-1:-1:-1;;;16666:34:0;;17077:2:1;16666:34:0;;;17059:21:1;17116:2;17096:18;;;17089:30;17155:26;17135:18;;;17128:54;17199:18;;16666:34:0;16875:348:1;16627:89:0;16733:3;:11;;;;16740:4;16733:11;16730:231;;;-1:-1:-1;;;;;16769:27:0;;;;;;:21;:27;;;;;;;;16768:28;:58;;;;-1:-1:-1;;;;;;16801:25:0;;;;;;:21;:25;;;;;;;;16800:26;16768:58;16764:182;;;16869:12;;16859:6;:22;;16851:75;;;;-1:-1:-1;;;16851:75:0;;17430:2:1;16851:75:0;;;17412:21:1;17469:2;17449:18;;;17442:30;17508:34;17488:18;;;17481:62;-1:-1:-1;;;17559:18:1;;;17552:38;17607:19;;16851:75:0;17228:404:1;16851:75:0;16992:9;;-1:-1:-1;;;;;16978:24:0;;;16992:9;;16978:24;;;;:33;;;17007:4;17006:5;16978:33;16975:242;;;-1:-1:-1;;;;;17037:25:0;;;;;;:21;:25;;;;;;;;17032:170;;17121:14;;17111:6;17095:13;17105:2;17095:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;17087:95;;;;-1:-1:-1;;;17087:95:0;;17972:2:1;17087:95:0;;;17954:21:1;18011:2;17991:18;;;17984:30;18050:34;18030:18;;;18023:62;-1:-1:-1;;;18101:18:1;;;18094:40;18151:19;;17087:95:0;17770:406:1;17087:95:0;-1:-1:-1;;;;;17273:25:0;;17240:12;17273:25;;;:19;:25;;;;;;17255:4;;17273:25;;;:52;;-1:-1:-1;;;;;;17302:23:0;;;;;;:19;:23;;;;;;;;17273:52;17270:98;;;-1:-1:-1;17351:5:0;17270:98;17384:4;17380:1271;;;17420:6;;;;17419:7;:47;;;;-1:-1:-1;17447:19:0;;;;;;;17419:47;17415:539;;;17536:15;17516:17;;17505:8;;:28;;;;:::i;:::-;:46;17501:436;;;17576:28;17607:24;17625:4;17607:9;:24::i;:::-;17576:55;;17682:13;;17658:20;:37;17654:264;;17751:10;;17727:20;:34;17724:77;;-1:-1:-1;17788:10:0;;17724:77;17827:14;:12;:14::i;:::-;17879:15;17868:8;:26;17654:264;17553:384;17501:436;18040:14;;18000:21;;18040:14;;;;;:37;;;;-1:-1:-1;18058:19:0;;;;;;;18040:37;18036:525;;;18131:25;18149:6;18131:17;:25::i;:::-;18106:21;;:50;;;;;;;:::i;:::-;;;;;;;;18183:21;18241:33;;18232:4;18207:21;;:30;;;;:::i;:::-;:68;;;;:::i;:::-;18183:92;;18321:7;18305:13;:23;18302:236;;;18360:28;18374:13;18360;:28::i;:::-;18302:236;;;18509:1;18485:21;:25;18302:236;18079:482;18036:525;17400:1251;17380:1271;18668:62;18686:4;18692:2;18696:6;18704:7;18713:3;18718:4;18724:5;18668:17;:62::i;:::-;18661:69;16006:2742;-1:-1:-1;;;;;;;;16006:2742:0:o;21805:632::-;21961:16;;21939:4;;21961:16;;;;;21956:221;;21994:28;22013:4;22019:2;21994:18;:28::i;:::-;22042:16;;;;;;;22041:17;:41;;;;;22062:20;22073:4;22079:2;22062:10;:20::i;:::-;22037:129;;;22103:47;;-1:-1:-1;;;22103:47:0;;18383:2:1;22103:47:0;;;18365:21:1;18422:2;18402:18;;;18395:30;18461:34;18441:18;;;18434:62;-1:-1:-1;;;18512:18:1;;;18505:35;18557:19;;22103:47:0;18181:401:1;22037:129:0;-1:-1:-1;;;;;22201:13:0;;;;;;:7;:13;;;;;:23;;22218:6;;22201:13;:23;;22218:6;;22201:23;:::i;:::-;;;;-1:-1:-1;22235:22:0;;-1:-1:-1;22261:7:0;22260:55;;22309:6;22260:55;;;22272:34;22282:4;22288:3;22293:4;22299:6;22272:9;:34::i;:::-;-1:-1:-1;;;;;22326:11:0;;;;;;:7;:11;;;;;:29;;22235:80;;-1:-1:-1;22235:80:0;;22326:11;;;:29;;22235:80;;22326:29;:::i;:::-;;;;;;;;22388:2;-1:-1:-1;;;;;22373:34:0;22382:4;-1:-1:-1;;;;;22373:34:0;;22392:14;22373:34;;;;368:25:1;;356:2;341:18;;222:177;22373:34:0;;;;;;;;-1:-1:-1;22425:4:0;;21805:632;-1:-1:-1;;;;;;;;21805:632:0:o;15640:358::-;15709:4;15741:6;;-1:-1:-1;;;;;15733:14:0;;;15741:6;;15733:14;;;;:43;;-1:-1:-1;15770:6:0;;-1:-1:-1;;;;;15764:12:0;;;15770:6;;15764:12;;15733:43;:79;;;;-1:-1:-1;15806:6:0;;-1:-1:-1;;;;;15806:6:0;15793:9;:19;;15733:79;:118;;;;-1:-1:-1;;;;;;15830:21:0;;;;;;:17;:21;;;;;;;;15829:22;15733:118;:159;;;;-1:-1:-1;;;;;;15869:23:0;;;;;;:17;:23;;;;;;;;15868:24;15733:159;:186;;;;-1:-1:-1;;;;;;15909:10:0;;5317:42;15909:10;;15733:186;:219;;;;-1:-1:-1;;;;;;15936:16:0;;;;15733:219;:257;;;;-1:-1:-1;;;;;;15969:21:0;;15985:4;15969:21;;15733:257;15726:264;15640:358;-1:-1:-1;;;15640:358:0:o;18756:854::-;6571:6;:13;;-1:-1:-1;;6571:13:0;6580:4;6571:13;;;18835:10:::1;::::0;18880:16:::1;::::0;;18894:1:::1;18880:16:::0;;;;;::::1;::::0;;-1:-1:-1;;18880:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;18880:16:0::1;18856:40;;18925:4;18907;18912:1;18907:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18907:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;18951:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;18951:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;18907:7;;18951:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18941:4;18946:1;18941:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18941:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;19038:9:::1;::::0;:193:::1;::::0;-1:-1:-1;;;19038:193:0;;19004:21:::1;::::0;19038:9;;;::::1;::::0;:60:::1;::::0;:193:::1;::::0;19113:12;;18980:21:::1;::::0;19156:4;;19183::::1;::::0;19203:15:::1;::::0;19038:193:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19242:17;19287:13;19262:21;:39;;;;:::i;:::-;19371:7;:13:::0;19242:59;;-1:-1:-1;19312:26:0::1;::::0;19371:13:::1;-1:-1:-1::0;;;19371:13:0;::::1;::::0;::::1;::::0;19341:26:::1;::::0;19354:12;;;::::1;;19242:59:::0;19341:26:::1;:::i;:::-;:44;;;;:::i;:::-;19465:16:::0;;19457:73:::1;::::0;19312;;-1:-1:-1;19407:21:0::1;::::0;-1:-1:-1;;;;;19465:16:0;;::::1;::::0;19520:5:::1;::::0;19312:73;;19407:21;19457:73;19407:21;19457:73;19312;19465:16;19520:5;19457:73:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19406:124;;;19549:16;19541:59;;;::::0;-1:-1:-1;;;19541:59:0;;20052:2:1;19541:59:0::1;::::0;::::1;20034:21:1::0;20091:2;20071:18;;;20064:30;20130:32;20110:18;;;20103:60;20180:18;;19541:59:0::1;19850:354:1::0;19541:59:0::1;-1:-1:-1::0;;6607:6:0;:14;;-1:-1:-1;;6607:14:0;;;-1:-1:-1;;;;18756:854:0:o;14611:329::-;14724:16;;;14738:1;14724:16;;;;;;;;14680:7;;;;14724:16;14738:1;14724:16;;;;;;;;;;-1:-1:-1;14724:16:0;14700:40;;14771:4;14753;14758:1;14753:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14753:23:0;;;:7;;;;;;;;;;:23;;;;14797:9;;:16;;;-1:-1:-1;;;14797:16:0;;;;:9;;;;;:14;;:16;;;;;14753:7;;14797:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14787:4;14792:1;14787:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14787:26:0;;;:7;;;;;;;;;:26;14850:9;;:42;;-1:-1:-1;;;14850:42:0;;14826:21;;14850:9;;;;;:23;;:42;;14874:11;;14887:4;;14850:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14850:42:0;;;;;;;;;;;;:::i;:::-;14826:66;;14912:7;14920:1;14912:10;;;;;;;;:::i;:::-;;;;;;;14905:17;;;;14611:329;;;:::o;19620:135::-;6571:6;:13;;-1:-1:-1;;6571:13:0;6580:4;6571:13;;;19691:10;;19687:61:::1;;19715:24;19732:6;19715:16;:24::i;:::-;-1:-1:-1::0;6607:6:0;:14;;-1:-1:-1;;6607:14:0;;;19620:135::o;20347:388::-;20430:16;;;;;;;20429:17;20421:65;;;;-1:-1:-1;;;20421:65:0;;21634:2:1;20421:65:0;;;21616:21:1;21673:2;21653:18;;;21646:30;21712:34;21692:18;;;21685:62;-1:-1:-1;;;21763:18:1;;;21756:33;21806:19;;20421:65:0;21432:399:1;20421:65:0;20502:20;20513:4;20519:2;20502:10;:20::i;:::-;20501:21;:37;;;;-1:-1:-1;20532:6:0;;-1:-1:-1;;;;;20526:12:0;;;20532:6;;20526:12;20501:37;20497:231;;;-1:-1:-1;;;;;20555:23:0;;;;;;:17;:23;;;;;;;;;:30;;20581:4;-1:-1:-1;;20555:30:0;;;;;;;;20600:16;:23;;20555:30;-1:-1:-1;;20600:23:0;;;;;;;;20638:19;:26;;;;;;;;;;20684:32;;2197:41:1;;;20684:32:0;;2170:18:1;20684:32:0;;;;;;;;20347:388;;:::o;22445:902::-;22533:7;22553:18;22586:3;22582:205;;;-1:-1:-1;22619:9:0;:16;;;22582:205;;;22657:4;22653:134;;;-1:-1:-1;22691:9:0;:17;;;;;;22653:134;;;-1:-1:-1;22754:9:0;:21;;;;;;22653:134;22799:17;5211:5;22819:19;22828:10;22819:6;:19;:::i;:::-;:38;;;;:::i;:::-;22922:7;:13;22799:58;;-1:-1:-1;22868:19:0;;22922:13;-1:-1:-1;;;22922:13:0;;;;;22891:26;;22903:14;22799:58;22891:26;:::i;:::-;22890:46;;;;:::i;:::-;22868:68;-1:-1:-1;22951:15:0;;22947:237;;22983:24;22996:11;22983:24;;:::i;:::-;23044:11;:18;-1:-1:-1;;;;;23044:18:0;23022:19;23077:20;;;23044:18;23077:20;;;;;:35;;22983:24;;-1:-1:-1;23044:18:0;;23101:11;;23077:20;23022:19;23077:35;;23101:11;;23077:35;:::i;:::-;;;;;;;;23147:11;-1:-1:-1;;;;;23132:40:0;23141:4;-1:-1:-1;;;;;23132:40:0;;23160:11;23132:40;;;;368:25:1;;356:2;341:18;;222:177;23132:40:0;;;;;;;;22968:216;22947:237;23210:4;23194:22;;;;:7;:22;;;;;:35;;23220:9;;23194:22;:35;;23220:9;;23194:35;:::i;:::-;;;;-1:-1:-1;;23245:40:0;;368:25:1;;;23268:4:0;;-1:-1:-1;;;;;23245:40:0;;;;;356:2:1;341:18;23245:40:0;;;;;;;23315:23;23327:11;23315:9;:23;:::i;:::-;23305:34;;:6;:34;:::i;19792:543::-;19937:16;;;19951:1;19937:16;;;;;;;;19913:21;;19937:16;;;;;;;;-1:-1:-1;;19974:9:0;;:16;;;-1:-1:-1;;;19974:16:0;;;;19913:40;;-1:-1:-1;;;;;;19974:9:0;;;;:14;;-1:-1:-1;19974:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19964:4;19969:1;19964:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;19964:26:0;;;-1:-1:-1;;;;;19964:26:0;;;;;20019:4;20001;20006:1;20001:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20001:23:0;;;:7;;;;;;;;;:23;20061:9;;:218;;-1:-1:-1;;;20061:218:0;;:9;;;:60;;20129:6;;20061:218;;:9;;20198:4;;5317:42;;20252:15;;20061:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20297:30;20314:6;20322:4;20297:30;;;;;;;:::i;774:597:1:-;886:4;915:2;944;933:9;926:21;976:6;970:13;1019:6;1014:2;1003:9;999:18;992:34;1044:1;1054:140;1068:6;1065:1;1062:13;1054:140;;;1163:14;;;1159:23;;1153:30;1129:17;;;1148:2;1125:26;1118:66;1083:10;;1054:140;;;1212:6;1209:1;1206:13;1203:91;;;1282:1;1277:2;1268:6;1257:9;1253:22;1249:31;1242:42;1203:91;-1:-1:-1;1355:2:1;1334:15;-1:-1:-1;;1330:29:1;1315:45;;;;1362:2;1311:54;;774:597;-1:-1:-1;;;774:597:1:o;1601:131::-;-1:-1:-1;;;;;1676:31:1;;1666:42;;1656:70;;1722:1;1719;1712:12;1737:315;1805:6;1813;1866:2;1854:9;1845:7;1841:23;1837:32;1834:52;;;1882:1;1879;1872:12;1834:52;1921:9;1908:23;1940:31;1965:5;1940:31;:::i;:::-;1990:5;2042:2;2027:18;;;;2014:32;;-1:-1:-1;;;1737:315:1:o;2249:456::-;2326:6;2334;2342;2395:2;2383:9;2374:7;2370:23;2366:32;2363:52;;;2411:1;2408;2401:12;2363:52;2450:9;2437:23;2469:31;2494:5;2469:31;:::i;:::-;2519:5;-1:-1:-1;2576:2:1;2561:18;;2548:32;2589:33;2548:32;2589:33;:::i;:::-;2249:456;;2641:7;;-1:-1:-1;;;2695:2:1;2680:18;;;;2667:32;;2249:456::o;2710:127::-;2771:10;2766:3;2762:20;2759:1;2752:31;2802:4;2799:1;2792:15;2826:4;2823:1;2816:15;2842:275;2913:2;2907:9;2978:2;2959:13;;-1:-1:-1;;2955:27:1;2943:40;;3013:18;2998:34;;3034:22;;;2995:62;2992:88;;;3060:18;;:::i;:::-;3096:2;3089:22;2842:275;;-1:-1:-1;2842:275:1:o;3122:183::-;3182:4;3215:18;3207:6;3204:30;3201:56;;;3237:18;;:::i;:::-;-1:-1:-1;3282:1:1;3278:14;3294:4;3274:25;;3122:183::o;3310:662::-;3364:5;3417:3;3410:4;3402:6;3398:17;3394:27;3384:55;;3435:1;3432;3425:12;3384:55;3471:6;3458:20;3497:4;3521:60;3537:43;3577:2;3537:43;:::i;:::-;3521:60;:::i;:::-;3615:15;;;3701:1;3697:10;;;;3685:23;;3681:32;;;3646:12;;;;3725:15;;;3722:35;;;3753:1;3750;3743:12;3722:35;3789:2;3781:6;3777:15;3801:142;3817:6;3812:3;3809:15;3801:142;;;3883:17;;3871:30;;3921:12;;;;3834;;3801:142;;;-1:-1:-1;3961:5:1;3310:662;-1:-1:-1;;;;;;3310:662:1:o;3977:1215::-;4095:6;4103;4156:2;4144:9;4135:7;4131:23;4127:32;4124:52;;;4172:1;4169;4162:12;4124:52;4212:9;4199:23;4241:18;4282:2;4274:6;4271:14;4268:34;;;4298:1;4295;4288:12;4268:34;4336:6;4325:9;4321:22;4311:32;;4381:7;4374:4;4370:2;4366:13;4362:27;4352:55;;4403:1;4400;4393:12;4352:55;4439:2;4426:16;4461:4;4485:60;4501:43;4541:2;4501:43;:::i;4485:60::-;4579:15;;;4661:1;4657:10;;;;4649:19;;4645:28;;;4610:12;;;;4685:19;;;4682:39;;;4717:1;4714;4707:12;4682:39;4741:11;;;;4761:217;4777:6;4772:3;4769:15;4761:217;;;4857:3;4844:17;4874:31;4899:5;4874:31;:::i;:::-;4918:18;;4794:12;;;;4956;;;;4761:217;;;4997:5;-1:-1:-1;;5040:18:1;;5027:32;;-1:-1:-1;;5071:16:1;;;5068:36;;;5100:1;5097;5090:12;5068:36;;5123:63;5178:7;5167:8;5156:9;5152:24;5123:63;:::i;:::-;5113:73;;;3977:1215;;;;;:::o;5197:118::-;5283:5;5276:13;5269:21;5262:5;5259:32;5249:60;;5305:1;5302;5295:12;5320:241;5376:6;5429:2;5417:9;5408:7;5404:23;5400:32;5397:52;;;5445:1;5442;5435:12;5397:52;5484:9;5471:23;5503:28;5525:5;5503:28;:::i;5755:159::-;5822:20;;5882:6;5871:18;;5861:29;;5851:57;;5904:1;5901;5894:12;5851:57;5755:159;;;:::o;5919:328::-;5993:6;6001;6009;6062:2;6050:9;6041:7;6037:23;6033:32;6030:52;;;6078:1;6075;6068:12;6030:52;6101:28;6119:9;6101:28;:::i;:::-;6091:38;;6148:37;6181:2;6170:9;6166:18;6148:37;:::i;:::-;6138:47;;6204:37;6237:2;6226:9;6222:18;6204:37;:::i;:::-;6194:47;;5919:328;;;;;:::o;6252:454::-;6347:6;6355;6363;6371;6379;6432:3;6420:9;6411:7;6407:23;6403:33;6400:53;;;6449:1;6446;6439:12;6400:53;-1:-1:-1;;6472:23:1;;;6542:2;6527:18;;6514:32;;-1:-1:-1;6593:2:1;6578:18;;6565:32;;6644:2;6629:18;;6616:32;;-1:-1:-1;6695:3:1;6680:19;6667:33;;-1:-1:-1;6252:454:1;-1:-1:-1;6252:454:1:o;6711:382::-;6776:6;6784;6837:2;6825:9;6816:7;6812:23;6808:32;6805:52;;;6853:1;6850;6843:12;6805:52;6892:9;6879:23;6911:31;6936:5;6911:31;:::i;:::-;6961:5;-1:-1:-1;7018:2:1;7003:18;;6990:32;7031:30;6990:32;7031:30;:::i;:::-;7080:7;7070:17;;;6711:382;;;;;:::o;7098:247::-;7157:6;7210:2;7198:9;7189:7;7185:23;7181:32;7178:52;;;7226:1;7223;7216:12;7178:52;7265:9;7252:23;7284:31;7309:5;7284:31;:::i;7350:180::-;7409:6;7462:2;7450:9;7441:7;7437:23;7433:32;7430:52;;;7478:1;7475;7468:12;7430:52;-1:-1:-1;7501:23:1;;7350:180;-1:-1:-1;7350:180:1:o;7984:396::-;8060:6;8068;8121:2;8109:9;8100:7;8096:23;8092:32;8089:52;;;8137:1;8134;8127:12;8089:52;8176:9;8163:23;8195:31;8220:5;8195:31;:::i;:::-;8245:5;-1:-1:-1;8302:2:1;8287:18;;8274:32;8315:33;8274:32;8315:33;:::i;9103:127::-;9164:10;9159:3;9155:20;9152:1;9145:31;9195:4;9192:1;9185:15;9219:4;9216:1;9209:15;9235:422;9324:1;9367:5;9324:1;9381:270;9402:7;9392:8;9389:21;9381:270;;;9461:4;9457:1;9453:6;9449:17;9443:4;9440:27;9437:53;;;9470:18;;:::i;:::-;9520:7;9510:8;9506:22;9503:55;;;9540:16;;;;9503:55;9619:22;;;;9579:15;;;;9381:270;;;9385:3;9235:422;;;;;:::o;9662:806::-;9711:5;9741:8;9731:80;;-1:-1:-1;9782:1:1;9796:5;;9731:80;9830:4;9820:76;;-1:-1:-1;9867:1:1;9881:5;;9820:76;9912:4;9930:1;9925:59;;;;9998:1;9993:130;;;;9905:218;;9925:59;9955:1;9946:10;;9969:5;;;9993:130;10030:3;10020:8;10017:17;10014:43;;;10037:18;;:::i;:::-;-1:-1:-1;;10093:1:1;10079:16;;10108:5;;9905:218;;10207:2;10197:8;10194:16;10188:3;10182:4;10179:13;10175:36;10169:2;10159:8;10156:16;10151:2;10145:4;10142:12;10138:35;10135:77;10132:159;;;-1:-1:-1;10244:19:1;;;10276:5;;10132:159;10323:34;10348:8;10342:4;10323:34;:::i;:::-;10393:6;10389:1;10385:6;10381:19;10372:7;10369:32;10366:58;;;10404:18;;:::i;:::-;10442:20;;9662:806;-1:-1:-1;;;9662:806:1:o;10473:140::-;10531:5;10560:47;10601:4;10591:8;10587:19;10581:4;10560:47;:::i;10618:217::-;10658:1;10684;10674:132;;10728:10;10723:3;10719:20;10716:1;10709:31;10763:4;10760:1;10753:15;10791:4;10788:1;10781:15;10674:132;-1:-1:-1;10820:9:1;;10618:217::o;10840:168::-;10880:7;10946:1;10942;10938:6;10934:14;10931:1;10928:21;10923:1;10916:9;10909:17;10905:45;10902:71;;;10953:18;;:::i;:::-;-1:-1:-1;10993:9:1;;10840:168::o;11013:125::-;11053:4;11081:1;11078;11075:8;11072:34;;;11086:18;;:::i;:::-;-1:-1:-1;11123:9:1;;11013:125::o;11493:127::-;11554:10;11549:3;11545:20;11542:1;11535:31;11585:4;11582:1;11575:15;11609:4;11606:1;11599:15;11625:175;11662:3;11706:4;11699:5;11695:16;11735:4;11726:7;11723:17;11720:43;;;11743:18;;:::i;:::-;11792:1;11779:15;;11625:175;-1:-1:-1;;11625:175:1:o;11805:341::-;12007:2;11989:21;;;12046:2;12026:18;;;12019:30;-1:-1:-1;;;12080:2:1;12065:18;;12058:47;12137:2;12122:18;;11805:341::o;12503:425::-;12705:2;12687:21;;;12744:2;12724:18;;;12717:30;12783:34;12778:2;12763:18;;12756:62;12854:31;12849:2;12834:18;;12827:59;12918:3;12903:19;;12503:425::o;14263:245::-;14330:6;14383:2;14371:9;14362:7;14358:23;14354:32;14351:52;;;14399:1;14396;14389:12;14351:52;14431:9;14425:16;14450:28;14472:5;14450:28;:::i;14513:224::-;14552:3;14580:6;14613:2;14610:1;14606:10;14643:2;14640:1;14636:10;14674:3;14670:2;14666:12;14661:3;14658:21;14655:47;;;14682:18;;:::i;:::-;14718:13;;14513:224;-1:-1:-1;;;;14513:224:1:o;14742:251::-;14812:6;14865:2;14853:9;14844:7;14840:23;14836:32;14833:52;;;14881:1;14878;14871:12;14833:52;14913:9;14907:16;14932:31;14957:5;14932:31;:::i;17637:128::-;17677:3;17708:1;17704:6;17701:1;17698:13;17695:39;;;17714:18;;:::i;:::-;-1:-1:-1;17750:9:1;;17637:128::o;18587:461::-;18640:3;18678:5;18672:12;18705:6;18700:3;18693:19;18731:4;18760:2;18755:3;18751:12;18744:19;;18797:2;18790:5;18786:14;18818:1;18828:195;18842:6;18839:1;18836:13;18828:195;;;18907:13;;-1:-1:-1;;;;;18903:39:1;18891:52;;18963:12;;;;18998:15;;;;18939:1;18857:9;18828:195;;;-1:-1:-1;19039:3:1;;18587:461;-1:-1:-1;;;;;18587:461:1:o;19053:582::-;19352:6;19341:9;19334:25;19395:6;19390:2;19379:9;19375:18;19368:34;19438:3;19433:2;19422:9;19418:18;19411:31;19315:4;19459:57;19511:3;19500:9;19496:19;19488:6;19459:57;:::i;:::-;-1:-1:-1;;;;;19552:32:1;;;;19547:2;19532:18;;19525:60;-1:-1:-1;19616:3:1;19601:19;19594:35;19451:65;19053:582;-1:-1:-1;;;19053:582:1:o;20209:332::-;20416:6;20405:9;20398:25;20459:2;20454;20443:9;20439:18;20432:30;20379:4;20479:56;20531:2;20520:9;20516:18;20508:6;20479:56;:::i;20546:881::-;20641:6;20672:2;20715;20703:9;20694:7;20690:23;20686:32;20683:52;;;20731:1;20728;20721:12;20683:52;20764:9;20758:16;20797:18;20789:6;20786:30;20783:50;;;20829:1;20826;20819:12;20783:50;20852:22;;20905:4;20897:13;;20893:27;-1:-1:-1;20883:55:1;;20934:1;20931;20924:12;20883:55;20963:2;20957:9;20986:60;21002:43;21042:2;21002:43;:::i;20986:60::-;21080:15;;;21162:1;21158:10;;;;21150:19;;21146:28;;;21111:12;;;;21186:19;;;21183:39;;;21218:1;21215;21208:12;21183:39;21242:11;;;;21262:135;21278:6;21273:3;21270:15;21262:135;;;21344:10;;21332:23;;21295:12;;;;21375;;;;21262:135;;;21416:5;20546:881;-1:-1:-1;;;;;;;20546:881:1:o;21836:510::-;22107:6;22096:9;22089:25;22150:3;22145:2;22134:9;22130:18;22123:31;22070:4;22171:57;22223:3;22212:9;22208:19;22200:6;22171:57;:::i;:::-;-1:-1:-1;;;;;22264:32:1;;;;22259:2;22244:18;;22237:60;-1:-1:-1;22328:2:1;22313:18;22306:34;22163:65;21836:510;-1:-1:-1;;21836:510:1:o

Swarm Source

ipfs://6f2a8af208c49e544f32926ac9bf59ea92f4917973b896b649eafbd9c8e04d8f

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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